Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(256)

Unified Diff: content/browser/browser_plugin/browser_plugin_guest.cc

Issue 258373002: Towards moving guest management to chrome: Introduce GuestViewManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge with ToT Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698