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 |