Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: chrome/browser/plugins/chrome_plugin_service_filter.cc

Issue 2378573005: [HBD] Blanket BLOCK on all non-HTTP(s) and non-FILE URLs for Flash. (Closed)
Patch Set: fix dat merge Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/chrome_plugin_service_filter.h" 5 #include "chrome/browser/plugins/chrome_plugin_service_filter.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
(...skipping 10 matching lines...) Expand all
21 #include "chrome/common/render_messages.h" 21 #include "chrome/common/render_messages.h"
22 #include "components/content_settings/core/browser/host_content_settings_map.h" 22 #include "components/content_settings/core/browser/host_content_settings_map.h"
23 #include "content/public/browser/browser_thread.h" 23 #include "content/public/browser/browser_thread.h"
24 #include "content/public/browser/notification_service.h" 24 #include "content/public/browser/notification_service.h"
25 #include "content/public/browser/plugin_service.h" 25 #include "content/public/browser/plugin_service.h"
26 #include "content/public/browser/render_frame_host.h" 26 #include "content/public/browser/render_frame_host.h"
27 #include "content/public/browser/render_process_host.h" 27 #include "content/public/browser/render_process_host.h"
28 #include "content/public/browser/resource_context.h" 28 #include "content/public/browser/resource_context.h"
29 #include "content/public/browser/web_contents.h" 29 #include "content/public/browser/web_contents.h"
30 #include "content/public/common/content_constants.h" 30 #include "content/public/common/content_constants.h"
31 #include "url/gurl.h"
32 31
33 using content::BrowserThread; 32 using content::BrowserThread;
34 using content::PluginService; 33 using content::PluginService;
35 34
36 namespace { 35 namespace {
37 36
38 class ProfileContentSettingObserver : public content_settings::Observer { 37 class ProfileContentSettingObserver : public content_settings::Observer {
39 public: 38 public:
40 explicit ProfileContentSettingObserver(Profile* profile) 39 explicit ProfileContentSettingObserver(Profile* profile)
41 : profile_(profile) {} 40 : profile_(profile) {}
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 web_contents->SendToAllFrames(new ChromeViewMsg_LoadBlockedPlugins( 167 web_contents->SendToAllFrames(new ChromeViewMsg_LoadBlockedPlugins(
169 MSG_ROUTING_NONE, identifier)); 168 MSG_ROUTING_NONE, identifier));
170 } 169 }
171 } 170 }
172 171
173 bool ChromePluginServiceFilter::IsPluginAvailable( 172 bool ChromePluginServiceFilter::IsPluginAvailable(
174 int render_process_id, 173 int render_process_id,
175 int render_frame_id, 174 int render_frame_id,
176 const void* context, 175 const void* context,
177 const GURL& plugin_content_url, 176 const GURL& plugin_content_url,
178 const GURL& main_url, 177 const url::Origin& main_frame_origin,
179 content::WebPluginInfo* plugin) { 178 content::WebPluginInfo* plugin) {
180 base::AutoLock auto_lock(lock_); 179 base::AutoLock auto_lock(lock_);
181 const ProcessDetails* details = GetProcess(render_process_id); 180 const ProcessDetails* details = GetProcess(render_process_id);
182 181
183 // Check whether the plugin is overridden. 182 // Check whether the plugin is overridden.
184 if (details) { 183 if (details) {
185 for (const auto& plugin_override : details->overridden_plugins) { 184 for (const auto& plugin_override : details->overridden_plugins) {
186 if (plugin_override.render_frame_id == render_frame_id && 185 if (plugin_override.render_frame_id == render_frame_id &&
187 (plugin_override.url.is_empty() || 186 (plugin_override.url.is_empty() ||
188 plugin_override.url == plugin_content_url)) { 187 plugin_override.url == plugin_content_url)) {
(...skipping 16 matching lines...) Expand all
205 const ContextInfo* context_info = context_info_it->second.get(); 204 const ContextInfo* context_info = context_info_it->second.get();
206 if (!context_info->plugin_prefs.get()->IsPluginEnabled(*plugin)) 205 if (!context_info->plugin_prefs.get()->IsPluginEnabled(*plugin))
207 return false; 206 return false;
208 207
209 // If PreferHtmlOverPlugins is enabled and the plugin is Flash, we do 208 // If PreferHtmlOverPlugins is enabled and the plugin is Flash, we do
210 // additional checks. 209 // additional checks.
211 if (plugin->name == base::ASCIIToUTF16(content::kFlashPluginName) && 210 if (plugin->name == base::ASCIIToUTF16(content::kFlashPluginName) &&
212 base::FeatureList::IsEnabled(features::kPreferHtmlOverPlugins)) { 211 base::FeatureList::IsEnabled(features::kPreferHtmlOverPlugins)) {
213 // Check the content setting first, and always respect the ALLOW or BLOCK 212 // Check the content setting first, and always respect the ALLOW or BLOCK
214 // state. When IsPluginAvailable() is called to check whether a plugin 213 // state. When IsPluginAvailable() is called to check whether a plugin
215 // should be advertised, |plugin_content_url| has the same value of 214 // should be advertised, |url| has the same origin as |main_frame_origin|.
216 // |main_url| (i.e. the main frame origin). The intended behavior is that 215 // The intended behavior is that Flash is advertised only if a Flash embed
217 // Flash is advertised only if a Flash embed hosted on the same origin as 216 // hosted on the same origin as the main frame origin is allowed to run.
218 // the main frame origin is allowed to run.
219 bool is_managed = false; 217 bool is_managed = false;
220 HostContentSettingsMap* settings_map = 218 HostContentSettingsMap* settings_map =
221 context_info_it->second->host_content_settings_map.get(); 219 context_info_it->second->host_content_settings_map.get();
222 ContentSetting flash_setting = PluginUtils::GetFlashPluginContentSetting( 220 ContentSetting flash_setting = PluginUtils::GetFlashPluginContentSetting(
223 settings_map, main_url, plugin_content_url, &is_managed); 221 settings_map, main_frame_origin, plugin_content_url, &is_managed);
224 flash_setting = PluginsFieldTrial::EffectiveContentSetting( 222 flash_setting = PluginsFieldTrial::EffectiveContentSetting(
225 CONTENT_SETTINGS_TYPE_PLUGINS, flash_setting); 223 CONTENT_SETTINGS_TYPE_PLUGINS, flash_setting);
226 double engagement = 224 double engagement = SiteEngagementService::GetScoreFromSettings(
227 SiteEngagementService::GetScoreFromSettings(settings_map, main_url); 225 settings_map, main_frame_origin.GetURL());
228 226
229 if (flash_setting == CONTENT_SETTING_ALLOW) { 227 if (flash_setting == CONTENT_SETTING_ALLOW) {
230 UMA_HISTOGRAM_COUNTS_100(kEngagementSettingAllowedHistogram, engagement); 228 UMA_HISTOGRAM_COUNTS_100(kEngagementSettingAllowedHistogram, engagement);
231 return true; 229 return true;
232 } 230 }
233 231
234 if (flash_setting == CONTENT_SETTING_BLOCK) { 232 if (flash_setting == CONTENT_SETTING_BLOCK) {
235 UMA_HISTOGRAM_COUNTS_100(kEngagementSettingBlockedHistogram, engagement); 233 UMA_HISTOGRAM_COUNTS_100(kEngagementSettingBlockedHistogram, engagement);
236 return false; 234 return false;
237 } 235 }
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 312
315 const ChromePluginServiceFilter::ProcessDetails* 313 const ChromePluginServiceFilter::ProcessDetails*
316 ChromePluginServiceFilter::GetProcess( 314 ChromePluginServiceFilter::GetProcess(
317 int render_process_id) const { 315 int render_process_id) const {
318 std::map<int, ProcessDetails>::const_iterator it = 316 std::map<int, ProcessDetails>::const_iterator it =
319 plugin_details_.find(render_process_id); 317 plugin_details_.find(render_process_id);
320 if (it == plugin_details_.end()) 318 if (it == plugin_details_.end())
321 return NULL; 319 return NULL;
322 return &it->second; 320 return &it->second;
323 } 321 }
OLDNEW
« no previous file with comments | « chrome/browser/plugins/chrome_plugin_service_filter.h ('k') | chrome/browser/plugins/chrome_plugin_service_filter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698