| Index: components/plugins/renderer/loadable_plugin_placeholder.cc
|
| diff --git a/components/plugins/renderer/loadable_plugin_placeholder.cc b/components/plugins/renderer/loadable_plugin_placeholder.cc
|
| index 376db7bd3226e64a63dcee666419b37c884c020b..dc4b5b2797aacf78f1918d146b479e6e67053388 100644
|
| --- a/components/plugins/renderer/loadable_plugin_placeholder.cc
|
| +++ b/components/plugins/renderer/loadable_plugin_placeholder.cc
|
| @@ -75,8 +75,8 @@ LoadablePluginPlaceholder::LoadablePluginPlaceholder(
|
| allow_loading_(false),
|
| finished_loading_(false),
|
| in_size_recheck_(false),
|
| - weak_factory_(this) {
|
| -}
|
| + heuristic_run_before_(premade_throttler_ != nullptr),
|
| + weak_factory_(this) {}
|
|
|
| LoadablePluginPlaceholder::~LoadablePluginPlaceholder() {
|
| }
|
| @@ -90,7 +90,7 @@ void LoadablePluginPlaceholder::MarkPluginEssential(
|
|
|
| if (premade_throttler_)
|
| premade_throttler_->MarkPluginEssential(method);
|
| - else
|
| + else if (method != PluginInstanceThrottler::UNTHROTTLE_METHOD_DO_NOT_RECORD)
|
| PluginInstanceThrottler::RecordUnthrottleMethodMetric(method);
|
|
|
| if (is_blocked_for_power_saver_poster_) {
|
| @@ -328,29 +328,38 @@ void LoadablePluginPlaceholder::RecheckSizeAndMaybeUnthrottle() {
|
| plugin()->container()->reportGeometry();
|
|
|
| float zoom_factor = plugin()->container()->pageZoomFactor();
|
| + int width = roundf(unobscured_rect_.width() / zoom_factor);
|
| + int height = roundf(unobscured_rect_.height() / zoom_factor);
|
|
|
| - // Adjust poster container padding and dimensions to center play button for
|
| - // plugins and plugin posters that have their top or left portions obscured.
|
| if (is_blocked_for_power_saver_poster_) {
|
| + // Adjust poster container padding and dimensions to center play button for
|
| + // plugins and plugin posters that have their top or left portions obscured.
|
| int x = roundf(unobscured_rect_.x() / zoom_factor);
|
| int y = roundf(unobscured_rect_.y() / zoom_factor);
|
| - int width = roundf(unobscured_rect_.width() / zoom_factor);
|
| - int height = roundf(unobscured_rect_.height() / zoom_factor);
|
| std::string script = base::StringPrintf(
|
| "window.resizePoster('%dpx', '%dpx', '%dpx', '%dpx')", x, y, width,
|
| height);
|
| plugin()->web_view()->mainFrame()->executeScript(
|
| blink::WebScriptSource(base::UTF8ToUTF16(script)));
|
| - }
|
|
|
| - // Only unthrottle on size increase for plugins without poster.
|
| - // TODO(tommycli): Address this unfairness to plugins that specify a poster.
|
| - if (premade_throttler_ &&
|
| - PluginInstanceThrottler::IsLargeContent(
|
| - roundf(unobscured_rect_.width() / zoom_factor),
|
| - roundf(unobscured_rect_.height() / zoom_factor))) {
|
| - MarkPluginEssential(
|
| - PluginInstanceThrottler::UNTHROTTLE_METHOD_BY_SIZE_CHANGE);
|
| + // On a size update check if we now qualify as a essential plugin.
|
| + url::Origin content_origin = url::Origin(GetPluginParams().url);
|
| + bool cross_origin_main_content = false;
|
| + std::string plugin_module_name = base::UTF16ToUTF8(GetPluginInfo().name);
|
| + if (!render_frame()->ShouldThrottleContent(
|
| + render_frame()->GetWebFrame()->top()->securityOrigin(),
|
| + content_origin, plugin_module_name, width, height,
|
| + &cross_origin_main_content)) {
|
| + MarkPluginEssential(
|
| + heuristic_run_before_
|
| + ? PluginInstanceThrottler::UNTHROTTLE_METHOD_BY_SIZE_CHANGE
|
| + : PluginInstanceThrottler::UNTHROTTLE_METHOD_DO_NOT_RECORD);
|
| +
|
| + if (cross_origin_main_content && !heuristic_run_before_)
|
| + render_frame()->WhitelistContentOrigin(content_origin);
|
| + }
|
| +
|
| + heuristic_run_before_ = true;
|
| }
|
|
|
| in_size_recheck_ = false;
|
|
|