Index: chrome/browser/guest_view/guest_view_manager.cc |
diff --git a/chrome/browser/guest_view/guest_view_manager.cc b/chrome/browser/guest_view/guest_view_manager.cc |
index 1e07de105f5ddc1d603123133d849f51eaef1862..a1aaf5f26a05c729d1db56ac2bd9c6efb68b4b4e 100644 |
--- a/chrome/browser/guest_view/guest_view_manager.cc |
+++ b/chrome/browser/guest_view/guest_view_manager.cc |
@@ -75,6 +75,16 @@ GuestViewManager* GuestViewManager::FromBrowserContext( |
return guest_manager; |
} |
+content::WebContents* GuestViewManager::GetGuestByInstanceIDSafely( |
+ int guest_instance_id, |
+ int embedder_render_process_id) { |
+ if (!CanEmbedderAccessInstanceIDMaybeKill(embedder_render_process_id, |
+ guest_instance_id)) { |
+ return NULL; |
+ } |
+ return GetGuestByInstanceID(guest_instance_id, embedder_render_process_id); |
+} |
+ |
int GuestViewManager::GetNextInstanceID() { |
return ++current_instance_id_; |
} |
@@ -97,13 +107,53 @@ void GuestViewManager::RemoveGuest(int guest_instance_id) { |
guest_web_contents_by_instance_id_.erase(it); |
} |
-content::WebContents* GuestViewManager::GetGuestByInstanceID( |
+void GuestViewManager::MaybeGetGuestByInstanceIDOrKill( |
int guest_instance_id, |
- int embedder_render_process_id) { |
+ int embedder_render_process_id, |
+ const GuestByInstanceIDCallback& callback) { |
if (!CanEmbedderAccessInstanceIDMaybeKill(embedder_render_process_id, |
guest_instance_id)) { |
- return NULL; |
+ // If we kill the embedder, then don't bother calling back. |
+ return; |
} |
+ content::WebContents* guest_web_contents = |
+ GetGuestByInstanceID(guest_instance_id, embedder_render_process_id); |
+ callback.Run(guest_web_contents); |
+} |
+ |
+SiteInstance* GuestViewManager::GetGuestSiteInstance( |
+ const GURL& guest_site) { |
+ for (GuestInstanceMap::const_iterator it = |
+ guest_web_contents_by_instance_id_.begin(); |
+ it != guest_web_contents_by_instance_id_.end(); ++it) { |
+ if (it->second->GetSiteInstance()->GetSiteURL() == guest_site) |
+ return it->second->GetSiteInstance(); |
+ } |
+ return NULL; |
+} |
+ |
+bool GuestViewManager::ForEachGuest(WebContents* embedder_web_contents, |
+ const GuestCallback& callback) { |
+ for (GuestInstanceMap::iterator it = |
+ guest_web_contents_by_instance_id_.begin(); |
+ it != guest_web_contents_by_instance_id_.end(); ++it) { |
+ WebContents* guest = it->second; |
+ if (embedder_web_contents != guest->GetEmbedderWebContents()) |
+ continue; |
+ |
+ if (callback.Run(guest)) |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+void GuestViewManager::AddRenderProcessHostID(int render_process_host_id) { |
+ render_process_host_id_multiset_.insert(render_process_host_id); |
+} |
+ |
+content::WebContents* GuestViewManager::GetGuestByInstanceID( |
+ int guest_instance_id, |
+ int embedder_render_process_id) { |
GuestInstanceMap::const_iterator it = |
guest_web_contents_by_instance_id_.find(guest_instance_id); |
if (it == guest_web_contents_by_instance_id_.end()) |
@@ -155,36 +205,6 @@ bool GuestViewManager::CanEmbedderAccessInstanceID( |
return CanEmbedderAccessGuest(embedder_render_process_id, guest_view); |
} |
-SiteInstance* GuestViewManager::GetGuestSiteInstance( |
- const GURL& guest_site) { |
- for (GuestInstanceMap::const_iterator it = |
- guest_web_contents_by_instance_id_.begin(); |
- it != guest_web_contents_by_instance_id_.end(); ++it) { |
- if (it->second->GetSiteInstance()->GetSiteURL() == guest_site) |
- return it->second->GetSiteInstance(); |
- } |
- return NULL; |
-} |
- |
-bool GuestViewManager::ForEachGuest(WebContents* embedder_web_contents, |
- const GuestCallback& callback) { |
- for (GuestInstanceMap::iterator it = |
- guest_web_contents_by_instance_id_.begin(); |
- it != guest_web_contents_by_instance_id_.end(); ++it) { |
- WebContents* guest = it->second; |
- if (embedder_web_contents != guest->GetEmbedderWebContents()) |
- continue; |
- |
- if (callback.Run(guest)) |
- return true; |
- } |
- return false; |
-} |
- |
-void GuestViewManager::AddRenderProcessHostID(int render_process_host_id) { |
- render_process_host_id_multiset_.insert(render_process_host_id); |
-} |
- |
bool GuestViewManager::CanEmbedderAccessGuest(int embedder_render_process_id, |
GuestViewBase* guest) { |
// The embedder can access the guest if it has not been attached and its |