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

Side by Side Diff: components/plugins/renderer/loadable_plugin_placeholder.cc

Issue 2151483007: Plugin Power Saver: Fix a dangling WebViewPlugin. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/plugins/renderer/loadable_plugin_placeholder.h" 5 #include "components/plugins/renderer/loadable_plugin_placeholder.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 if (!new_plugin) 97 if (!new_plugin)
98 return; 98 return;
99 blink::WebPluginContainer* container = plugin()->container(); 99 blink::WebPluginContainer* container = plugin()->container();
100 // This can occur if the container has been destroyed. 100 // This can occur if the container has been destroyed.
101 if (!container) { 101 if (!container) {
102 new_plugin->destroy(); 102 new_plugin->destroy();
103 return; 103 return;
104 } 104 }
105 105
106 container->setPlugin(new_plugin); 106 container->setPlugin(new_plugin);
107 // Save the element in case the plugin is removed from the page during
108 // initialization.
109 blink::WebElement element = container->element();
110 bool plugin_needs_initialization = 107 bool plugin_needs_initialization =
111 !premade_throttler_ || new_plugin != premade_throttler_->GetWebPlugin(); 108 !premade_throttler_ || new_plugin != premade_throttler_->GetWebPlugin();
112 if (plugin_needs_initialization && !new_plugin->initialize(container)) { 109 if (plugin_needs_initialization && !new_plugin->initialize(container)) {
113 if (new_plugin->container()) { 110 if (new_plugin->container()) {
114 // Since the we couldn't initialize the new plugin, but the container 111 // Since the we couldn't initialize the new plugin, but the container
115 // still exists, restore the placeholder and destroy the new plugin. 112 // still exists, restore the placeholder and destroy the new plugin.
116 container->setPlugin(plugin()); 113 container->setPlugin(plugin());
117 new_plugin->destroy(); 114 new_plugin->destroy();
115 } else {
116 // The container has been destroyed, along with the new plugin. Destroy
117 // our placeholder plugin also.
118 plugin()->destroy();
118 } 119 }
119 return; 120 return;
120 } 121 }
121 122
122 // The plugin has been removed from the page. Destroy the old plugin. We
123 // will be destroyed as soon as V8 garbage collects us.
124 if (!element.pluginContainer()) {
125 plugin()->destroy();
126 return;
127 }
128
129 // During initialization, the new plugin might have replaced itself in turn 123 // During initialization, the new plugin might have replaced itself in turn
130 // with another plugin. Make sure not to use the passed in |new_plugin| after 124 // with another plugin. Make sure not to use the passed in |new_plugin| after
131 // this point. 125 // this point.
132 new_plugin = container->plugin(); 126 new_plugin = container->plugin();
133 127
134 plugin()->RestoreTitleText(); 128 plugin()->RestoreTitleText();
135 container->invalidate(); 129 container->invalidate();
136 container->reportGeometry(); 130 container->reportGeometry();
137 plugin()->ReplayReceivedData(new_plugin); 131 plugin()->ReplayReceivedData(new_plugin);
138 plugin()->destroy(); 132 plugin()->destroy();
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 return identifier_; 359 return identifier_;
366 } 360 }
367 361
368 bool LoadablePluginPlaceholder::LoadingBlocked() const { 362 bool LoadablePluginPlaceholder::LoadingBlocked() const {
369 DCHECK(allow_loading_); 363 DCHECK(allow_loading_);
370 return is_blocked_for_tinyness_ || is_blocked_for_background_tab_ || 364 return is_blocked_for_tinyness_ || is_blocked_for_background_tab_ ||
371 is_blocked_for_power_saver_poster_ || is_blocked_for_prerendering_; 365 is_blocked_for_power_saver_poster_ || is_blocked_for_prerendering_;
372 } 366 }
373 367
374 } // namespace plugins 368 } // namespace plugins
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698