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

Unified Diff: content/renderer/pepper/pepper_plugin_instance_impl.cc

Issue 669703003: Plugin Power Saver: Restrict Power Saver to cross-origin. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/pepper/pepper_plugin_instance_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/pepper/pepper_plugin_instance_impl.cc
diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc
index 97a85c90f253966dd8e964bd7232cfe7d199e90f..6155dcdbeea54a21cf528474ea83179da4551396 100644
--- a/content/renderer/pepper/pepper_plugin_instance_impl.cc
+++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc
@@ -583,13 +583,9 @@ PepperPluginInstanceImpl::PepperPluginInstanceImpl(
GetContentClient()->renderer()->IsExternalPepperPlugin(module->name()))
external_document_load_ = true;
- // TODO(tommycli): Insert heuristics to determine whether plugin content
- // is peripheral here.
- bool is_peripheral_content = true;
- power_saver_enabled_ = is_peripheral_content &&
- module->name() == kFlashPluginName &&
- CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnablePluginPowerSaver);
+ power_saver_enabled_ = CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnablePluginPowerSaver) &&
+ IsPeripheralContent();
if (power_saver_enabled_) {
throttler_.reset(new PepperPluginInstanceThrottler(
@@ -3299,6 +3295,27 @@ void PepperPluginInstanceImpl::DidDataFromWebURLResponse(
}
}
+bool PepperPluginInstanceImpl::IsPeripheralContent() const {
+ if (module_->name() != kFlashPluginName)
+ return false;
+
+ // Peripheral plugin content is defined to be peripheral when the plugin
+ // content's origin differs from the top level frame's origin. For example:
+ // - Peripheral: a.com -> b.com/plugin.swf
+ // - Peripheral: a.com -> b.com/iframe.html -> b.com/plugin.swf
+ // - NOT peripheral: a.com -> b.com/iframe-to-a.html -> a.com/plugin.swf
+
+ // TODO(alexmos): Update this to use the origin of the RemoteFrame when 426512
+ // is fixed. For now, case 3 in the comment above doesn't work in
+ // --site-per-process mode.
+ WebFrame* top_frame = render_frame_->GetWebFrame()->view()->mainFrame();
raymes 2014/10/23 22:33:19 nit: might as well call this "main_frame" and "mai
tommycli 2014/10/23 22:42:20 Done.
+ if (top_frame->isWebRemoteFrame())
+ return true;
+
+ GURL top_frame_url = top_frame->document().url();
+ return plugin_url_.GetOrigin() != top_frame_url.GetOrigin();
+}
+
void PepperPluginInstanceImpl::SetPluginThrottled(bool throttled) {
// Do not throttle if we've already disabled power saver.
if (!power_saver_enabled_ && throttled)
« no previous file with comments | « content/renderer/pepper/pepper_plugin_instance_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698