| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |