Index: content/browser/renderer_host/render_widget_host_view_mac.mm |
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm |
index 18a7d2fd03fa0708823cea6abbddd4adc4797315..b88f15d385a49e89c15bce442ab78978993969d6 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm |
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm |
@@ -521,7 +521,8 @@ void RenderWidgetHostViewBase::GetDefaultScreenInfo( |
/////////////////////////////////////////////////////////////////////////////// |
// RenderWidgetHostViewMac, public: |
-RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget) |
+RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget, |
+ bool is_guest_view_hack) |
: render_widget_host_(RenderWidgetHostImpl::From(widget)), |
text_input_type_(ui::TEXT_INPUT_TYPE_NONE), |
can_compose_inline_(true), |
@@ -529,6 +530,7 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget) |
new BrowserCompositorViewPlaceholderMac), |
is_loading_(false), |
allow_pause_for_resize_or_repaint_(true), |
+ is_guest_view_hack_(is_guest_view_hack), |
weak_factory_(this), |
fullscreen_parent_host_view_(NULL) { |
// |cocoa_view_| owns us and we will be deleted when |cocoa_view_| |
@@ -552,7 +554,8 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget) |
gfx::Screen::GetScreenFor(cocoa_view_)->AddObserver(this); |
- render_widget_host_->SetView(this); |
+ if (!is_guest_view_hack_) |
+ render_widget_host_->SetView(this); |
} |
RenderWidgetHostViewMac::~RenderWidgetHostViewMac() { |
@@ -570,8 +573,15 @@ RenderWidgetHostViewMac::~RenderWidgetHostViewMac() { |
// We are owned by RenderWidgetHostViewCocoa, so if we go away before the |
// RenderWidgetHost does we need to tell it not to hold a stale pointer to |
// us. |
- if (render_widget_host_) |
- render_widget_host_->SetView(NULL); |
+ if (render_widget_host_) { |
+ // If the view of the |host_| was set to a different view later (this is |
+ // typically a RenderWidgetHostViewChildFrame), then host_->GetView() won't |
piman
2014/10/14 23:48:06
nit: "typically a RenderWidgetHostViewGuest" ?
May
lazyboy
2014/10/15 04:50:11
Thanks, Done.
|
+ // be us. So calling SetView(NULL) would incorrectly drop the host's |
+ // reference to its current view (leak). So don't do it and let the host's |
+ // current view be cleaned up properly during the host's destruction. |
+ if (!is_guest_view_hack_) |
+ render_widget_host_->SetView(NULL); |
+ } |
} |
void RenderWidgetHostViewMac::SetDelegate( |