| Index: extensions/browser/guest_view/guest_view_base.cc
|
| diff --git a/extensions/browser/guest_view/guest_view_base.cc b/extensions/browser/guest_view/guest_view_base.cc
|
| index 324ed6b16db665317ac96d43bc22bf8285acdc35..151cefbbfd75d5de2ad5cb4040d4acba5004cfe2 100644
|
| --- a/extensions/browser/guest_view/guest_view_base.cc
|
| +++ b/extensions/browser/guest_view/guest_view_base.cc
|
| @@ -157,7 +157,7 @@ void GuestViewBase::Init(const std::string& embedder_extension_id,
|
| embedder_site_url,
|
| create_params,
|
| base::Bind(&GuestViewBase::CompleteInit,
|
| - AsWeakPtr(),
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| embedder_extension_id,
|
| embedder_process_id,
|
| callback));
|
| @@ -270,10 +270,6 @@ bool GuestViewBase::IsGuest(WebContents* web_contents) {
|
| return !!GuestViewBase::FromWebContents(web_contents);
|
| }
|
|
|
| -base::WeakPtr<GuestViewBase> GuestViewBase::AsWeakPtr() {
|
| - return weak_ptr_factory_.GetWeakPtr();
|
| -}
|
| -
|
| bool GuestViewBase::IsAutoSizeSupported() const {
|
| return false;
|
| }
|
| @@ -327,6 +323,7 @@ void GuestViewBase::GuestSizeChanged(const gfx::Size& old_size,
|
|
|
| void GuestViewBase::Destroy() {
|
| DCHECK(web_contents());
|
| +
|
| content::RenderProcessHost* host =
|
| content::RenderProcessHost::FromID(embedder_render_process_id());
|
| if (host)
|
| @@ -335,6 +332,11 @@ void GuestViewBase::Destroy() {
|
| // Give the derived class an opportunity to perform some cleanup.
|
| WillDestroy();
|
|
|
| + // Invalidate weak pointers now so that bound callbacks cannot be called late
|
| + // into destruction. We must call this after WillDestroy because derived types
|
| + // may wish to access their openers.
|
| + weak_ptr_factory_.InvalidateWeakPtrs();
|
| +
|
| // Give the content module an opportunity to perform some cleanup.
|
| if (!destruction_callback_.is_null())
|
| destruction_callback_.Run();
|
| @@ -355,7 +357,7 @@ void GuestViewBase::SetAttachParams(const base::DictionaryValue& params) {
|
|
|
| void GuestViewBase::SetOpener(GuestViewBase* guest) {
|
| if (guest && guest->IsViewType(GetViewType())) {
|
| - opener_ = guest->AsWeakPtr();
|
| + opener_ = guest->weak_ptr_factory_.GetWeakPtr();
|
| return;
|
| }
|
| opener_ = base::WeakPtr<GuestViewBase>();
|
|
|