| diff --git chrome/browser/plugins/plugin_info_host_impl.cc chrome/browser/plugins/plugin_info_host_impl.cc |
| index d49a1df73622..9a389e4383f0 100644 |
| --- chrome/browser/plugins/plugin_info_host_impl.cc |
| +++ chrome/browser/plugins/plugin_info_host_impl.cc |
| @@ -18,6 +18,7 @@ |
| #include "base/task_runner_util.h" |
| #include "build/branding_buildflags.h" |
| #include "build/build_config.h" |
| +#include "cef/libcef/features/features.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
| #include "chrome/browser/plugins/chrome_plugin_service_filter.h" |
| @@ -54,6 +55,11 @@ |
| #include "url/gurl.h" |
| #include "url/origin.h" |
| |
| +#if BUILDFLAG(ENABLE_CEF) |
| +#include "cef/libcef/browser/plugins/plugin_service_filter.h" |
| +#include "cef/libcef/common/extensions/extensions_util.h" |
| +#endif |
| + |
| #if BUILDFLAG(ENABLE_EXTENSIONS) |
| #include "components/guest_view/browser/guest_view_base.h" |
| #include "extensions/browser/extension_registry.h" |
| @@ -100,6 +106,9 @@ bool IsPluginLoadingAccessibleResourceInWebView( |
| extensions::ExtensionRegistry* extension_registry, |
| int process_id, |
| const GURL& resource) { |
| + if (!extension_registry) |
| + return false; |
| + |
| extensions::WebViewRendererState* renderer_state = |
| extensions::WebViewRendererState::GetInstance(); |
| std::string partition_id; |
| @@ -128,9 +137,6 @@ bool IsPluginLoadingAccessibleResourceInWebView( |
| |
| PluginInfoHostImpl::Context::Context(int render_process_id, Profile* profile) |
| : render_process_id_(render_process_id), |
| -#if BUILDFLAG(ENABLE_EXTENSIONS) |
| - extension_registry_(extensions::ExtensionRegistry::Get(profile)), |
| -#endif |
| host_content_settings_map_( |
| HostContentSettingsMapFactory::GetForProfile(profile)), |
| plugin_prefs_(PluginPrefs::GetForProfile(profile)) { |
| @@ -138,6 +144,13 @@ PluginInfoHostImpl::Context::Context(int render_process_id, Profile* profile) |
| profile->GetPrefs()); |
| run_all_flash_in_allow_mode_.Init(prefs::kRunAllFlashInAllowMode, |
| profile->GetPrefs()); |
| + |
| +#if BUILDFLAG(ENABLE_EXTENSIONS) |
| +#if BUILDFLAG(ENABLE_CEF) |
| + if (extensions::ExtensionsEnabled()) |
| +#endif |
| + extension_registry_ = extensions::ExtensionRegistry::Get(profile); |
| +#endif |
| } |
| |
| PluginInfoHostImpl::Context::~Context() {} |
| @@ -208,6 +221,7 @@ void PluginInfoHostImpl::PluginsLoaded( |
| plugin_metadata->identifier(), &output->status); |
| } |
| |
| +#if !BUILDFLAG(ENABLE_CEF) |
| if (output->status == chrome::mojom::PluginStatus::kNotFound) { |
| // Check to see if the component updater can fetch an implementation. |
| std::unique_ptr<component_updater::ComponentInfo> cus_plugin_info = |
| @@ -216,7 +230,9 @@ void PluginInfoHostImpl::PluginsLoaded( |
| ComponentPluginLookupDone(params, std::move(output), std::move(callback), |
| std::move(plugin_metadata), |
| std::move(cus_plugin_info)); |
| - } else { |
| + } else |
| +#endif // !BUILDFLAG(ENABLE_CEF) |
| + { |
| GetPluginInfoFinish(params, std::move(output), std::move(callback), |
| std::move(plugin_metadata)); |
| } |
| @@ -229,6 +245,14 @@ void PluginInfoHostImpl::Context::DecidePluginStatus( |
| PluginMetadata::SecurityStatus security_status, |
| const std::string& plugin_identifier, |
| chrome::mojom::PluginStatus* status) const { |
| +#if BUILDFLAG(ENABLE_CEF) |
| + // Don't override the user decision. |
| + if (*status == chrome::mojom::PluginStatus::kBlocked || |
| + *status == chrome::mojom::PluginStatus::kDisabled) { |
| + return; |
| + } |
| +#endif |
| + |
| if (security_status == PluginMetadata::SECURITY_STATUS_FULLY_TRUSTED) { |
| *status = chrome::mojom::PluginStatus::kAllowed; |
| return; |
| @@ -337,16 +361,35 @@ bool PluginInfoHostImpl::Context::FindEnabledPlugin( |
| return false; |
| } |
| |
| + const bool is_main_frame = |
| + main_frame_origin.IsSameOriginWith(url::Origin::Create(url)); |
| + |
| +#if BUILDFLAG(ENABLE_CEF) |
| + CefPluginServiceFilter* filter = static_cast<CefPluginServiceFilter*>( |
| + PluginService::GetInstance()->GetFilter()); |
| + DCHECK(filter); |
| + |
| + size_t i = 0; |
| + for (; i < matching_plugins.size(); ++i) { |
| + if (filter->IsPluginAvailable(render_process_id_, render_frame_id, |
| + url, is_main_frame, main_frame_origin, |
| + &matching_plugins[i], status)) { |
| + break; |
| + } |
| + } |
| +#else // !BUILDFLAG(ENABLE_CEF) |
| content::PluginServiceFilter* filter = |
| PluginService::GetInstance()->GetFilter(); |
| size_t i = 0; |
| for (; i < matching_plugins.size(); ++i) { |
| if (!filter || |
| filter->IsPluginAvailable(render_process_id_, render_frame_id, url, |
| - main_frame_origin, &matching_plugins[i])) { |
| + is_main_frame, main_frame_origin, |
| + &matching_plugins[i])) { |
| break; |
| } |
| } |
| +#endif // !BUILDFLAG(ENABLE_CEF) |
| |
| // If we broke out of the loop, we have found an enabled plugin. |
| bool enabled = i < matching_plugins.size(); |
| diff --git chrome/browser/plugins/plugin_utils.cc chrome/browser/plugins/plugin_utils.cc |
| index 4e64db143b8a..71322b0261a1 100644 |
| --- chrome/browser/plugins/plugin_utils.cc |
| +++ chrome/browser/plugins/plugin_utils.cc |
| @@ -5,6 +5,7 @@ |
| #include "chrome/browser/plugins/plugin_utils.h" |
| |
| #include "base/values.h" |
| +#include "cef/libcef/features/features.h" |
| #include "chrome/browser/profiles/profile_io_data.h" |
| #include "chrome/common/plugin_utils.h" |
| #include "components/content_settings/core/browser/host_content_settings_map.h" |
| @@ -14,6 +15,11 @@ |
| #include "url/gurl.h" |
| #include "url/origin.h" |
| |
| +#if BUILDFLAG(ENABLE_CEF) |
| +#include "cef/libcef/browser/resource_context.h" |
| +#include "cef/libcef/common/extensions/extensions_util.h" |
| +#endif |
| + |
| #if BUILDFLAG(ENABLE_EXTENSIONS) |
| #include "chrome/common/pref_names.h" |
| #include "components/prefs/pref_service.h" |
| @@ -182,6 +188,12 @@ base::flat_map<std::string, std::string> |
| PluginUtils::GetMimeTypeToExtensionIdMap( |
| content::BrowserContext* browser_context) { |
| base::flat_map<std::string, std::string> mime_type_to_extension_id_map; |
| + |
| +#if BUILDFLAG(ENABLE_CEF) |
| + if (!extensions::ExtensionsEnabled()) |
| + return mime_type_to_extension_id_map; |
| +#endif |
| + |
| #if BUILDFLAG(ENABLE_EXTENSIONS) |
| Profile* profile = Profile::FromBrowserContext(browser_context); |
| std::vector<std::string> whitelist = MimeTypesHandler::GetMIMETypeWhitelist(); |
| diff --git chrome/common/google_url_loader_throttle.cc chrome/common/google_url_loader_throttle.cc |
| index bcb97138c321..df6792bd5317 100644 |
| --- chrome/common/google_url_loader_throttle.cc |
| +++ chrome/common/google_url_loader_throttle.cc |
| @@ -5,10 +5,15 @@ |
| #include "chrome/common/google_url_loader_throttle.h" |
| |
| #include "build/build_config.h" |
| +#include "cef/libcef/features/features.h" |
| #include "chrome/common/net/safe_search_util.h" |
| #include "components/google/core/common/google_util.h" |
| #include "services/network/public/mojom/url_response_head.mojom.h" |
| |
| +#if BUILDFLAG(ENABLE_CEF) |
| +#include "cef/libcef/common/extensions/extensions_util.h" |
| +#endif |
| + |
| #if BUILDFLAG(ENABLE_EXTENSIONS) |
| #include "extensions/common/extension_urls.h" |
| #endif |
| @@ -116,6 +121,11 @@ void GoogleURLLoaderThrottle::WillProcessResponse( |
| const GURL& response_url, |
| network::mojom::URLResponseHead* response_head, |
| bool* defer) { |
| +#if BUILDFLAG(ENABLE_CEF) |
| + if (!extensions::ExtensionsEnabled()) |
| + return; |
| +#endif |
| + |
| // Built-in additional protection for the chrome web store origin. |
| GURL webstore_url(extension_urls::GetWebstoreLaunchURL()); |
| if (response_url.SchemeIsHTTPOrHTTPS() && |
| diff --git chrome/renderer/chrome_content_renderer_client.cc chrome/renderer/chrome_content_renderer_client.cc |
| index b96048aec4f7..edaa78c59fe8 100644 |
| --- chrome/renderer/chrome_content_renderer_client.cc |
| +++ chrome/renderer/chrome_content_renderer_client.cc |
| @@ -813,6 +813,7 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin( |
| |
| if ((status == chrome::mojom::PluginStatus::kUnauthorized || |
| status == chrome::mojom::PluginStatus::kBlocked) && |
| + content_settings_agent && |
| content_settings_agent->IsPluginTemporarilyAllowed(identifier)) { |
| status = chrome::mojom::PluginStatus::kAllowed; |
| } |
| @@ -1015,7 +1016,8 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin( |
| render_frame->GetRemoteAssociatedInterfaces()->GetInterface( |
| plugin_auth_host.BindNewEndpointAndPassReceiver()); |
| plugin_auth_host->BlockedUnauthorizedPlugin(group_name, identifier); |
| - content_settings_agent->DidBlockContentType(content_type); |
| + if (content_settings_agent) |
| + content_settings_agent->DidBlockContentType(content_type); |
| break; |
| } |
| case chrome::mojom::PluginStatus::kBlocked: { |
| @@ -1024,7 +1026,8 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin( |
| l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED, group_name)); |
| placeholder->AllowLoading(); |
| RenderThread::Get()->RecordAction(UserMetricsAction("Plugin_Blocked")); |
| - content_settings_agent->DidBlockContentType(content_type); |
| + if (content_settings_agent) |
| + content_settings_agent->DidBlockContentType(content_type); |
| break; |
| } |
| case chrome::mojom::PluginStatus::kBlockedByPolicy: { |
| @@ -1034,7 +1037,8 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin( |
| group_name)); |
| RenderThread::Get()->RecordAction( |
| UserMetricsAction("Plugin_BlockedByPolicy")); |
| - content_settings_agent->DidBlockContentType(content_type); |
| + if (content_settings_agent) |
| + content_settings_agent->DidBlockContentType(content_type); |
| break; |
| } |
| case chrome::mojom::PluginStatus::kBlockedNoLoading: { |
| @@ -1042,7 +1046,8 @@ WebPlugin* ChromeContentRendererClient::CreatePlugin( |
| IDR_BLOCKED_PLUGIN_HTML, |
| l10n_util::GetStringFUTF16(IDS_PLUGIN_BLOCKED_NO_LOADING, |
| group_name)); |
| - content_settings_agent->DidBlockContentType(content_type); |
| + if (content_settings_agent) |
| + content_settings_agent->DidBlockContentType(content_type); |
| break; |
| } |
| case chrome::mojom::PluginStatus::kComponentUpdateRequired: { |
| diff --git chrome/renderer/plugins/chrome_plugin_placeholder.cc chrome/renderer/plugins/chrome_plugin_placeholder.cc |
| index 8a7d7402a48c..4dde943d0222 100644 |
| --- chrome/renderer/plugins/chrome_plugin_placeholder.cc |
| +++ chrome/renderer/plugins/chrome_plugin_placeholder.cc |
| @@ -359,8 +359,11 @@ void ChromePluginPlaceholder::OnBlockedContent( |
| |
| if (status == |
| content::RenderFrame::PeripheralContentStatus::CONTENT_STATUS_TINY) { |
| - ContentSettingsAgentImpl::Get(render_frame()) |
| - ->DidBlockContentType(ContentSettingsType::PLUGINS); |
| + ContentSettingsAgentImpl *content_settings_agent = |
| + ContentSettingsAgentImpl::Get(render_frame()); |
| + if (content_settings_agent) { |
| + content_settings_agent->DidBlockContentType(ContentSettingsType::PLUGINS); |
| + } |
| } |
| |
| std::string message = base::StringPrintf( |