| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/plugins/plugin_utils.h" | 5 #include "chrome/browser/plugins/plugin_utils.h" |
| 6 | 6 |
| 7 #include "base/values.h" | 7 #include "base/values.h" |
| 8 #include "chrome/browser/permissions/permission_result.h" |
| 9 #include "chrome/browser/permissions/permission_util.h" |
| 8 #include "chrome/common/chrome_features.h" | 10 #include "chrome/common/chrome_features.h" |
| 9 #include "chrome/common/plugin_utils.h" | 11 #include "chrome/common/plugin_utils.h" |
| 10 #include "components/content_settings/core/browser/host_content_settings_map.h" | 12 #include "components/content_settings/core/browser/host_content_settings_map.h" |
| 11 #include "components/content_settings/core/common/content_settings_types.h" | 13 #include "components/content_settings/core/common/content_settings_types.h" |
| 12 #include "content/public/common/webplugininfo.h" | 14 #include "content/public/common/webplugininfo.h" |
| 13 #include "url/gurl.h" | 15 #include "url/gurl.h" |
| 14 #include "url/origin.h" | 16 #include "url/origin.h" |
| 15 | 17 |
| 16 namespace { | 18 namespace { |
| 17 | 19 |
| 18 const char kFlashPluginID[] = "adobe-flash-player"; | 20 const char kFlashPluginID[] = "adobe-flash-player"; |
| 19 | 21 |
| 20 void GetPluginContentSettingInternal( | 22 void GetPluginContentSettingInternal( |
| 21 const HostContentSettingsMap* host_content_settings_map, | 23 const HostContentSettingsMap* host_content_settings_map, |
| 22 bool use_javascript_setting, | 24 bool use_javascript_setting, |
| 23 const url::Origin& main_frame_origin, | 25 const url::Origin& main_frame_origin, |
| 24 const GURL& plugin_url, | 26 const GURL& plugin_url, |
| 25 const std::string& resource, | 27 const std::string& resource, |
| 26 ContentSetting* setting, | 28 PermissionResult* permission_result, |
| 27 bool* uses_default_content_setting, | 29 bool* uses_default_content_setting, |
| 28 bool* is_managed) { | 30 bool* is_managed) { |
| 29 GURL main_frame_url = main_frame_origin.GetURL(); | 31 GURL main_frame_url = main_frame_origin.GetURL(); |
| 30 std::unique_ptr<base::Value> value; | 32 std::unique_ptr<base::Value> value; |
| 31 content_settings::SettingInfo info; | 33 content_settings::SettingInfo info; |
| 32 bool uses_plugin_specific_setting = false; | 34 bool uses_plugin_specific_setting = false; |
| 33 if (use_javascript_setting) { | 35 if (use_javascript_setting) { |
| 34 value = host_content_settings_map->GetWebsiteSetting( | 36 value = host_content_settings_map->GetWebsiteSetting( |
| 35 main_frame_url, main_frame_url, CONTENT_SETTINGS_TYPE_JAVASCRIPT, | 37 main_frame_url, main_frame_url, CONTENT_SETTINGS_TYPE_JAVASCRIPT, |
| 36 std::string(), &info); | 38 std::string(), &info); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 51 specific_setting && | 53 specific_setting && |
| 52 general_info.source != content_settings::SETTING_SOURCE_POLICY; | 54 general_info.source != content_settings::SETTING_SOURCE_POLICY; |
| 53 if (uses_plugin_specific_setting) { | 55 if (uses_plugin_specific_setting) { |
| 54 value = std::move(specific_setting); | 56 value = std::move(specific_setting); |
| 55 info = specific_info; | 57 info = specific_info; |
| 56 } else { | 58 } else { |
| 57 value = std::move(general_setting); | 59 value = std::move(general_setting); |
| 58 info = general_info; | 60 info = general_info; |
| 59 } | 61 } |
| 60 } | 62 } |
| 61 *setting = content_settings::ValueToContentSetting(value.get()); | 63 permission_result->content_setting = |
| 64 content_settings::ValueToContentSetting(value.get()); |
| 65 permission_result->source = |
| 66 PermissionUtil::ConvertSettingSourceToPermissionStatusSource(info.source); |
| 62 if (uses_default_content_setting) { | 67 if (uses_default_content_setting) { |
| 63 *uses_default_content_setting = | 68 *uses_default_content_setting = |
| 64 !uses_plugin_specific_setting && | 69 !uses_plugin_specific_setting && |
| 65 info.primary_pattern == ContentSettingsPattern::Wildcard() && | 70 info.primary_pattern == ContentSettingsPattern::Wildcard() && |
| 66 info.secondary_pattern == ContentSettingsPattern::Wildcard(); | 71 info.secondary_pattern == ContentSettingsPattern::Wildcard(); |
| 67 } | 72 } |
| 68 if (is_managed) | 73 if (is_managed) |
| 69 *is_managed = info.source == content_settings::SETTING_SOURCE_POLICY; | 74 *is_managed = info.source == content_settings::SETTING_SOURCE_POLICY; |
| 70 | 75 |
| 71 // For non-JavaScript treated plugins (Flash): unless the user has explicitly | 76 // For non-JavaScript treated plugins (Flash): unless the user has explicitly |
| 72 // ALLOWed plugins, return BLOCK for any non-HTTP and non-FILE origin. | 77 // ALLOWed plugins, return BLOCK for any non-HTTP and non-FILE origin. |
| 73 if (!use_javascript_setting && *setting != CONTENT_SETTING_ALLOW && | 78 if (!use_javascript_setting && |
| 79 permission_result->content_setting != CONTENT_SETTING_ALLOW && |
| 74 PluginUtils::ShouldPreferHtmlOverPlugins(host_content_settings_map) && | 80 PluginUtils::ShouldPreferHtmlOverPlugins(host_content_settings_map) && |
| 75 !main_frame_url.SchemeIsHTTPOrHTTPS() && !main_frame_url.SchemeIsFile()) { | 81 !main_frame_url.SchemeIsHTTPOrHTTPS() && !main_frame_url.SchemeIsFile()) { |
| 76 *setting = CONTENT_SETTING_BLOCK; | 82 permission_result->content_setting = CONTENT_SETTING_BLOCK; |
| 77 } | 83 } |
| 78 } | 84 } |
| 79 | 85 |
| 80 } // namespace | 86 } // namespace |
| 81 | 87 |
| 82 // static | 88 // static |
| 83 void PluginUtils::GetPluginContentSetting( | 89 void PluginUtils::GetPluginContentSetting( |
| 84 const HostContentSettingsMap* host_content_settings_map, | 90 const HostContentSettingsMap* host_content_settings_map, |
| 85 const content::WebPluginInfo& plugin, | 91 const content::WebPluginInfo& plugin, |
| 86 const url::Origin& main_frame_origin, | 92 const url::Origin& main_frame_origin, |
| 87 const GURL& plugin_url, | 93 const GURL& plugin_url, |
| 88 const std::string& resource, | 94 const std::string& resource, |
| 89 ContentSetting* setting, | 95 PermissionResult* permission_result, |
| 90 bool* uses_default_content_setting, | 96 bool* uses_default_content_setting, |
| 91 bool* is_managed) { | 97 bool* is_managed) { |
| 92 GetPluginContentSettingInternal( | 98 GetPluginContentSettingInternal( |
| 93 host_content_settings_map, ShouldUseJavaScriptSettingForPlugin(plugin), | 99 host_content_settings_map, ShouldUseJavaScriptSettingForPlugin(plugin), |
| 94 main_frame_origin, plugin_url, resource, setting, | 100 main_frame_origin, plugin_url, resource, permission_result, |
| 95 uses_default_content_setting, is_managed); | 101 uses_default_content_setting, is_managed); |
| 96 } | 102 } |
| 97 | 103 |
| 98 // static | 104 // static |
| 99 ContentSetting PluginUtils::GetFlashPluginContentSetting( | 105 PermissionResult PluginUtils::GetFlashPluginContentSetting( |
| 100 const HostContentSettingsMap* host_content_settings_map, | 106 const HostContentSettingsMap* host_content_settings_map, |
| 101 const url::Origin& main_frame_origin, | 107 const url::Origin& main_frame_origin, |
| 102 const GURL& plugin_url, | 108 const GURL& plugin_url, |
| 103 bool* is_managed) { | 109 bool* is_managed) { |
| 104 ContentSetting plugin_setting = CONTENT_SETTING_DEFAULT; | 110 PermissionResult result = PermissionResult( |
| 111 CONTENT_SETTING_DEFAULT, PermissionStatusSource::UNSPECIFIED); |
| 105 GetPluginContentSettingInternal(host_content_settings_map, | 112 GetPluginContentSettingInternal(host_content_settings_map, |
| 106 false /* use_javascript_setting */, | 113 false /* use_javascript_setting */, |
| 107 main_frame_origin, plugin_url, kFlashPluginID, | 114 main_frame_origin, plugin_url, kFlashPluginID, |
| 108 &plugin_setting, nullptr, is_managed); | 115 &result, nullptr, is_managed); |
| 109 return plugin_setting; | 116 return result; |
| 110 } | 117 } |
| 111 | 118 |
| 112 // static | 119 // static |
| 113 bool PluginUtils::ShouldPreferHtmlOverPlugins( | 120 bool PluginUtils::ShouldPreferHtmlOverPlugins( |
| 114 const HostContentSettingsMap* host_content_settings_map) { | 121 const HostContentSettingsMap* host_content_settings_map) { |
| 115 return base::FeatureList::IsEnabled(features::kPreferHtmlOverPlugins); | 122 return base::FeatureList::IsEnabled(features::kPreferHtmlOverPlugins); |
| 116 } | 123 } |
| OLD | NEW |