diff options
author | fsamuel <fsamuel@chromium.org> | 2015-04-17 13:30:20 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-17 20:32:25 +0000 |
commit | 9cbc00ad9db34aff9bee8388335f751d59da368b (patch) | |
tree | 89194752fc8dd895cb0e44af912675cea9d96960 | |
parent | e208fa48c7ecf3f28f3e0379d0545c2405592f6e (diff) | |
download | chromium_src-9cbc00ad9db34aff9bee8388335f751d59da368b.zip chromium_src-9cbc00ad9db34aff9bee8388335f751d59da368b.tar.gz chromium_src-9cbc00ad9db34aff9bee8388335f751d59da368b.tar.bz2 |
Use GuestViewManager::FromBrowserContextIfAvailable more often
In a subsequent patch, I plan to introduce a GuestViewManagerDelegate to allow
for extension specific functionality.
This CL helps identify which call sites need to create the delegate.
BUG=444869
TBR=noms@chromium.org for chrome/browser/profiles, nkostylev@chromium.org chrome/browser/chromeos/login, thestig@chromium.org for chrome/browser/printing.
Review URL: https://codereview.chromium.org/1073903003
Cr-Commit-Position: refs/heads/master@{#325701}
14 files changed, 66 insertions, 34 deletions
diff --git a/chrome/browser/chromeos/login/helper.cc b/chrome/browser/chromeos/login/helper.cc index f949875..decb068 100644 --- a/chrome/browser/chromeos/login/helper.cc +++ b/chrome/browser/chromeos/login/helper.cc @@ -64,8 +64,11 @@ bool FindGuestByPartitionName(const std::string& partition_name, content::StoragePartition* GetPartition(content::WebContents* embedder, const std::string& partition_name) { extensions::GuestViewManager* manager = - extensions::GuestViewManager::FromBrowserContext( + extensions::GuestViewManager::FromBrowserContextIfAvailable( embedder->GetBrowserContext()); + if (!manager) + return nullptr; + content::WebContents* guest_contents = nullptr; manager->ForEachGuest(embedder, base::Bind(&FindGuestByPartitionName, partition_name, &guest_contents)); diff --git a/chrome/browser/printing/print_view_manager_common.cc b/chrome/browser/printing/print_view_manager_common.cc index 76ac0c1..37f8d09 100644 --- a/chrome/browser/printing/print_view_manager_common.cc +++ b/chrome/browser/printing/print_view_manager_common.cc @@ -36,9 +36,14 @@ bool StoreFullPagePlugin(content::WebContents** result, // guest's WebContents instead. content::WebContents* GetWebContentsToUse(content::WebContents* contents) { #if defined(ENABLE_EXTENSIONS) - extensions::GuestViewManager::FromBrowserContext( - contents->GetBrowserContext()) - ->ForEachGuest(contents, base::Bind(&StoreFullPagePlugin, &contents)); + extensions::GuestViewManager* guest_view_manager = + extensions::GuestViewManager::FromBrowserContextIfAvailable( + contents->GetBrowserContext()); + if (guest_view_manager) { + guest_view_manager->ForEachGuest( + contents, + base::Bind(&StoreFullPagePlugin, &contents)); + } #endif // defined(ENABLE_EXTENSIONS) return contents; } diff --git a/chrome/browser/profiles/off_the_record_profile_impl.cc b/chrome/browser/profiles/off_the_record_profile_impl.cc index a363530..1c79bf9 100644 --- a/chrome/browser/profiles/off_the_record_profile_impl.cc +++ b/chrome/browser/profiles/off_the_record_profile_impl.cc @@ -415,7 +415,7 @@ HostContentSettingsMap* OffTheRecordProfileImpl::GetHostContentSettingsMap() { content::BrowserPluginGuestManager* OffTheRecordProfileImpl::GetGuestManager() { #if defined(ENABLE_EXTENSIONS) - return extensions::GuestViewManager::FromBrowserContext(this); + return extensions::GuestViewManager::FromBrowserContextIfAvailable(this); #else return NULL; #endif diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc index 1ddc4fc..106a677 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc @@ -1053,7 +1053,7 @@ HostContentSettingsMap* ProfileImpl::GetHostContentSettingsMap() { content::BrowserPluginGuestManager* ProfileImpl::GetGuestManager() { #if defined(ENABLE_EXTENSIONS) - return extensions::GuestViewManager::FromBrowserContext(this); + return extensions::GuestViewManager::FromBrowserContextIfAvailable(this); #else return NULL; #endif diff --git a/chrome/browser/ui/webui/signin/inline_login_ui.cc b/chrome/browser/ui/webui/signin/inline_login_ui.cc index 6bd7c52..e807990 100644 --- a/chrome/browser/ui/webui/signin/inline_login_ui.cc +++ b/chrome/browser/ui/webui/signin/inline_login_ui.cc @@ -138,10 +138,12 @@ content::RenderFrameHost* InlineLoginUI::GetAuthFrame( #endif if (is_webview) { extensions::GuestViewManager* manager = - extensions::GuestViewManager::FromBrowserContext( + extensions::GuestViewManager::FromBrowserContextIfAvailable( web_contents->GetBrowserContext()); - manager->ForEachGuest(web_contents, - base::Bind(&AddToSetIfSigninWebview, &frame_set)); + if (manager) { + manager->ForEachGuest(web_contents, + base::Bind(&AddToSetIfSigninWebview, &frame_set)); + } } else { web_contents->ForEachFrame( base::Bind(&AddToSetIfIsAuthIframe, &frame_set, diff --git a/chrome/test/base/testing_profile.cc b/chrome/test/base/testing_profile.cc index 6e99b1c..1dfbfa2 100644 --- a/chrome/test/base/testing_profile.cc +++ b/chrome/test/base/testing_profile.cc @@ -959,7 +959,7 @@ HostContentSettingsMap* TestingProfile::GetHostContentSettingsMap() { content::BrowserPluginGuestManager* TestingProfile::GetGuestManager() { #if defined(ENABLE_EXTENSIONS) - return extensions::GuestViewManager::FromBrowserContext(this); + return extensions::GuestViewManager::FromBrowserContextIfAvailable(this); #else return NULL; #endif diff --git a/content/browser/browser_plugin/browser_plugin_message_filter.cc b/content/browser/browser_plugin/browser_plugin_message_filter.cc index 2e2802f..c04114d 100644 --- a/content/browser/browser_plugin/browser_plugin_message_filter.cc +++ b/content/browser/browser_plugin/browser_plugin_message_filter.cc @@ -64,10 +64,17 @@ void BrowserPluginMessageFilter::ForwardMessageToGuest( bool success = iter.ReadInt(&browser_plugin_instance_id); DCHECK(success); + // BrowserPlugin cannot create guests, it only serves as a container for + // guests. Thus, we should not be getting BrowserPlugin messages without + // an already created GuestManager. + BrowserPluginGuestManager* manager = + rph->GetBrowserContext()->GetGuestManager(); + if (!manager) + return; + WebContents* guest_web_contents = - rph->GetBrowserContext()->GetGuestManager() - ->GetGuestByInstanceID(render_process_id_, - browser_plugin_instance_id); + manager->GetGuestByInstanceID(render_process_id_, + browser_plugin_instance_id); if (!guest_web_contents) return; diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index b69e3bf..05f9806 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc @@ -1877,10 +1877,14 @@ RenderFrameHost* WebContentsImpl::GetGuestByInstanceID( int browser_plugin_instance_id) { BrowserPluginGuestManager* guest_manager = GetBrowserContext()->GetGuestManager(); + if (!guest_manager) + return nullptr; + WebContents* guest = guest_manager->GetGuestByInstanceID( render_frame_host->GetProcess()->GetID(), browser_plugin_instance_id); if (!guest) - return NULL; + return nullptr; + return guest->GetMainFrame(); } diff --git a/extensions/browser/api/guest_view/guest_view_internal_api.cc b/extensions/browser/api/guest_view/guest_view_internal_api.cc index a289da1..bfe4fb5 100644 --- a/extensions/browser/api/guest_view/guest_view_internal_api.cc +++ b/extensions/browser/api/guest_view/guest_view_internal_api.cc @@ -27,6 +27,8 @@ bool GuestViewInternalCreateGuestFunction::RunAsync() { base::DictionaryValue* create_params; EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &create_params)); + // Since we are creating a new guest, we will create a GuestViewManager + // if we don't already have one. GuestViewManager* guest_view_manager = GuestViewManager::FromBrowserContext(browser_context()); diff --git a/extensions/browser/guest_view/guest_view_base.cc b/extensions/browser/guest_view/guest_view_base.cc index 2a90eb2..9162712 100644 --- a/extensions/browser/guest_view/guest_view_base.cc +++ b/extensions/browser/guest_view/guest_view_base.cc @@ -157,7 +157,7 @@ GuestViewBase::GuestViewBase(content::WebContents* owner_web_contents) : owner_web_contents_(owner_web_contents), browser_context_(owner_web_contents->GetBrowserContext()), guest_instance_id_( - GuestViewManager::FromBrowserContext(browser_context_)-> + GuestViewManager::FromBrowserContextIfAvailable(browser_context_)-> GetNextInstanceID()), view_instance_id_(guestview::kInstanceIDNone), element_instance_id_(guestview::kInstanceIDNone), @@ -176,7 +176,7 @@ void GuestViewBase::Init(const base::DictionaryValue& create_params, return; initialized_ = true; - if (!GuestViewManager::FromBrowserContext(browser_context_)-> + if (!GuestViewManager::FromBrowserContextIfAvailable(browser_context_)-> IsGuestAvailableToContext(this, &owner_extension_id_)) { // The derived class did not create a WebContents so this class serves no // purpose. Let's self-destruct. @@ -219,7 +219,7 @@ void GuestViewBase::InitWithWebContents( guest_web_contents->SetDelegate(this); webcontents_guestview_map.Get().insert( std::make_pair(guest_web_contents, this)); - GuestViewManager::FromBrowserContext(browser_context_)-> + GuestViewManager::FromBrowserContextIfAvailable(browser_context_)-> AddGuest(guest_instance_id_, guest_web_contents); // Populate the view instance ID if we have it on creation. @@ -366,8 +366,9 @@ GuestViewBase* GuestViewBase::From(int owner_process_id, return nullptr; content::WebContents* guest_web_contents = - GuestViewManager::FromBrowserContext(host->GetBrowserContext())-> - GetGuestByInstanceIDSafely(guest_instance_id, owner_process_id); + GuestViewManager::FromBrowserContextIfAvailable( + host->GetBrowserContext())-> + GetGuestByInstanceIDSafely(guest_instance_id, owner_process_id); if (!guest_web_contents) return nullptr; @@ -397,7 +398,8 @@ bool GuestViewBase::ZoomPropagatesFromEmbedderToGuest() const { content::WebContents* GuestViewBase::CreateNewGuestWindow( const content::WebContents::CreateParams& create_params) { - auto guest_manager = GuestViewManager::FromBrowserContext(browser_context()); + auto guest_manager = + GuestViewManager::FromBrowserContextIfAvailable(browser_context()); return guest_manager->CreateGuestWithWebContentsParams( GetViewType(), owner_web_contents(), @@ -425,7 +427,8 @@ void GuestViewBase::DidAttach(int guest_proxy_routing_id) { } void GuestViewBase::DidDetach() { - GuestViewManager::FromBrowserContext(browser_context_)->DetachGuest(this); + GuestViewManager::FromBrowserContextIfAvailable(browser_context_)-> + DetachGuest(this); StopTrackingEmbedderZoomLevel(); owner_web_contents()->Send(new GuestViewMsg_GuestDetached( element_instance_id_)); @@ -475,7 +478,7 @@ void GuestViewBase::Destroy() { guest_host_ = nullptr; webcontents_guestview_map.Get().erase(web_contents()); - GuestViewManager::FromBrowserContext(browser_context_)-> + GuestViewManager::FromBrowserContextIfAvailable(browser_context_)-> RemoveGuest(guest_instance_id_); pending_events_.clear(); diff --git a/extensions/browser/guest_view/guest_view_message_filter.cc b/extensions/browser/guest_view/guest_view_message_filter.cc index ccf927fe..7f43a3e 100644 --- a/extensions/browser/guest_view/guest_view_message_filter.cc +++ b/extensions/browser/guest_view/guest_view_message_filter.cc @@ -77,7 +77,10 @@ void GuestViewMessageFilter::OnAttachGuest( int guest_instance_id, const base::DictionaryValue& params) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - auto manager = GuestViewManager::FromBrowserContext(browser_context_); + auto manager = + GuestViewManager::FromBrowserContextIfAvailable(browser_context_); + // We should have a GuestViewManager at this point. If we don't then the + // embedder is misbehaving. if (!manager) return; @@ -93,9 +96,10 @@ void GuestViewMessageFilter::OnCreateMimeHandlerViewGuest( int element_instance_id, const gfx::Size& element_size) { DCHECK_CURRENTLY_ON(BrowserThread::UI); + // Since we are creating a new guest, we will create a GuestViewManager + // if we don't already have one. auto manager = GuestViewManager::FromBrowserContext(browser_context_); - if (!manager) - return; + DCHECK(manager); auto rfh = RenderFrameHost::FromID(render_process_id_, render_frame_id); auto embedder_web_contents = WebContents::FromRenderFrameHost(rfh); @@ -123,7 +127,10 @@ void GuestViewMessageFilter::OnCreateMimeHandlerViewGuest( void GuestViewMessageFilter::OnResizeGuest(int render_frame_id, int element_instance_id, const gfx::Size& new_size) { - auto manager = GuestViewManager::FromBrowserContext(browser_context_); + auto manager = + GuestViewManager::FromBrowserContextIfAvailable(browser_context_); + // We should have a GuestViewManager at this point. If we don't then the + // embedder is misbehaving. if (!manager) return; @@ -156,10 +163,6 @@ void GuestViewMessageFilter::MimeHandlerViewGuestCreatedCallback( int embedder_render_frame_id, const gfx::Size& element_size, WebContents* web_contents) { - auto manager = GuestViewManager::FromBrowserContext(browser_context_); - if (!manager) - return; - auto guest_view = MimeHandlerViewGuest::FromWebContents(web_contents); if (!guest_view) return; @@ -173,6 +176,9 @@ void GuestViewMessageFilter::MimeHandlerViewGuestCreatedCallback( base::DictionaryValue attach_params; attach_params.SetInteger(guestview::kElementWidth, element_size.width()); attach_params.SetInteger(guestview::kElementHeight, element_size.height()); + auto manager = + GuestViewManager::FromBrowserContextIfAvailable(browser_context_); + CHECK(manager); manager->AttachGuest(embedder_render_process_id, element_instance_id, guest_instance_id, diff --git a/extensions/browser/guest_view/surface_worker/surface_worker_guest.cc b/extensions/browser/guest_view/surface_worker/surface_worker_guest.cc index cc555f9..2dffde3 100644 --- a/extensions/browser/guest_view/surface_worker/surface_worker_guest.cc +++ b/extensions/browser/guest_view/surface_worker/surface_worker_guest.cc @@ -66,7 +66,7 @@ void SurfaceWorkerGuest::CreateWebContents( GetOwnerSiteURL().host().c_str())); GuestViewManager* guest_view_manager = - GuestViewManager::FromBrowserContext( + GuestViewManager::FromBrowserContextIfAvailable( owner_web_contents()->GetBrowserContext()); content::SiteInstance* guest_site_instance = guest_view_manager->GetGuestSiteInstance(guest_site); diff --git a/extensions/browser/guest_view/web_view/web_view_guest.cc b/extensions/browser/guest_view/web_view/web_view_guest.cc index 923eaee..c0fbbb3 100644 --- a/extensions/browser/guest_view/web_view/web_view_guest.cc +++ b/extensions/browser/guest_view/web_view/web_view_guest.cc @@ -284,7 +284,7 @@ void WebViewGuest::CreateWebContents( // If we already have a webview tag in the same app using the same storage // partition, we should use the same SiteInstance so the existing tag and // the new tag can script each other. - auto guest_view_manager = GuestViewManager::FromBrowserContext( + auto guest_view_manager = GuestViewManager::FromBrowserContextIfAvailable( owner_render_process_host->GetBrowserContext()); content::SiteInstance* guest_site_instance = guest_view_manager->GetGuestSiteInstance(guest_site); @@ -562,7 +562,7 @@ void WebViewGuest::LoadAbort(bool is_top_level, void WebViewGuest::CreateNewGuestWebViewWindow( const content::OpenURLParams& params) { GuestViewManager* guest_manager = - GuestViewManager::FromBrowserContext(browser_context()); + GuestViewManager::FromBrowserContextIfAvailable(browser_context()); // 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 guest://site/{persist}?{partition_name}. diff --git a/extensions/shell/browser/shell_browser_context.cc b/extensions/shell/browser/shell_browser_context.cc index 03ac537..0c937d1 100644 --- a/extensions/shell/browser/shell_browser_context.cc +++ b/extensions/shell/browser/shell_browser_context.cc @@ -35,7 +35,7 @@ ShellBrowserContext::~ShellBrowserContext() { } content::BrowserPluginGuestManager* ShellBrowserContext::GetGuestManager() { - return GuestViewManager::FromBrowserContext(this); + return GuestViewManager::FromBrowserContextIfAvailable(this); } storage::SpecialStoragePolicy* ShellBrowserContext::GetSpecialStoragePolicy() { |