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

Unified Diff: chrome/browser/guest_view/guest_view_base.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: chrome/browser/guest_view/guest_view_base.cc
diff --git a/chrome/browser/guest_view/guest_view_base.cc b/chrome/browser/guest_view/guest_view_base.cc
index a6ea195dd6c32a5e0b2e8a4c9d60affc8fefaf3d..6c8064c66dba3458ddd07cf1a44848a33cd8a51d 100644
--- a/chrome/browser/guest_view/guest_view_base.cc
+++ b/chrome/browser/guest_view/guest_view_base.cc
@@ -44,7 +44,8 @@ scoped_ptr<base::DictionaryValue> GuestViewBase::Event::GetArguments() {
}
GuestViewBase::GuestViewBase(WebContents* guest_web_contents,
- const std::string& embedder_extension_id)
+ const std::string& embedder_extension_id,
+ const base::WeakPtr<GuestViewBase>& opener)
: guest_web_contents_(guest_web_contents),
embedder_web_contents_(NULL),
embedder_extension_id_(embedder_extension_id),
@@ -52,17 +53,20 @@ GuestViewBase::GuestViewBase(WebContents* guest_web_contents,
browser_context_(guest_web_contents->GetBrowserContext()),
guest_instance_id_(guest_web_contents->GetEmbeddedInstanceID()),
view_instance_id_(guestview::kInstanceIDNone),
+ opener_(opener),
weak_ptr_factory_(this) {
webcontents_guestview_map.Get().insert(
std::make_pair(guest_web_contents, this));
}
// static
-GuestViewBase* GuestViewBase::Create(WebContents* guest_web_contents,
- const std::string& embedder_extension_id,
- const std::string& view_type) {
+GuestViewBase* GuestViewBase::Create(
+ WebContents* guest_web_contents,
+ const std::string& embedder_extension_id,
+ const std::string& view_type,
+ const base::WeakPtr<GuestViewBase>& opener) {
if (view_type == "webview") {
- return new WebViewGuest(guest_web_contents, embedder_extension_id);
+ return new WebViewGuest(guest_web_contents, embedder_extension_id, opener);
} else if (view_type == "adview") {
return new AdViewGuest(guest_web_contents, embedder_extension_id);
}
@@ -128,6 +132,10 @@ void GuestViewBase::GetDefaultContentSettingRules(
incognito));
}
+base::WeakPtr<GuestViewBase> GuestViewBase::AsWeakPtr() {
+ return weak_ptr_factory_.GetWeakPtr();
+}
+
void GuestViewBase::Attach(content::WebContents* embedder_web_contents,
const base::DictionaryValue& args) {
embedder_web_contents_ = embedder_web_contents;
@@ -154,6 +162,21 @@ void GuestViewBase::Attach(content::WebContents* embedder_web_contents,
weak_ptr_factory_.GetWeakPtr()));
}
+WebContents* GuestViewBase::GetOpener() const {
+ if (!opener_)
+ return NULL;
+ return opener_->guest_web_contents();
+}
+
+void GuestViewBase::SetOpener(WebContents* web_contents) {
+ GuestViewBase* guest = FromWebContents(web_contents);
+ if (guest) {
+ opener_ = guest->AsWeakPtr();
+ return;
+ }
+ opener_ = base::WeakPtr<GuestViewBase>();
+}
+
GuestViewBase::~GuestViewBase() {
std::pair<int, int> key(embedder_render_process_id_, guest_instance_id_);
embedder_guestview_map.Get().erase(key);

Powered by Google App Engine
This is Rietveld 408576698