Index: chrome/renderer/blocked_plugin.cc |
=================================================================== |
--- chrome/renderer/blocked_plugin.cc (revision 72559) |
+++ chrome/renderer/blocked_plugin.cc (working copy) |
@@ -60,7 +60,8 @@ |
: RenderViewObserver(render_view), |
frame_(frame), |
plugin_params_(params), |
- is_blocked_for_prerendering_(is_blocked_for_prerendering) { |
+ is_blocked_for_prerendering_(is_blocked_for_prerendering), |
+ hidden_(false) { |
const base::StringPiece template_html( |
ResourceBundle::GetSharedInstance().GetRawDataResource(template_id)); |
@@ -156,6 +157,10 @@ |
void BlockedPlugin::LoadPlugin() { |
CHECK(plugin_); |
+ // This is not strictly necessary but is an important defense in case the |
+ // event propagation changes between "close" vs. "click-to-play". |
+ if (hidden_) |
+ return; |
WebPluginContainer* container = plugin_->container(); |
WebPlugin* new_plugin = |
render_view()->CreatePluginNoCheck(frame_, plugin_params_); |
@@ -178,6 +183,7 @@ |
void BlockedPlugin::HidePlugin() { |
CHECK(plugin_); |
+ hidden_ = true; |
WebPluginContainer* container = plugin_->container(); |
WebElement element = container->element(); |
element.setAttribute("style", "display: none;"); |