summaryrefslogtreecommitdiff
path: root/chromium/components/guest_view
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-07-17 13:57:45 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-07-19 13:44:40 +0000
commit6ec7b8da05d21a3878bd21c691b41e675d74bb1c (patch)
treeb87f250bc19413750b9bb9cdbf2da20ef5014820 /chromium/components/guest_view
parentec02ee4181c49b61fce1c8fb99292dbb8139cc90 (diff)
downloadqtwebengine-chromium-6ec7b8da05d21a3878bd21c691b41e675d74bb1c.tar.gz
BASELINE: Update Chromium to 60.0.3112.70
Change-Id: I9911c2280a014d4632f254857876a395d4baed2d Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/components/guest_view')
-rw-r--r--chromium/components/guest_view/OWNERS1
-rw-r--r--chromium/components/guest_view/browser/BUILD.gn4
-rw-r--r--chromium/components/guest_view/browser/guest_view_base.cc137
-rw-r--r--chromium/components/guest_view/browser/guest_view_base.h19
-rw-r--r--chromium/components/guest_view/browser/guest_view_manager.cc32
-rw-r--r--chromium/components/guest_view/browser/guest_view_manager.h16
-rw-r--r--chromium/components/guest_view/browser/guest_view_message_filter.cc7
-rw-r--r--chromium/components/guest_view/browser/guest_view_message_filter.h3
-rw-r--r--chromium/components/guest_view/renderer/BUILD.gn4
-rw-r--r--chromium/components/guest_view/renderer/guest_view_container.cc7
10 files changed, 92 insertions, 138 deletions
diff --git a/chromium/components/guest_view/OWNERS b/chromium/components/guest_view/OWNERS
index 5af20a0270b..728baf50245 100644
--- a/chromium/components/guest_view/OWNERS
+++ b/chromium/components/guest_view/OWNERS
@@ -4,5 +4,6 @@ lazyboy@chromium.org
lfg@chromium.org
wjmaclean@chromium.org
paulmeyer@chromium.org
+ekaramad@chromium.org
# COMPONENT: Platform>Apps>BrowserTag
diff --git a/chromium/components/guest_view/browser/BUILD.gn b/chromium/components/guest_view/browser/BUILD.gn
index a0668fc7782..6430459a7f0 100644
--- a/chromium/components/guest_view/browser/BUILD.gn
+++ b/chromium/components/guest_view/browser/BUILD.gn
@@ -2,6 +2,10 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import("//extensions/features/features.gni")
+
+assert(enable_extensions)
+
static_library("browser") {
output_name = "guest_view_browser"
sources = [
diff --git a/chromium/components/guest_view/browser/guest_view_base.cc b/chromium/components/guest_view/browser/guest_view_base.cc
index 4a260c65b66..27570202e8e 100644
--- a/chromium/components/guest_view/browser/guest_view_base.cc
+++ b/chromium/components/guest_view/browser/guest_view_base.cc
@@ -30,17 +30,13 @@
using content::WebContents;
-namespace content {
-struct FrameNavigateParams;
-}
-
namespace guest_view {
namespace {
using WebContentsGuestViewMap = std::map<const WebContents*, GuestViewBase*>;
-static base::LazyInstance<WebContentsGuestViewMap>::DestructorAtExit
- webcontents_guestview_map = LAZY_INSTANCE_INITIALIZER;
+base::LazyInstance<WebContentsGuestViewMap>::Leaky g_webcontents_guestview_map =
+ LAZY_INSTANCE_INITIALIZER;
} // namespace
@@ -149,7 +145,7 @@ class GuestViewBase::OwnerContentsObserver : public WebContentsObserver {
// WebContents goes away before the GuestViewBase is attached.
class GuestViewBase::OpenerLifetimeObserver : public WebContentsObserver {
public:
- OpenerLifetimeObserver(GuestViewBase* guest)
+ explicit OpenerLifetimeObserver(GuestViewBase* guest)
: WebContentsObserver(guest->GetOpener()->web_contents()),
guest_(guest) {}
@@ -173,8 +169,7 @@ class GuestViewBase::OpenerLifetimeObserver : public WebContentsObserver {
GuestViewBase::GuestViewBase(WebContents* owner_web_contents)
: owner_web_contents_(owner_web_contents),
browser_context_(owner_web_contents->GetBrowserContext()),
- guest_instance_id_(GuestViewManager::FromBrowserContext(browser_context_)
- ->GetNextInstanceID()),
+ guest_instance_id_(GetGuestViewManager()->GetNextInstanceID()),
view_instance_id_(kInstanceIDNone),
element_instance_id_(kInstanceIDNone),
initialized_(false),
@@ -184,9 +179,7 @@ GuestViewBase::GuestViewBase(WebContents* owner_web_contents)
is_full_page_plugin_(false),
guest_proxy_routing_id_(MSG_ROUTING_NONE),
weak_ptr_factory_(this) {
- owner_host_ = GuestViewManager::FromBrowserContext(browser_context_)->
- IsOwnedByExtension(this) ?
- owner_web_contents->GetLastCommittedURL().host() : std::string();
+ SetOwnerHost();
}
GuestViewBase::~GuestViewBase() {}
@@ -197,8 +190,7 @@ void GuestViewBase::Init(const base::DictionaryValue& create_params,
return;
initialized_ = true;
- if (!GuestViewManager::FromBrowserContext(browser_context_)->
- IsGuestAvailableToContext(this)) {
+ if (!GetGuestViewManager()->IsGuestAvailableToContext(this)) {
// The derived class did not create a WebContents so this class serves no
// purpose. Let's self-destruct.
delete this;
@@ -233,15 +225,14 @@ void GuestViewBase::InitWithWebContents(
// At this point, we have just created the guest WebContents, we need to add
// an observer to the owner WebContents. This observer will be responsible
// for destroying the guest WebContents if the owner goes away.
- owner_contents_observer_.reset(
- new OwnerContentsObserver(this, owner_web_contents_));
+ owner_contents_observer_ =
+ base::MakeUnique<OwnerContentsObserver>(this, owner_web_contents_);
WebContentsObserver::Observe(guest_web_contents);
guest_web_contents->SetDelegate(this);
- webcontents_guestview_map.Get().insert(
+ g_webcontents_guestview_map.Get().insert(
std::make_pair(guest_web_contents, this));
- GuestViewManager::FromBrowserContext(browser_context_)->
- AddGuest(guest_instance_id_, guest_web_contents);
+ GetGuestViewManager()->AddGuest(guest_instance_id_, guest_web_contents);
// Populate the view instance ID if we have it on creation.
create_params.GetInteger(kParameterInstanceId, &view_instance_id_);
@@ -271,7 +262,7 @@ void GuestViewBase::DispatchOnResizeEvent(const gfx::Size& old_size,
return;
// Dispatch the onResize event.
- std::unique_ptr<base::DictionaryValue> args(new base::DictionaryValue());
+ auto args = base::MakeUnique<base::DictionaryValue>();
args->SetInteger(kOldWidth, old_size.width());
args->SetInteger(kOldHeight, old_size.height());
args->SetInteger(kNewWidth, new_size.width());
@@ -281,14 +272,13 @@ void GuestViewBase::DispatchOnResizeEvent(const gfx::Size& old_size,
}
gfx::Size GuestViewBase::GetDefaultSize() const {
- if (is_full_page_plugin()) {
- // Full page plugins default to the size of the owner's viewport.
- return owner_web_contents()
- ->GetRenderWidgetHostView()
- ->GetVisibleViewportSize();
- } else {
+ if (!is_full_page_plugin())
return gfx::Size(kDefaultWidth, kDefaultHeight);
- }
+
+ // Full page plugins default to the size of the owner's viewport.
+ return owner_web_contents()
+ ->GetRenderWidgetHostView()
+ ->GetVisibleViewportSize();
}
void GuestViewBase::SetSize(const SetSizeParams& params) {
@@ -355,7 +345,7 @@ void GuestViewBase::CleanUp(content::BrowserContext* browser_context,
// static
GuestViewBase* GuestViewBase::FromWebContents(const WebContents* web_contents) {
- WebContentsGuestViewMap* guest_map = webcontents_guestview_map.Pointer();
+ WebContentsGuestViewMap* guest_map = g_webcontents_guestview_map.Pointer();
auto it = guest_map->find(web_contents);
return it == guest_map->end() ? nullptr : it->second;
}
@@ -402,13 +392,14 @@ bool GuestViewBase::ZoomPropagatesFromEmbedderToGuest() const {
void GuestViewBase::SetContextMenuPosition(const gfx::Point& position) {}
+GuestViewManager* GuestViewBase::GetGuestViewManager() {
+ return GuestViewManager::FromBrowserContext(browser_context());
+}
+
WebContents* GuestViewBase::CreateNewGuestWindow(
const WebContents::CreateParams& create_params) {
- auto* guest_manager = GuestViewManager::FromBrowserContext(browser_context());
- return guest_manager->CreateGuestWithWebContentsParams(
- GetViewType(),
- owner_web_contents(),
- create_params);
+ return GetGuestViewManager()->CreateGuestWithWebContentsParams(
+ GetViewType(), owner_web_contents(), create_params);
}
void GuestViewBase::OnRenderFrameHostDeleted(int process_id, int routing_id) {}
@@ -445,26 +436,6 @@ void GuestViewBase::DidDetach() {
Destroy(true);
}
-bool GuestViewBase::HandleFindForEmbedder(
- int request_id,
- const base::string16& search_text,
- const blink::WebFindOptions& options) {
- if (ShouldHandleFindRequestsForEmbedder()) {
- web_contents()->Find(request_id, search_text, options);
- return true;
- }
- return false;
-}
-
-bool GuestViewBase::HandleStopFindingForEmbedder(
- content::StopFindAction action) {
- if (ShouldHandleFindRequestsForEmbedder()) {
- web_contents()->StopFinding(action);
- return true;
- }
- return false;
-}
-
WebContents* GuestViewBase::GetOwnerWebContents() const {
return owner_web_contents_;
}
@@ -505,9 +476,8 @@ void GuestViewBase::Destroy(bool also_delete) {
guest_host_->WillDestroy();
guest_host_ = nullptr;
- webcontents_guestview_map.Get().erase(web_contents());
- GuestViewManager::FromBrowserContext(browser_context_)->
- RemoveGuest(guest_instance_id_);
+ g_webcontents_guestview_map.Get().erase(web_contents());
+ GetGuestViewManager()->RemoveGuest(guest_instance_id_);
pending_events_.clear();
if (also_delete)
@@ -522,8 +492,10 @@ void GuestViewBase::SetAttachParams(const base::DictionaryValue& params) {
void GuestViewBase::SetOpener(GuestViewBase* guest) {
if (guest && guest->IsViewType(GetViewType())) {
opener_ = guest->weak_ptr_factory_.GetWeakPtr();
- if (!attached())
- opener_lifetime_observer_.reset(new OpenerLifetimeObserver(this));
+ if (!attached()) {
+ opener_lifetime_observer_ =
+ base::MakeUnique<OpenerLifetimeObserver>(this);
+ }
return;
}
opener_ = base::WeakPtr<GuestViewBase>();
@@ -545,11 +517,9 @@ void GuestViewBase::WillAttach(WebContents* embedder_web_contents,
if (owner_web_contents_ != embedder_web_contents) {
DCHECK_EQ(owner_contents_observer_->web_contents(), owner_web_contents_);
owner_web_contents_ = embedder_web_contents;
- owner_contents_observer_.reset(
- new OwnerContentsObserver(this, embedder_web_contents));
- owner_host_ = GuestViewManager::FromBrowserContext(browser_context_)->
- IsOwnedByExtension(this) ?
- owner_web_contents()->GetLastCommittedURL().host() : std::string();
+ owner_contents_observer_ =
+ base::MakeUnique<OwnerContentsObserver>(this, embedder_web_contents);
+ SetOwnerHost();
}
// Start tracking the new embedder's zoom level.
@@ -570,10 +540,6 @@ void GuestViewBase::SignalWhenReady(const base::Closure& callback) {
callback.Run();
}
-bool GuestViewBase::ShouldHandleFindRequestsForEmbedder() const {
- return false;
-}
-
int GuestViewBase::LogicalPixelsToPhysicalPixels(double logical_pixels) const {
DCHECK(logical_pixels >= 0);
double zoom_factor = GetEmbedderZoomFactor();
@@ -698,9 +664,7 @@ bool GuestViewBase::ShouldFocusPageAfterCrash() {
bool GuestViewBase::PreHandleGestureEvent(WebContents* source,
const blink::WebGestureEvent& event) {
- return event.GetType() == blink::WebGestureEvent::kGesturePinchBegin ||
- event.GetType() == blink::WebGestureEvent::kGesturePinchUpdate ||
- event.GetType() == blink::WebGestureEvent::kGesturePinchEnd;
+ return blink::WebInputEvent::IsPinchGestureEventType(event.GetType());
}
void GuestViewBase::UpdatePreferredSize(WebContents* target_web_contents,
@@ -726,35 +690,15 @@ bool GuestViewBase::ShouldResumeRequestsForCreatedWindow() {
return false;
}
-void GuestViewBase::FindReply(WebContents* source,
- int request_id,
- int number_of_matches,
- const gfx::Rect& selection_rect,
- int active_match_ordinal,
- bool final_update) {
- if (ShouldHandleFindRequestsForEmbedder() &&
- attached() && embedder_web_contents()->GetDelegate()) {
- embedder_web_contents()->GetDelegate()->FindReply(embedder_web_contents(),
- request_id,
- number_of_matches,
- selection_rect,
- active_match_ordinal,
- final_update);
- }
-}
-
content::RenderWidgetHost* GuestViewBase::GetOwnerRenderWidgetHost() {
// We assume guests live inside an owner RenderFrame but the RenderFrame may
// not be cross-process. In case a type of guest should be allowed to be
// embedded in a cross-process frame, this method should be overrode for that
// specific guest type. For all other guests, the owner RenderWidgetHost is
// that of the owner WebContents.
- if (GetOwnerWebContents() &&
- GetOwnerWebContents()->GetRenderWidgetHostView()) {
- return GetOwnerWebContents()
- ->GetRenderWidgetHostView()
- ->GetRenderWidgetHost();
- }
+ auto* owner = GetOwnerWebContents();
+ if (owner && owner->GetRenderWidgetHostView())
+ return owner->GetRenderWidgetHostView()->GetRenderWidgetHost();
return nullptr;
}
@@ -935,4 +879,11 @@ void GuestViewBase::UpdateGuestSize(const gfx::Size& new_size,
guest_size_ = new_size;
}
+void GuestViewBase::SetOwnerHost() {
+ auto* manager = GuestViewManager::FromBrowserContext(browser_context_);
+ owner_host_ = manager->IsOwnedByExtension(this)
+ ? owner_web_contents()->GetLastCommittedURL().host()
+ : std::string();
+}
+
} // namespace guest_view
diff --git a/chromium/components/guest_view/browser/guest_view_base.h b/chromium/components/guest_view/browser/guest_view_base.h
index c900a11b01f..67fdaf0e373 100644
--- a/chromium/components/guest_view/browser/guest_view_base.h
+++ b/chromium/components/guest_view/browser/guest_view_base.h
@@ -23,6 +23,7 @@
namespace guest_view {
class GuestViewEvent;
+class GuestViewManager;
// A struct of parameters for SetSize(). The parameters are all declared as
// scoped pointers since they are all optional. Null pointers indicate that the
@@ -222,12 +223,6 @@ class GuestViewBase : public content::BrowserPluginGuestDelegate,
const content::NativeWebKeyboardEvent& event) override;
bool PreHandleGestureEvent(content::WebContents* source,
const blink::WebGestureEvent& event) override;
- void FindReply(content::WebContents* source,
- int request_id,
- int number_of_matches,
- const gfx::Rect& selection_rect,
- int active_match_ordinal,
- bool final_update) override;
// WebContentsObserver implementation.
void DidFinishNavigation(
@@ -296,11 +291,6 @@ class GuestViewBase : public content::BrowserPluginGuestDelegate,
// asynchronous setup.
virtual void SignalWhenReady(const base::Closure& callback);
- // Returns true if this guest should handle find requests for its
- // embedder. This should generally be true for guests that make up the
- // entirety of the embedder's content.
- virtual bool ShouldHandleFindRequestsForEmbedder() const;
-
// This method is called immediately before suspended resource loads have been
// resumed on attachment to an embedder.
//
@@ -345,10 +335,6 @@ class GuestViewBase : public content::BrowserPluginGuestDelegate,
void DidAttach(int guest_proxy_routing_id) final;
void DidDetach() final;
content::WebContents* GetOwnerWebContents() const final;
- bool HandleFindForEmbedder(int request_id,
- const base::string16& search_text,
- const blink::WebFindOptions& options) final;
- bool HandleStopFindingForEmbedder(content::StopFindAction action) final;
void GuestSizeChanged(const gfx::Size& new_size) final;
void SetGuestHost(content::GuestHost* guest_host) final;
void WillAttach(content::WebContents* embedder_web_contents,
@@ -411,6 +397,9 @@ class GuestViewBase : public content::BrowserPluginGuestDelegate,
void UpdateGuestSize(const gfx::Size& new_size, bool due_to_auto_resize);
+ GuestViewManager* GetGuestViewManager();
+ void SetOwnerHost();
+
// This guest tracks the lifetime of the WebContents specified by
// |owner_web_contents_|. If |owner_web_contents_| is destroyed then this
// guest will also self-destruct.
diff --git a/chromium/components/guest_view/browser/guest_view_manager.cc b/chromium/components/guest_view/browser/guest_view_manager.cc
index 1c68e13912c..bc36a92f4ad 100644
--- a/chromium/components/guest_view/browser/guest_view_manager.cc
+++ b/chromium/components/guest_view/browser/guest_view_manager.cc
@@ -8,8 +8,8 @@
#include <utility>
#include "base/macros.h"
+#include "base/memory/ptr_util.h"
#include "base/metrics/user_metrics.h"
-#include "base/strings/stringprintf.h"
#include "components/guest_view/browser/guest_view_base.h"
#include "components/guest_view/browser/guest_view_manager_delegate.h"
#include "components/guest_view/browser/guest_view_manager_factory.h"
@@ -17,7 +17,7 @@
#include "content/public/browser/browser_context.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_view_host.h"
+#include "content/public/browser/site_instance.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/common/child_process_host.h"
#include "content/public/common/result_codes.h"
@@ -31,6 +31,13 @@ using content::WebContents;
namespace guest_view {
+namespace {
+
+// Static factory instance (always NULL for non-test).
+GuestViewManagerFactory* g_factory;
+
+} // namespace
+
// This observer observes the RenderProcessHosts of GuestView embedders, and
// notifies the GuestViewManager when they are destroyed.
class GuestViewManager::EmbedderRenderProcessHostObserver
@@ -61,9 +68,6 @@ class GuestViewManager::EmbedderRenderProcessHostObserver
int id_;
};
-// static
-GuestViewManagerFactory* GuestViewManager::factory_ = nullptr;
-
GuestViewManager::GuestViewManager(
content::BrowserContext* context,
std::unique_ptr<GuestViewManagerDelegate> delegate)
@@ -81,13 +85,14 @@ GuestViewManager* GuestViewManager::CreateWithDelegate(
std::unique_ptr<GuestViewManagerDelegate> delegate) {
GuestViewManager* guest_manager = FromBrowserContext(context);
if (!guest_manager) {
- if (factory_) {
+ if (g_factory) {
guest_manager =
- factory_->CreateGuestViewManager(context, std::move(delegate));
+ g_factory->CreateGuestViewManager(context, std::move(delegate));
} else {
guest_manager = new GuestViewManager(context, std::move(delegate));
}
- context->SetUserData(kGuestViewManagerKeyName, guest_manager);
+ context->SetUserData(kGuestViewManagerKeyName,
+ base::WrapUnique(guest_manager));
}
return guest_manager;
}
@@ -99,6 +104,12 @@ GuestViewManager* GuestViewManager::FromBrowserContext(
kGuestViewManagerKeyName));
}
+// static
+void GuestViewManager::set_factory_for_testing(
+ GuestViewManagerFactory* factory) {
+ g_factory = factory;
+}
+
content::WebContents* GuestViewManager::GetGuestByInstanceIDSafely(
int guest_instance_id,
int embedder_render_process_id) {
@@ -321,7 +332,7 @@ void GuestViewManager::CallViewDestructionCallbacks(int embedder_process_id,
// If |view_instance_id| is guest_view::kInstanceIDNone, then all callbacks
// for this embedder should be called.
- if (view_instance_id == guest_view::kInstanceIDNone) {
+ if (view_instance_id == kInstanceIDNone) {
// Call all callbacks for the embedder with ID |embedder_process_id|.
for (auto& view_pair : callbacks_for_embedder) {
Callbacks& callbacks_for_view = view_pair.second;
@@ -344,8 +355,7 @@ void GuestViewManager::CallViewDestructionCallbacks(int embedder_process_id,
}
void GuestViewManager::CallViewDestructionCallbacks(int embedder_process_id) {
- CallViewDestructionCallbacks(embedder_process_id,
- guest_view::kInstanceIDNone);
+ CallViewDestructionCallbacks(embedder_process_id, kInstanceIDNone);
}
GuestViewBase* GuestViewManager::CreateGuestInternal(
diff --git a/chromium/components/guest_view/browser/guest_view_manager.h b/chromium/components/guest_view/browser/guest_view_manager.h
index 74e177d3fbf..4c1ad70b451 100644
--- a/chromium/components/guest_view/browser/guest_view_manager.h
+++ b/chromium/components/guest_view/browser/guest_view_manager.h
@@ -11,11 +11,9 @@
#include <vector>
#include "base/bind.h"
-#include "base/lazy_instance.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "content/public/browser/browser_plugin_guest_manager.h"
-#include "content/public/browser/site_instance.h"
#include "content/public/browser/web_contents.h"
class GURL;
@@ -26,8 +24,8 @@ class DictionaryValue;
namespace content {
class BrowserContext;
-class WebContents;
-} // namespace content
+class SiteInstance;
+}
namespace guest_view {
@@ -54,9 +52,8 @@ class GuestViewManager : public content::BrowserPluginGuestManager,
// Overrides factory for testing. Default (NULL) value indicates regular
// (non-test) environment.
- static void set_factory_for_testing(GuestViewManagerFactory* factory) {
- GuestViewManager::factory_ = factory;
- }
+ static void set_factory_for_testing(GuestViewManagerFactory* factory);
+
// Returns the guest WebContents associated with the given |guest_instance_id|
// if the provided |embedder_render_process_id| is allowed to access it.
// If the embedder is not allowed access, the embedder will be killed, and
@@ -204,9 +201,6 @@ class GuestViewManager : public content::BrowserPluginGuestManager,
static bool GetFullPageGuestHelper(content::WebContents** result,
content::WebContents* guest_web_contents);
- // Static factory instance (always NULL for non-test).
- static GuestViewManagerFactory* factory_;
-
// Contains guests' WebContents, mapping from their instance ids.
using GuestInstanceMap = std::map<int, content::WebContents*>;
GuestInstanceMap guest_web_contents_by_instance_id_;
@@ -256,7 +250,7 @@ class GuestViewManager : public content::BrowserPluginGuestManager,
// |last_instance_id_removed_| are kept here.
std::set<int> removed_instance_ids_;
- content::BrowserContext* context_;
+ content::BrowserContext* const context_;
std::unique_ptr<GuestViewManagerDelegate> delegate_;
diff --git a/chromium/components/guest_view/browser/guest_view_message_filter.cc b/chromium/components/guest_view/browser/guest_view_message_filter.cc
index 03aefe803a3..c2124ed258f 100644
--- a/chromium/components/guest_view/browser/guest_view_message_filter.cc
+++ b/chromium/components/guest_view/browser/guest_view_message_filter.cc
@@ -144,7 +144,8 @@ void GuestViewMessageFilter::OnAttachToEmbedderFrame(
guest->WillAttach(
owner_web_contents, element_instance_id, false,
- base::Bind(&GuestViewMessageFilter::WillAttachCallback, this, guest));
+ base::Bind(&GuestViewBase::DidAttach,
+ guest->weak_ptr_factory_.GetWeakPtr(), MSG_ROUTING_NONE));
// Attach this inner WebContents |guest_web_contents| to the outer
// WebContents |owner_web_contents|. The outer WebContents's
@@ -155,8 +156,4 @@ void GuestViewMessageFilter::OnAttachToEmbedderFrame(
embedder_frame);
}
-void GuestViewMessageFilter::WillAttachCallback(GuestViewBase* guest) {
- guest->DidAttach(MSG_ROUTING_NONE);
-}
-
} // namespace guest_view
diff --git a/chromium/components/guest_view/browser/guest_view_message_filter.h b/chromium/components/guest_view/browser/guest_view_message_filter.h
index 7c271d8a98c..1a24bf2cacd 100644
--- a/chromium/components/guest_view/browser/guest_view_message_filter.h
+++ b/chromium/components/guest_view/browser/guest_view_message_filter.h
@@ -23,7 +23,6 @@ class BrowserContext;
}
namespace guest_view {
-class GuestViewBase;
class GuestViewManager;
// This class filters out incoming GuestView-specific IPC messages from the
@@ -75,8 +74,6 @@ class GuestViewMessageFilter : public content::BrowserMessageFilter {
void OnViewCreated(int view_instance_id, const std::string& view_type);
void OnViewGarbageCollected(int view_instance_id);
- void WillAttachCallback(GuestViewBase* guest);
-
DISALLOW_COPY_AND_ASSIGN(GuestViewMessageFilter);
};
diff --git a/chromium/components/guest_view/renderer/BUILD.gn b/chromium/components/guest_view/renderer/BUILD.gn
index c78feedc49e..479bdef0feb 100644
--- a/chromium/components/guest_view/renderer/BUILD.gn
+++ b/chromium/components/guest_view/renderer/BUILD.gn
@@ -2,6 +2,10 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import("//extensions/features/features.gni")
+
+assert(enable_extensions)
+
static_library("renderer") {
sources = [
"guest_view_container.cc",
diff --git a/chromium/components/guest_view/renderer/guest_view_container.cc b/chromium/components/guest_view/renderer/guest_view_container.cc
index cc01a13e096..4d1e7a65079 100644
--- a/chromium/components/guest_view/renderer/guest_view_container.cc
+++ b/chromium/components/guest_view/renderer/guest_view_container.cc
@@ -186,8 +186,15 @@ void GuestViewContainer::RunDestructionCallback(bool embedder_frame_destroyed) {
}
void GuestViewContainer::OnHandleCallback(const IPC::Message& message) {
+ base::WeakPtr<content::BrowserPluginDelegate> weak_ptr(GetWeakPtr());
+
// Handle the callback for the current request with a pending response.
HandlePendingResponseCallback(message);
+
+ // Check that this container has not been deleted (crbug.com/718292).
+ if (!weak_ptr)
+ return;
+
// Perform the subsequent request if one exists.
PerformPendingRequest();
}