Index: chrome/browser/plugins/plugin_utils.cc |
diff --git a/chrome/browser/plugins/plugin_utils.cc b/chrome/browser/plugins/plugin_utils.cc |
index 582d098b1380424bcca1aa64cad2f0986093c9c5..2a21946c26d2769c5d4e9e859c8fb4a5675f905e 100644 |
--- a/chrome/browser/plugins/plugin_utils.cc |
+++ b/chrome/browser/plugins/plugin_utils.cc |
@@ -5,10 +5,12 @@ |
#include "chrome/browser/plugins/plugin_utils.h" |
#include "base/values.h" |
+#include "chrome/common/chrome_features.h" |
#include "chrome/common/plugin_utils.h" |
#include "components/content_settings/core/browser/host_content_settings_map.h" |
#include "content/public/common/webplugininfo.h" |
#include "url/gurl.h" |
+#include "url/origin.h" |
namespace { |
@@ -17,29 +19,30 @@ const char kFlashPluginID[] = "adobe-flash-player"; |
void GetPluginContentSettingInternal( |
const HostContentSettingsMap* host_content_settings_map, |
bool use_javascript_setting, |
- const GURL& policy_url, |
+ const url::Origin& main_frame_origin, |
const GURL& plugin_url, |
const std::string& resource, |
ContentSetting* setting, |
bool* uses_default_content_setting, |
bool* is_managed) { |
+ GURL main_frame_url = main_frame_origin.GetURL(); |
std::unique_ptr<base::Value> value; |
content_settings::SettingInfo info; |
bool uses_plugin_specific_setting = false; |
if (use_javascript_setting) { |
value = host_content_settings_map->GetWebsiteSetting( |
- policy_url, policy_url, CONTENT_SETTINGS_TYPE_JAVASCRIPT, std::string(), |
- &info); |
+ main_frame_url, main_frame_url, CONTENT_SETTINGS_TYPE_JAVASCRIPT, |
+ std::string(), &info); |
} else { |
content_settings::SettingInfo specific_info; |
std::unique_ptr<base::Value> specific_setting = |
host_content_settings_map->GetWebsiteSetting( |
- policy_url, plugin_url, CONTENT_SETTINGS_TYPE_PLUGINS, resource, |
+ main_frame_url, plugin_url, CONTENT_SETTINGS_TYPE_PLUGINS, resource, |
&specific_info); |
content_settings::SettingInfo general_info; |
std::unique_ptr<base::Value> general_setting = |
host_content_settings_map->GetWebsiteSetting( |
- policy_url, plugin_url, CONTENT_SETTINGS_TYPE_PLUGINS, |
+ main_frame_url, plugin_url, CONTENT_SETTINGS_TYPE_PLUGINS, |
std::string(), &general_info); |
// If there is a plugin-specific setting, we use it, unless the general |
// setting was set by policy, in which case it takes precedence. |
@@ -63,6 +66,14 @@ void GetPluginContentSettingInternal( |
} |
if (is_managed) |
*is_managed = info.source == content_settings::SETTING_SOURCE_POLICY; |
+ |
+ // For non-JavaScript treated plugins (Flash): unless the user has explicitly |
+ // ALLOWed plugins, return BLOCK for any non-HTTP and non-FILE origin. |
+ if (!use_javascript_setting && *setting != CONTENT_SETTING_ALLOW && |
+ base::FeatureList::IsEnabled(features::kPreferHtmlOverPlugins) && |
+ !main_frame_url.SchemeIsHTTPOrHTTPS() && !main_frame_url.SchemeIsFile()) { |
+ *setting = CONTENT_SETTING_BLOCK; |
+ } |
} |
} // namespace |
@@ -71,27 +82,28 @@ void GetPluginContentSettingInternal( |
void PluginUtils::GetPluginContentSetting( |
const HostContentSettingsMap* host_content_settings_map, |
const content::WebPluginInfo& plugin, |
- const GURL& policy_url, |
+ const url::Origin& main_frame_origin, |
const GURL& plugin_url, |
const std::string& resource, |
ContentSetting* setting, |
bool* uses_default_content_setting, |
bool* is_managed) { |
- GetPluginContentSettingInternal(host_content_settings_map, |
- ShouldUseJavaScriptSettingForPlugin(plugin), |
- policy_url, plugin_url, resource, setting, |
- uses_default_content_setting, is_managed); |
+ GetPluginContentSettingInternal( |
+ host_content_settings_map, ShouldUseJavaScriptSettingForPlugin(plugin), |
+ main_frame_origin, plugin_url, resource, setting, |
+ uses_default_content_setting, is_managed); |
} |
// static |
ContentSetting PluginUtils::GetFlashPluginContentSetting( |
const HostContentSettingsMap* host_content_settings_map, |
- const GURL& policy_url, |
+ const url::Origin& main_frame_origin, |
const GURL& plugin_url, |
bool* is_managed) { |
ContentSetting plugin_setting = CONTENT_SETTING_DEFAULT; |
- GetPluginContentSettingInternal( |
- host_content_settings_map, false /* use_javascript_setting */, policy_url, |
- plugin_url, kFlashPluginID, &plugin_setting, nullptr, is_managed); |
+ GetPluginContentSettingInternal(host_content_settings_map, |
+ false /* use_javascript_setting */, |
+ main_frame_origin, plugin_url, kFlashPluginID, |
+ &plugin_setting, nullptr, is_managed); |
return plugin_setting; |
} |