summaryrefslogtreecommitdiffstats
path: root/extensions
diff options
context:
space:
mode:
authorfsamuel <fsamuel@chromium.org>2014-12-23 17:39:41 -0800
committerCommit bot <commit-bot@chromium.org>2014-12-24 01:40:33 +0000
commit840c1af1a7a55dde57b6f22423487dd369bfe19d (patch)
tree9efd807b45139a68fd181774061b915dae61a21a /extensions
parent7bb1c5c7cb8e145d5222d19f38df405aa6b73ed8 (diff)
downloadchromium_src-840c1af1a7a55dde57b6f22423487dd369bfe19d.zip
chromium_src-840c1af1a7a55dde57b6f22423487dd369bfe19d.tar.gz
chromium_src-840c1af1a7a55dde57b6f22423487dd369bfe19d.tar.bz2
AppView: Fix owner_extension_id
Set the owner_extension_id in GuestViewBase::Init so that it's available in request.embedderExtensionId in onEmbedRequested in the app to be embedded. This also simplifies code in GuestViewBase a bit. BUG=444749 TBR=rockot@chromium.org for guest_view_internal_api.cc Review URL: https://codereview.chromium.org/823543003 Cr-Commit-Position: refs/heads/master@{#309600}
Diffstat (limited to 'extensions')
-rw-r--r--extensions/browser/api/guest_view/guest_view_internal_api.cc6
-rw-r--r--extensions/browser/extension_message_filter.cc1
-rw-r--r--extensions/browser/guest_view/guest_view_base.cc27
-rw-r--r--extensions/browser/guest_view/guest_view_base.h9
-rw-r--r--extensions/browser/guest_view/guest_view_manager.cc6
-rw-r--r--extensions/browser/guest_view/guest_view_manager.h2
-rw-r--r--extensions/browser/guest_view/web_view/web_view_guest.cc2
7 files changed, 17 insertions, 36 deletions
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 dbbfb72..fa4201e 100644
--- a/extensions/browser/api/guest_view/guest_view_internal_api.cc
+++ b/extensions/browser/api/guest_view/guest_view_internal_api.cc
@@ -39,14 +39,8 @@ bool GuestViewInternalCreateGuestFunction::RunAsync() {
error_ = "Guest views can only be embedded in web content";
return false;
}
- // If the guest is an <extensionoptions> to be embedded in a WebUI, then
- // there is no extension, and extension() will be null. Use an empty string
- // instead.
- std::string embedder_extension_id =
- extension() ? extension_id() : std::string();
guest_view_manager->CreateGuest(view_type,
- embedder_extension_id,
owner_web_contents,
*create_params,
callback);
diff --git a/extensions/browser/extension_message_filter.cc b/extensions/browser/extension_message_filter.cc
index d4483c9..224a3f8 100644
--- a/extensions/browser/extension_message_filter.cc
+++ b/extensions/browser/extension_message_filter.cc
@@ -206,7 +206,6 @@ void ExtensionMessageFilter::OnExtensionCreateMimeHandlerViewGuest(
create_params.SetString(mime_handler_view::kSrc, src);
create_params.SetString(mime_handler_view::kContentUrl, content_url);
manager->CreateGuest(MimeHandlerViewGuest::Type,
- "",
embedder_web_contents,
create_params,
callback);
diff --git a/extensions/browser/guest_view/guest_view_base.cc b/extensions/browser/guest_view/guest_view_base.cc
index de7e1d8..75dc69e 100644
--- a/extensions/browser/guest_view/guest_view_base.cc
+++ b/extensions/browser/guest_view/guest_view_base.cc
@@ -23,6 +23,7 @@
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
#include "extensions/browser/guest_view/surface_worker/surface_worker_guest.h"
#include "extensions/browser/guest_view/web_view/web_view_guest.h"
+#include "extensions/browser/process_manager.h"
#include "extensions/browser/process_map.h"
#include "extensions/common/extension_messages.h"
#include "extensions/common/features/feature.h"
@@ -150,8 +151,7 @@ GuestViewBase::GuestViewBase(content::BrowserContext* browser_context,
weak_ptr_factory_(this) {
}
-void GuestViewBase::Init(const std::string& owner_extension_id,
- const base::DictionaryValue& create_params,
+void GuestViewBase::Init(const base::DictionaryValue& create_params,
const WebContentsCreatedCallback& callback) {
if (initialized_)
return;
@@ -163,15 +163,17 @@ void GuestViewBase::Init(const std::string& owner_extension_id,
ProcessMap* process_map = ProcessMap::Get(browser_context());
CHECK(process_map);
- const Extension* embedder_extension = ExtensionRegistry::Get(browser_context_)
- ->enabled_extensions()
- .GetByID(owner_extension_id);
+ const Extension* owner_extension =
+ ProcessManager::Get(owner_web_contents()->GetBrowserContext())->
+ GetExtensionForRenderViewHost(
+ owner_web_contents()->GetRenderViewHost());
+ owner_extension_id_ = owner_extension ? owner_extension->id() : std::string();
- // Ok for |embedder_extension| to be NULL, the embedder might be WebUI.
+ // Ok for |owner_extension| to be NULL, the embedder might be WebUI.
Feature::Availability availability = feature->IsAvailableToContext(
- embedder_extension,
+ owner_extension,
process_map->GetMostLikelyContextType(
- embedder_extension,
+ owner_extension,
owner_web_contents()->GetRenderProcessHost()->GetID()),
GetOwnerSiteURL());
if (!availability.is_available()) {
@@ -185,17 +187,13 @@ void GuestViewBase::Init(const std::string& owner_extension_id,
CreateWebContents(create_params,
base::Bind(&GuestViewBase::CompleteInit,
weak_ptr_factory_.GetWeakPtr(),
- owner_extension_id,
callback));
}
void GuestViewBase::InitWithWebContents(
- const std::string& owner_extension_id,
content::WebContents* guest_web_contents) {
DCHECK(guest_web_contents);
- owner_extension_id_ = owner_extension_id;
-
// At this point, we have just created the guest WebContents, we need to add
// an observer to the embedder WebContents. This observer will be responsible
// for destroying the guest WebContents if the embedder goes away.
@@ -542,8 +540,7 @@ void GuestViewBase::SendQueuedEvents() {
}
}
-void GuestViewBase::CompleteInit(const std::string& owner_extension_id,
- const WebContentsCreatedCallback& callback,
+void GuestViewBase::CompleteInit(const WebContentsCreatedCallback& callback,
content::WebContents* guest_web_contents) {
if (!guest_web_contents) {
// The derived class did not create a WebContents so this class serves no
@@ -552,7 +549,7 @@ void GuestViewBase::CompleteInit(const std::string& owner_extension_id,
callback.Run(NULL);
return;
}
- InitWithWebContents(owner_extension_id, guest_web_contents);
+ InitWithWebContents(guest_web_contents);
callback.Run(guest_web_contents);
}
diff --git a/extensions/browser/guest_view/guest_view_base.h b/extensions/browser/guest_view/guest_view_base.h
index 867b10c..483d763 100644
--- a/extensions/browser/guest_view/guest_view_base.h
+++ b/extensions/browser/guest_view/guest_view_base.h
@@ -170,12 +170,10 @@ class GuestViewBase : public content::BrowserPluginGuestDelegate,
// This creates a WebContents and initializes |this| GuestViewBase to use the
// newly created WebContents.
- void Init(const std::string& owner_extension_id,
- const base::DictionaryValue& create_params,
+ void Init(const base::DictionaryValue& create_params,
const WebContentsCreatedCallback& callback);
- void InitWithWebContents(const std::string& owner_extension_id,
- content::WebContents* guest_web_contents);
+ void InitWithWebContents(content::WebContents* guest_web_contents);
bool IsViewType(const char* const view_type) const {
return !strcmp(GetViewType(), view_type);
@@ -276,8 +274,7 @@ class GuestViewBase : public content::BrowserPluginGuestDelegate,
void SendQueuedEvents();
- void CompleteInit(const std::string& owner_extension_id,
- const WebContentsCreatedCallback& callback,
+ void CompleteInit(const WebContentsCreatedCallback& callback,
content::WebContents* guest_web_contents);
void StartTrackingEmbedderZoomLevel();
diff --git a/extensions/browser/guest_view/guest_view_manager.cc b/extensions/browser/guest_view/guest_view_manager.cc
index c123db6..0faef0a 100644
--- a/extensions/browser/guest_view/guest_view_manager.cc
+++ b/extensions/browser/guest_view/guest_view_manager.cc
@@ -140,7 +140,6 @@ int GuestViewManager::GetNextInstanceID() {
}
void GuestViewManager::CreateGuest(const std::string& view_type,
- const std::string& owner_extension_id,
content::WebContents* owner_web_contents,
const base::DictionaryValue& create_params,
const WebContentsCreatedCallback& callback) {
@@ -154,12 +153,11 @@ void GuestViewManager::CreateGuest(const std::string& view_type,
callback.Run(NULL);
return;
}
- guest->Init(owner_extension_id, create_params, callback);
+ guest->Init(create_params, callback);
}
content::WebContents* GuestViewManager::CreateGuestWithWebContentsParams(
const std::string& view_type,
- const std::string& owner_extension_id,
content::WebContents* owner_web_contents,
const content::WebContents::CreateParams& create_params) {
int guest_instance_id = GetNextInstanceID();
@@ -174,7 +172,7 @@ content::WebContents* GuestViewManager::CreateGuestWithWebContentsParams(
guest_create_params.guest_delegate = guest;
content::WebContents* guest_web_contents =
WebContents::Create(guest_create_params);
- guest->InitWithWebContents(owner_extension_id, guest_web_contents);
+ guest->InitWithWebContents(guest_web_contents);
return guest_web_contents;
}
diff --git a/extensions/browser/guest_view/guest_view_manager.h b/extensions/browser/guest_view/guest_view_manager.h
index 36c9ea6..038e5e8 100644
--- a/extensions/browser/guest_view/guest_view_manager.h
+++ b/extensions/browser/guest_view/guest_view_manager.h
@@ -68,14 +68,12 @@ class GuestViewManager : public content::BrowserPluginGuestManager,
typedef base::Callback<void(content::WebContents*)>
WebContentsCreatedCallback;
void CreateGuest(const std::string& view_type,
- const std::string& owner_extension_id,
content::WebContents* owner_web_contents,
const base::DictionaryValue& create_params,
const WebContentsCreatedCallback& callback);
content::WebContents* CreateGuestWithWebContentsParams(
const std::string& view_type,
- const std::string& owner_extension_id,
content::WebContents* owner_web_contents,
const content::WebContents::CreateParams& create_params);
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 25d5254..dd3f406 100644
--- a/extensions/browser/guest_view/web_view/web_view_guest.cc
+++ b/extensions/browser/guest_view/web_view/web_view_guest.cc
@@ -544,7 +544,6 @@ void WebViewGuest::CreateNewGuestWebViewWindow(
create_params.SetString(webview::kStoragePartitionId, storage_partition_id);
guest_manager->CreateGuest(WebViewGuest::Type,
- owner_extension_id(),
embedder_web_contents(),
create_params,
base::Bind(&WebViewGuest::NewGuestWebViewCallback,
@@ -880,7 +879,6 @@ content::WebContents* WebViewGuest::CreateNewGuestWindow(
GuestViewManager::FromBrowserContext(browser_context());
return guest_manager->CreateGuestWithWebContentsParams(
WebViewGuest::Type,
- owner_extension_id(),
embedder_web_contents(),
create_params);
}