summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfsamuel <fsamuel@chromium.org>2015-04-17 13:30:20 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-17 20:32:25 +0000
commit9cbc00ad9db34aff9bee8388335f751d59da368b (patch)
tree89194752fc8dd895cb0e44af912675cea9d96960
parente208fa48c7ecf3f28f3e0379d0545c2405592f6e (diff)
downloadchromium_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}
-rw-r--r--chrome/browser/chromeos/login/helper.cc5
-rw-r--r--chrome/browser/printing/print_view_manager_common.cc11
-rw-r--r--chrome/browser/profiles/off_the_record_profile_impl.cc2
-rw-r--r--chrome/browser/profiles/profile_impl.cc2
-rw-r--r--chrome/browser/ui/webui/signin/inline_login_ui.cc8
-rw-r--r--chrome/test/base/testing_profile.cc2
-rw-r--r--content/browser/browser_plugin/browser_plugin_message_filter.cc13
-rw-r--r--content/browser/web_contents/web_contents_impl.cc6
-rw-r--r--extensions/browser/api/guest_view/guest_view_internal_api.cc2
-rw-r--r--extensions/browser/guest_view/guest_view_base.cc19
-rw-r--r--extensions/browser/guest_view/guest_view_message_filter.cc22
-rw-r--r--extensions/browser/guest_view/surface_worker/surface_worker_guest.cc2
-rw-r--r--extensions/browser/guest_view/web_view/web_view_guest.cc4
-rw-r--r--extensions/shell/browser/shell_browser_context.cc2
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() {