| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_PLUGINS_PLUGIN_INFO_HOST_IMPL_H_ |
| #define CHROME_BROWSER_PLUGINS_PLUGIN_INFO_HOST_IMPL_H_ |
| |
| #include <memory> |
| #include <string> |
| #include <vector> |
| |
| #include "base/memory/raw_ptr.h" |
| #include "base/memory/scoped_refptr.h" |
| #include "base/task/sequenced_task_runner_helpers.h" |
| #include "chrome/browser/plugins/plugin_metadata.h" |
| #include "chrome/browser/plugins/plugin_prefs.h" |
| #include "chrome/common/plugin.mojom.h" |
| #include "components/content_settings/core/common/content_settings.h" |
| #include "components/keyed_service/core/keyed_service_shutdown_notifier.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "extensions/buildflags/buildflags.h" |
| #include "media/media_buildflags.h" |
| |
| class GURL; |
| class HostContentSettingsMap; |
| class Profile; |
| |
| namespace content { |
| struct WebPluginInfo; |
| } // namespace content |
| |
| namespace extensions { |
| class ExtensionRegistry; |
| } |
| |
| namespace url { |
| class Origin; |
| } |
| |
| // Implements PluginInfoHost interface. |
| class PluginInfoHostImpl : public chrome::mojom::PluginInfoHost { |
| public: |
| struct GetPluginInfo_Params; |
| |
| // Contains all the information needed by the PluginInfoHostImpl. |
| class Context { |
| public: |
| Context(int render_process_id, Profile* profile); |
| |
| ~Context(); |
| |
| int render_process_id() { return render_process_id_; } |
| |
| void DecidePluginStatus(const GURL& url, |
| const url::Origin& main_frame_origin, |
| const content::WebPluginInfo& plugin, |
| PluginMetadata::SecurityStatus security_status, |
| const std::string& plugin_identifier, |
| chrome::mojom::PluginStatus* status) const; |
| bool FindEnabledPlugin( |
| const GURL& url, |
| const std::string& mime_type, |
| chrome::mojom::PluginStatus* status, |
| content::WebPluginInfo* plugin, |
| std::string* actual_mime_type, |
| std::unique_ptr<PluginMetadata>* plugin_metadata) const; |
| void MaybeGrantAccess(chrome::mojom::PluginStatus status, |
| const base::FilePath& path) const; |
| bool IsPluginEnabled(const content::WebPluginInfo& plugin) const; |
| |
| private: |
| int render_process_id_; |
| #if BUILDFLAG(ENABLE_EXTENSIONS) |
| raw_ptr<extensions::ExtensionRegistry, DanglingUntriaged> |
| extension_registry_; |
| #endif |
| raw_ptr<const HostContentSettingsMap, AcrossTasksDanglingUntriaged> |
| host_content_settings_map_; |
| scoped_refptr<PluginPrefs> plugin_prefs_; |
| }; |
| |
| PluginInfoHostImpl(int render_process_id, Profile* profile); |
| |
| PluginInfoHostImpl(const PluginInfoHostImpl&) = delete; |
| PluginInfoHostImpl& operator=(const PluginInfoHostImpl&) = delete; |
| |
| ~PluginInfoHostImpl() override; |
| |
| // chrome::mojom::PluginInfoHost |
| void GetPluginInfo(const GURL& url, |
| const url::Origin& origin, |
| const std::string& mime_type, |
| GetPluginInfoCallback callback) override; |
| |
| static void EnsureFactoryBuilt(); |
| |
| private: |
| void ShutdownOnUIThread(); |
| |
| // |params| wraps the parameters passed to |OnGetPluginInfo|, because |
| // |base::Bind| doesn't support the required arity <http://crbug.com/98542>. |
| void PluginsLoaded(const GetPluginInfo_Params& params, |
| GetPluginInfoCallback callback, |
| const std::vector<content::WebPluginInfo>& plugins); |
| |
| void GetPluginInfoFinish(const GetPluginInfo_Params& params, |
| chrome::mojom::PluginInfoPtr output, |
| GetPluginInfoCallback callback, |
| std::unique_ptr<PluginMetadata> plugin_metadata); |
| |
| Context context_; |
| base::CallbackListSubscription shutdown_subscription_; |
| |
| base::WeakPtrFactory<PluginInfoHostImpl> weak_factory_{this}; |
| }; |
| |
| #endif // CHROME_BROWSER_PLUGINS_PLUGIN_INFO_HOST_IMPL_H_ |