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

Side by Side Diff: content/browser/browser_plugin/browser_plugin_embedder.cc

Issue 11066032: Browser Plugin: Update Guest WebContents Visibility on BrowserPlugin Visiblity Change. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed nits Created 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/browser_plugin/browser_plugin_embedder.h" 5 #include "content/browser/browser_plugin/browser_plugin_embedder.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 16 matching lines...) Expand all
27 27
28 namespace content { 28 namespace content {
29 29
30 // static 30 // static
31 BrowserPluginHostFactory* BrowserPluginEmbedder::factory_ = NULL; 31 BrowserPluginHostFactory* BrowserPluginEmbedder::factory_ = NULL;
32 32
33 BrowserPluginEmbedder::BrowserPluginEmbedder( 33 BrowserPluginEmbedder::BrowserPluginEmbedder(
34 WebContentsImpl* web_contents, 34 WebContentsImpl* web_contents,
35 RenderViewHost* render_view_host) 35 RenderViewHost* render_view_host)
36 : WebContentsObserver(web_contents), 36 : WebContentsObserver(web_contents),
37 render_view_host_(render_view_host) { 37 render_view_host_(render_view_host),
38 visible_(true) {
38 // Listen to visibility changes so that an embedder hides its guests 39 // Listen to visibility changes so that an embedder hides its guests
39 // as well. 40 // as well.
40 registrar_.Add(this, 41 registrar_.Add(this,
41 NOTIFICATION_WEB_CONTENTS_VISIBILITY_CHANGED, 42 NOTIFICATION_WEB_CONTENTS_VISIBILITY_CHANGED,
42 Source<WebContents>(web_contents)); 43 Source<WebContents>(web_contents));
43 44
44 // |render_view_host| manages the ownership of this BrowserPluginGuestHelper. 45 // |render_view_host| manages the ownership of this BrowserPluginGuestHelper.
45 new BrowserPluginEmbedderHelper(this, render_view_host); 46 new BrowserPluginEmbedderHelper(this, render_view_host);
46 } 47 }
47 48
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 void BrowserPluginEmbedder::RenderViewDeleted( 243 void BrowserPluginEmbedder::RenderViewDeleted(
243 RenderViewHost* render_view_host) { 244 RenderViewHost* render_view_host) {
244 DestroyGuests(); 245 DestroyGuests();
245 } 246 }
246 247
247 void BrowserPluginEmbedder::RenderViewGone(base::TerminationStatus status) { 248 void BrowserPluginEmbedder::RenderViewGone(base::TerminationStatus status) {
248 DestroyGuests(); 249 DestroyGuests();
249 } 250 }
250 251
251 void BrowserPluginEmbedder::WebContentsVisibilityChanged(bool visible) { 252 void BrowserPluginEmbedder::WebContentsVisibilityChanged(bool visible) {
253 visible_ = visible;
252 // If the embedder is hidden we need to hide the guests as well. 254 // If the embedder is hidden we need to hide the guests as well.
253 for (ContainerInstanceMap::const_iterator it = 255 for (ContainerInstanceMap::const_iterator it =
254 guest_web_contents_by_instance_id_.begin(); 256 guest_web_contents_by_instance_id_.begin();
255 it != guest_web_contents_by_instance_id_.end(); ++it) { 257 it != guest_web_contents_by_instance_id_.end(); ++it) {
256 WebContents* web_contents = it->second; 258 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(it->second);
257 if (visible) 259 BrowserPluginGuest* guest = web_contents->GetBrowserPluginGuest();
258 web_contents->WasShown(); 260 guest->SetVisibility(visible, guest->visible());
259 else
260 web_contents->WasHidden();
261 } 261 }
262 } 262 }
263 263
264 void BrowserPluginEmbedder::PluginDestroyed(int instance_id) { 264 void BrowserPluginEmbedder::PluginDestroyed(int instance_id) {
265 DestroyGuestByInstanceID(instance_id); 265 DestroyGuestByInstanceID(instance_id);
266 } 266 }
267 267
268 void BrowserPluginEmbedder::SetGuestVisibility(int instance_id,
269 bool guest_visible) {
270 BrowserPluginGuest* guest = GetGuestByInstanceID(instance_id);
271 if (guest)
272 guest->SetVisibility(visible_, guest_visible);
273 }
274
268 void BrowserPluginEmbedder::Go(int instance_id, int relative_index) { 275 void BrowserPluginEmbedder::Go(int instance_id, int relative_index) {
269 BrowserPluginGuest* guest = GetGuestByInstanceID(instance_id); 276 BrowserPluginGuest* guest = GetGuestByInstanceID(instance_id);
270 if (guest) 277 if (guest)
271 guest->Go(relative_index); 278 guest->Go(relative_index);
272 } 279 }
273 280
274 void BrowserPluginEmbedder::Stop(int instance_id) { 281 void BrowserPluginEmbedder::Stop(int instance_id) {
275 BrowserPluginGuest* guest = GetGuestByInstanceID(instance_id); 282 BrowserPluginGuest* guest = GetGuestByInstanceID(instance_id);
276 if (guest) 283 if (guest)
277 guest->Stop(); 284 guest->Stop();
(...skipping 19 matching lines...) Expand all
297 bool visible = *Details<bool>(details).ptr(); 304 bool visible = *Details<bool>(details).ptr();
298 WebContentsVisibilityChanged(visible); 305 WebContentsVisibilityChanged(visible);
299 break; 306 break;
300 } 307 }
301 default: 308 default:
302 NOTREACHED() << "Unexpected notification type: " << type; 309 NOTREACHED() << "Unexpected notification type: " << type;
303 } 310 }
304 } 311 }
305 312
306 } // namespace content 313 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698