| 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 bc89f8e80f87d2e9eaec9ff9d99a3e31f23ae6b7..ae9b31eb9e31587bed78a21050abb2e7a7e92d33 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_mac.mm
|
| +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
|
| @@ -558,6 +558,9 @@ RenderWidgetHostViewMac::~RenderWidgetHostViewMac() {
|
|
|
| UnlockMouse();
|
|
|
| + // Ensure that the browser compositor is destroyed in a safe order.
|
| + ShutdownBrowserCompositor();
|
| +
|
| // Make sure that the layer doesn't reach into the now-invalid object.
|
| DestroyCompositedIOSurfaceAndLayer();
|
| DestroySoftwareLayer();
|
| @@ -660,6 +663,8 @@ void RenderWidgetHostViewMac::DestroyBrowserCompositorView() {
|
| if (!browser_compositor_view_)
|
| return;
|
|
|
| + // Marking the DelegatedFrameHost as removed from the window hierarchy is
|
| + // necessary to remove all connections to its old ui::Compositor.
|
| delegated_frame_host_->WasHidden();
|
| delegated_frame_host_->RemovingFromWindow();
|
| browser_compositor_view_.reset();
|
| @@ -1142,10 +1147,7 @@ void RenderWidgetHostViewMac::Destroy() {
|
|
|
| // Delete the delegated frame state, which will reach back into
|
| // render_widget_host_.
|
| - DestroyBrowserCompositorView();
|
| - delegated_frame_host_.reset();
|
| - root_layer_.reset();
|
| - browser_compositor_view_placeholder_.reset();
|
| + ShutdownBrowserCompositor();
|
|
|
| // We get this call just before |render_widget_host_| deletes
|
| // itself. But we are owned by |cocoa_view_|, which may be retained
|
| @@ -2029,6 +2031,13 @@ void RenderWidgetHostViewMac::ShutdownHost() {
|
| // Do not touch any members at this point, |this| has been deleted.
|
| }
|
|
|
| +void RenderWidgetHostViewMac::ShutdownBrowserCompositor() {
|
| + DestroyBrowserCompositorView();
|
| + delegated_frame_host_.reset();
|
| + root_layer_.reset();
|
| + browser_compositor_view_placeholder_.reset();
|
| +}
|
| +
|
| void RenderWidgetHostViewMac::GotAcceleratedFrame() {
|
| EnsureCompositedIOSurfaceLayer();
|
| SendVSyncParametersToRenderer();
|
|
|