Chromium Code Reviews| 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 3719130a70f189e57fe16ef983c59acd1ee6a9e7..6b2a0dd394a84931e8727123108c22f546e00927 100644 |
| --- a/components/plugins/renderer/loadable_plugin_placeholder.cc |
| +++ b/components/plugins/renderer/loadable_plugin_placeholder.cc |
| @@ -47,16 +47,14 @@ void LoadablePluginPlaceholder::BlockForPowerSaverPoster() { |
| weak_factory_.GetWeakPtr(), |
| PluginInstanceThrottler::UNTHROTTLE_METHOD_BY_WHITELIST)); |
| } |
| -#endif |
| void LoadablePluginPlaceholder::SetPremadePlugin( |
| content::PluginInstanceThrottler* throttler) { |
| DCHECK(throttler); |
| DCHECK(!premade_throttler_); |
| premade_throttler_ = throttler; |
| - |
| - premade_throttler_->AddObserver(this); |
| } |
| +#endif |
| LoadablePluginPlaceholder::LoadablePluginPlaceholder( |
| content::RenderFrame* render_frame, |
| @@ -73,34 +71,24 @@ LoadablePluginPlaceholder::LoadablePluginPlaceholder( |
| is_blocked_for_prerendering_(false), |
| is_blocked_for_power_saver_poster_(false), |
| power_saver_enabled_(false), |
| - plugin_marked_essential_(false), |
| premade_throttler_(nullptr), |
| allow_loading_(false), |
| - placeholder_was_replaced_(false), |
| hidden_(false), |
| finished_loading_(false), |
| weak_factory_(this) { |
| } |
| LoadablePluginPlaceholder::~LoadablePluginPlaceholder() { |
| -#if defined(ENABLE_PLUGINS) |
| - DCHECK(!premade_throttler_); |
| - |
| - if (!plugin_marked_essential_ && !placeholder_was_replaced_ && |
| - !is_blocked_for_prerendering_ && is_blocked_for_power_saver_poster_) { |
| - PluginInstanceThrottler::RecordUnthrottleMethodMetric( |
| - PluginInstanceThrottler::UNTHROTTLE_METHOD_NEVER); |
| - } |
| -#endif |
| } |
| #if defined(ENABLE_PLUGINS) |
| void LoadablePluginPlaceholder::MarkPluginEssential( |
| PluginInstanceThrottler::PowerSaverUnthrottleMethod method) { |
| - if (plugin_marked_essential_) |
| + if (!power_saver_enabled_) |
| return; |
| - plugin_marked_essential_ = true; |
| + power_saver_enabled_ = false; |
| + |
| if (premade_throttler_) |
| premade_throttler_->MarkPluginEssential(method); |
| else |
| @@ -148,8 +136,6 @@ void LoadablePluginPlaceholder::ReplacePlugin(WebPlugin* new_plugin) { |
| return; |
| } |
| - placeholder_was_replaced_ = true; |
| - |
| // During initialization, the new plugin might have replaced itself in turn |
| // with another plugin. Make sure not to use the passed in |new_plugin| after |
| // this point. |
| @@ -226,13 +212,23 @@ void LoadablePluginPlaceholder::UpdateMessage() { |
| } |
| void LoadablePluginPlaceholder::PluginDestroyed() { |
| - // Since the premade plugin has been detached from the container, it will not |
| - // be automatically destroyed along with the page. |
| - if (!placeholder_was_replaced_ && premade_throttler_) { |
| - premade_throttler_->RemoveObserver(this); |
| - premade_throttler_->GetWebPlugin()->destroy(); |
| - premade_throttler_ = nullptr; |
| +#if defined(ENABLE_PLUGINS) |
| + if (power_saver_enabled_) { |
|
Bernhard Bauer
2015/04/29 10:46:00
Early-return if |power_saver_enabled_| is false?
tommycli
2015/04/29 18:17:28
Err well we still want to call PluginPlaceholder::
Bernhard Bauer
2015/04/29 18:53:26
Oh, durr.
|
| + if (premade_throttler_) { |
| + // Since the premade plugin has been detached from the container, it will |
| + // not be automatically destroyed along with the page. |
| + premade_throttler_->GetWebPlugin()->destroy(); |
| + premade_throttler_ = nullptr; |
| + } else if (is_blocked_for_power_saver_poster_) { |
| + // Record the NEVER unthrottle count only if there is no throttler. |
| + PluginInstanceThrottler::RecordUnthrottleMethodMetric( |
| + PluginInstanceThrottler::UNTHROTTLE_METHOD_NEVER); |
| + } |
| + |
| + // Prevent processing subsequent calls to MarkPluginEssential. |
| + power_saver_enabled_ = false; |
| } |
| +#endif |
| PluginPlaceholder::PluginDestroyed(); |
| } |
| @@ -245,14 +241,6 @@ void LoadablePluginPlaceholder::WasShown() { |
| } |
| } |
| -void LoadablePluginPlaceholder::OnThrottleStateChange() { |
| - DCHECK(premade_throttler_); |
| - if (!premade_throttler_->IsThrottled()) { |
| - // Premade plugin has been unthrottled externally (by audio playback, etc.). |
| - LoadPlugin(); |
| - } |
| -} |
| - |
| void LoadablePluginPlaceholder::OnLoadBlockedPlugins( |
| const std::string& identifier) { |
| if (!identifier.empty() && identifier != identifier_) |
| @@ -286,9 +274,7 @@ void LoadablePluginPlaceholder::LoadPlugin() { |
| } |
| if (premade_throttler_) { |
| - premade_throttler_->RemoveObserver(this); |
| premade_throttler_->SetHiddenForPlaceholder(false /* hidden */); |
| - |
| ReplacePlugin(premade_throttler_->GetWebPlugin()); |
| premade_throttler_ = nullptr; |
| } else { |
| @@ -299,7 +285,7 @@ void LoadablePluginPlaceholder::LoadPlugin() { |
| #if defined(ENABLE_PLUGINS) |
| // If the plugin has already been marked essential in its placeholder form, |
| // we shouldn't create a new throttler and start the process all over again. |
| - if (!plugin_marked_essential_ && power_saver_enabled_) |
| + if (power_saver_enabled_) |
| throttler = PluginInstanceThrottler::Create(); |
| #endif |
| WebPlugin* plugin = render_frame()->CreatePlugin( |
| @@ -331,7 +317,7 @@ void LoadablePluginPlaceholder::DidFinishLoadingCallback() { |
| // Wait for the placeholder to finish loading to hide the premade plugin. |
| // This is necessary to prevent a flicker. |
| - if (premade_throttler_ && !placeholder_was_replaced_) |
| + if (premade_throttler_ && power_saver_enabled_) |
| premade_throttler_->SetHiddenForPlaceholder(true /* hidden */); |
| } |