 Chromium Code Reviews
 Chromium Code Reviews Issue 258373002:
  Towards moving guest management to chrome: Introduce GuestViewManager  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master
    
  
    Issue 258373002:
  Towards moving guest management to chrome: Introduce GuestViewManager  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master| Index: content/browser/browser_plugin/browser_plugin_guest.cc | 
| diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc | 
| index 7e7f97ea95442f030875f3d341648fc6da8816b6..c82366b1a34036afe9f701d78639cce0bd1ca3e6 100644 | 
| --- a/content/browser/browser_plugin/browser_plugin_guest.cc | 
| +++ b/content/browser/browser_plugin/browser_plugin_guest.cc | 
| @@ -99,8 +99,9 @@ class BrowserPluginGuest::NewWindowRequest : public PermissionRequest { | 
| int embedder_render_process_id = | 
| guest_->embedder_web_contents()->GetRenderProcessHost()->GetID(); | 
| BrowserPluginGuest* guest = | 
| - guest_->GetWebContents()->GetBrowserPluginGuestManager()-> | 
| - GetGuestByInstanceID(instance_id_, embedder_render_process_id); | 
| + BrowserPluginGuestManager::FromBrowserContext( | 
| + guest_->GetWebContents()->GetBrowserContext())-> | 
| + GetGuestByInstanceID(instance_id_, embedder_render_process_id); | 
| if (!guest) { | 
| VLOG(0) << "Guest not found. Instance ID: " << instance_id_; | 
| return; | 
| @@ -189,8 +190,7 @@ class BrowserPluginGuest::EmbedderWebContentsObserver | 
| BrowserPluginGuest::BrowserPluginGuest( | 
| int instance_id, | 
| bool has_render_view, | 
| - WebContentsImpl* web_contents, | 
| - BrowserPluginGuest* opener) | 
| + WebContentsImpl* web_contents) | 
| : WebContentsObserver(web_contents), | 
| embedder_web_contents_(NULL), | 
| instance_id_(instance_id), | 
| @@ -213,10 +213,9 @@ BrowserPluginGuest::BrowserPluginGuest( | 
| weak_ptr_factory_(this) { | 
| DCHECK(web_contents); | 
| web_contents->SetDelegate(this); | 
| - if (opener) | 
| - opener_ = opener->AsWeakPtr(); | 
| - GetWebContents()->GetBrowserPluginGuestManager()->AddGuest(instance_id_, | 
| - GetWebContents()); | 
| + BrowserPluginGuestManager::FromBrowserContext( | 
| + GetWebContents()->GetBrowserContext())->AddGuest(instance_id_, | 
| + GetWebContents()); | 
| } | 
| bool BrowserPluginGuest::AddMessageToConsole(WebContents* source, | 
| @@ -303,10 +302,11 @@ void BrowserPluginGuest::RequestPermission( | 
| BrowserPluginGuest* BrowserPluginGuest::CreateNewGuestWindow( | 
| const OpenURLParams& params) { | 
| BrowserPluginGuestManager* guest_manager = | 
| - GetWebContents()->GetBrowserPluginGuestManager(); | 
| + BrowserPluginGuestManager::FromBrowserContext( | 
| + GetWebContents()->GetBrowserContext()); | 
| // Allocate a new instance ID for the new guest. | 
| - int instance_id = guest_manager->get_next_instance_id(); | 
| + int instance_id = guest_manager->GetNextInstanceID(); | 
| // Set the attach params to use the same partition as the opener. | 
| // We pull the partition information from the site's URL, which is of the form | 
| @@ -322,10 +322,12 @@ BrowserPluginGuest* BrowserPluginGuest::CreateNewGuestWindow( | 
| scoped_ptr<base::DictionaryValue> extra_params( | 
| extra_attach_params_->DeepCopy()); | 
| BrowserPluginGuest* new_guest = | 
| - GetWebContents()->GetBrowserPluginGuestManager()->CreateGuest( | 
| - GetWebContents()->GetSiteInstance(), instance_id, | 
| - attach_params, extra_params.Pass()); | 
| - new_guest->opener_ = AsWeakPtr(); | 
| + guest_manager->CreateGuest(GetWebContents()->GetSiteInstance(), | 
| + instance_id, | 
| + attach_params, | 
| + extra_params.Pass()); | 
| + if (new_guest->delegate_) | 
| + new_guest->delegate_->SetOpener(GetWebContents()); | 
| // Take ownership of |new_guest|. | 
| pending_new_windows_.insert( | 
| @@ -351,10 +353,11 @@ void BrowserPluginGuest::EmbedderDestroyed() { | 
| void BrowserPluginGuest::Destroy() { | 
| is_in_destruction_ = true; | 
| - if (!attached() && opener()) | 
| - opener()->pending_new_windows_.erase(this); | 
| + if (!attached() && GetOpener()) | 
| + GetOpener()->pending_new_windows_.erase(this); | 
| DestroyUnattachedWindows(); | 
| - GetWebContents()->GetBrowserPluginGuestManager()->RemoveGuest(instance_id_); | 
| + BrowserPluginGuestManager::FromBrowserContext( | 
| 
lazyboy
2014/05/01 20:06:59
Same for this file, add BrowserPluginGuest::GetBro
 
Fady Samuel
2014/05/01 21:05:28
Done.
 | 
| + GetWebContents()->GetBrowserContext())->RemoveGuest(instance_id_); | 
| delete GetWebContents(); | 
| } | 
| @@ -509,7 +512,7 @@ BrowserPluginGuest* BrowserPluginGuest::Create( | 
| if (factory_) { | 
| guest = factory_->CreateBrowserPluginGuest(instance_id, web_contents); | 
| } else { | 
| - guest = new BrowserPluginGuest(instance_id, false, web_contents, NULL); | 
| + guest = new BrowserPluginGuest(instance_id, false, web_contents); | 
| } | 
| guest->extra_attach_params_.reset(extra_params->DeepCopy()); | 
| web_contents->SetBrowserPluginGuest(guest); | 
| @@ -528,7 +531,7 @@ BrowserPluginGuest* BrowserPluginGuest::CreateWithOpener( | 
| BrowserPluginGuest* opener) { | 
| BrowserPluginGuest* guest = | 
| new BrowserPluginGuest( | 
| - instance_id, has_render_view, web_contents, opener); | 
| + instance_id, has_render_view, web_contents); | 
| web_contents->SetBrowserPluginGuest(guest); | 
| BrowserPluginGuestDelegate* delegate = NULL; | 
| GetContentClient()->browser()->GuestWebContentsCreated( | 
| @@ -545,6 +548,17 @@ RenderWidgetHostView* BrowserPluginGuest::GetEmbedderRenderWidgetHostView() { | 
| return embedder_web_contents_->GetRenderWidgetHostView(); | 
| } | 
| +BrowserPluginGuest* BrowserPluginGuest::GetOpener() { | 
| + if (!delegate_) | 
| + return NULL; | 
| + | 
| + WebContents* opener = delegate_->GetOpener(); | 
| + if (!opener) | 
| + return NULL; | 
| + | 
| + return static_cast<WebContentsImpl*>(opener)->GetBrowserPluginGuest(); | 
| +} | 
| + | 
| void BrowserPluginGuest::UpdateVisibility() { | 
| OnSetVisibility(instance_id_, visible()); | 
| } | 
| @@ -697,8 +711,9 @@ WebContents* BrowserPluginGuest::OpenURLFromTab(WebContents* source, | 
| // Navigation also resumes resource loading which we don't want to allow | 
| // until attachment. | 
| if (!attached()) { | 
| - PendingWindowMap::iterator it = opener()->pending_new_windows_.find(this); | 
| - if (it == opener()->pending_new_windows_.end()) | 
| + PendingWindowMap::iterator it = | 
| + GetOpener()->pending_new_windows_.find(this); | 
| + if (it == GetOpener()->pending_new_windows_.end()) | 
| return NULL; | 
| const NewWindowInfo& old_target_url = it->second; | 
| NewWindowInfo new_window_info(params.url, old_target_url.name); | 
| @@ -723,7 +738,8 @@ void BrowserPluginGuest::WebContentsCreated(WebContents* source_contents, | 
| WebContentsImpl* new_contents_impl = | 
| static_cast<WebContentsImpl*>(new_contents); | 
| BrowserPluginGuest* guest = new_contents_impl->GetBrowserPluginGuest(); | 
| - guest->opener_ = AsWeakPtr(); | 
| + if (guest->delegate_) | 
| + guest->delegate_->SetOpener(GetWebContents()); | 
| std::string guest_name = base::UTF16ToUTF8(frame_name); | 
| guest->name_ = guest_name; | 
| // Take ownership of the new guest until it is attached to the embedder's DOM | 
| @@ -1020,8 +1036,8 @@ void BrowserPluginGuest::Attach( | 
| // the time the WebContents was created and the time it was attached. | 
| // We also need to do an initial navigation if a RenderView was never | 
| // created for the new window in cases where there is no referrer. | 
| - PendingWindowMap::iterator it = opener()->pending_new_windows_.find(this); | 
| - if (it != opener()->pending_new_windows_.end()) { | 
| + PendingWindowMap::iterator it = GetOpener()->pending_new_windows_.find(this); | 
| + if (it != GetOpener()->pending_new_windows_.end()) { | 
| const NewWindowInfo& new_window_info = it->second; | 
| if (new_window_info.changed || !has_render_view_) | 
| params.src = it->second.url.spec(); | 
| @@ -1031,7 +1047,7 @@ void BrowserPluginGuest::Attach( | 
| // Once a new guest is attached to the DOM of the embedder page, then the | 
| // lifetime of the new guest is no longer managed by the opener guest. | 
| - opener()->pending_new_windows_.erase(this); | 
| + GetOpener()->pending_new_windows_.erase(this); | 
| // The guest's frame name takes precedence over the BrowserPlugin's name. | 
| // The guest's frame name is assigned in |