Index: content/browser/frame_host/cross_process_frame_connector.cc |
diff --git a/content/browser/frame_host/cross_process_frame_connector.cc b/content/browser/frame_host/cross_process_frame_connector.cc |
index 09853dab02ac6fdab334dc056463307a2300c530..004b74d08894c2785fcb41d16f597dfd5f3bbf3b 100644 |
--- a/content/browser/frame_host/cross_process_frame_connector.cc |
+++ b/content/browser/frame_host/cross_process_frame_connector.cc |
@@ -55,7 +55,13 @@ void CrossProcessFrameConnector::set_view( |
RenderWidgetHostViewChildFrame* view) { |
// Detach ourselves from the previous |view_|. |
if (view_) { |
- if (is_scroll_bubbling_ && GetParentRenderWidgetHostView()) { |
+ // The RenderWidgetHostDelegate needs to be checked because set_view() can |
+ // be called during nested WebContents destruction. See |
+ // https://crbug.com/644306. |
+ if (is_scroll_bubbling_ && GetParentRenderWidgetHostView() && |
+ RenderWidgetHostImpl::From( |
+ GetParentRenderWidgetHostView()->GetRenderWidgetHost()) |
+ ->delegate()) { |
RenderWidgetHostImpl::From( |
GetParentRenderWidgetHostView()->GetRenderWidgetHost()) |
->delegate() |