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

Unified Diff: chrome/browser/guest_view/guest_view_base.cc

Issue 272573005: <webview>: Move NewWindow API to chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@guestview_manager_rename
Patch Set: Cleanup and fix tests Created 6 years, 7 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 288760855b5e064f67b123216310f84d2ddbbd15..f81727385789d2db1698dac9eac8e863e2dfc43e 100644
--- a/chrome/browser/guest_view/guest_view_base.cc
+++ b/chrome/browser/guest_view/guest_view_base.cc
@@ -40,8 +40,7 @@ scoped_ptr<base::DictionaryValue> GuestViewBase::Event::GetArguments() {
}
GuestViewBase::GuestViewBase(WebContents* guest_web_contents,
- const std::string& embedder_extension_id,
- const base::WeakPtr<GuestViewBase>& opener)
+ const std::string& embedder_extension_id)
: guest_web_contents_(guest_web_contents),
embedder_web_contents_(NULL),
embedder_extension_id_(embedder_extension_id),
@@ -49,7 +48,6 @@ 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));
@@ -61,10 +59,9 @@ GuestViewBase::GuestViewBase(WebContents* guest_web_contents,
GuestViewBase* GuestViewBase::Create(
WebContents* guest_web_contents,
const std::string& embedder_extension_id,
- const std::string& view_type,
- const base::WeakPtr<GuestViewBase>& opener) {
+ const std::string& view_type) {
if (view_type == "webview") {
- return new WebViewGuest(guest_web_contents, embedder_extension_id, opener);
+ return new WebViewGuest(guest_web_contents, embedder_extension_id);
} else if (view_type == "adview") {
return new AdViewGuest(guest_web_contents, embedder_extension_id);
}
@@ -148,8 +145,7 @@ void GuestViewBase::Attach(content::WebContents* embedder_web_contents,
embedder_render_process_id_ =
embedder_web_contents->GetRenderProcessHost()->GetID();
args.GetInteger(guestview::kParameterInstanceId, &view_instance_id_);
-
- std::pair<int, int> key(embedder_render_process_id_, guest_instance_id_);
+ extra_params_.reset(args.DeepCopy());
// GuestViewBase::Attach is called prior to initialization (and initial
// navigation) of the guest in the content layer in order to permit mapping
@@ -167,14 +163,13 @@ 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::Destroy() {
+ destruction_callback_.Run(guest_web_contents());
lazyboy 2014/05/12 23:00:20 Will destruction_callback_ be always set? Prefer a
Fady Samuel 2014/05/13 18:59:02 Done.
+ delete guest_web_contents();
}
-void GuestViewBase::SetOpener(WebContents* web_contents) {
- GuestViewBase* guest = FromWebContents(web_contents);
+
+void GuestViewBase::SetOpener(GuestViewBase* guest) {
if (guest && guest->IsViewType(GetViewType())) {
opener_ = guest->AsWeakPtr();
return;
@@ -182,6 +177,11 @@ void GuestViewBase::SetOpener(WebContents* web_contents) {
opener_ = base::WeakPtr<GuestViewBase>();
}
+void GuestViewBase::RegisterDestructionCallback(
+ const DestructionCallback& callback) {
+ destruction_callback_ = callback;
+}
+
GuestViewBase::~GuestViewBase() {
std::pair<int, int> key(embedder_render_process_id_, guest_instance_id_);
@@ -226,7 +226,6 @@ void GuestViewBase::DispatchEvent(Event* event) {
void GuestViewBase::SendQueuedEvents() {
if (!attached())
return;
-
while (!pending_events_.empty()) {
linked_ptr<Event> event_ptr = pending_events_.front();
pending_events_.pop_front();

Powered by Google App Engine
This is Rietveld 408576698