| Index: Source/web/WebViewFrameWidget.cpp
|
| diff --git a/Source/web/WebViewFrameWidget.cpp b/Source/web/WebViewFrameWidget.cpp
|
| index 7368f2a32cd3a15232fc23d6c45072f838567666..f0d8b8456823103c054bdc06ceb86ade1573e81d 100644
|
| --- a/Source/web/WebViewFrameWidget.cpp
|
| +++ b/Source/web/WebViewFrameWidget.cpp
|
| @@ -10,9 +10,10 @@
|
|
|
| namespace blink {
|
|
|
| -WebViewFrameWidget::WebViewFrameWidget(WebViewImpl& webView) : m_webView(&webView)
|
| +WebViewFrameWidget::WebViewFrameWidget(WebWidgetClient* client, WebViewImpl& webView, WebLocalFrameImpl& mainFrame)
|
| + : m_client(client), m_webView(&webView), m_mainFrame(&mainFrame)
|
| {
|
| - m_webView->mainFrameImpl()->setFrameWidget(this);
|
| + m_mainFrame->setFrameWidget(this);
|
| }
|
|
|
| WebViewFrameWidget::~WebViewFrameWidget()
|
| @@ -21,8 +22,14 @@ WebViewFrameWidget::~WebViewFrameWidget()
|
|
|
| void WebViewFrameWidget::close()
|
| {
|
| - m_webView->mainFrameImpl()->setFrameWidget(nullptr);
|
| + // Note: it's important to use the captured main frame pointer here. During
|
| + // a frame swap, the swapped frame is detached *after* the frame tree is
|
| + // updated. If the main frame is being swapped, then
|
| + // m_webView()->mainFrameImpl() will no longer point to the original frame.
|
| + m_mainFrame->setFrameWidget(nullptr);
|
| + m_mainFrame = nullptr;
|
| m_webView = nullptr;
|
| + m_client = nullptr;
|
|
|
| // Note: this intentionally does not forward to WebView::close(), to make it
|
| // easier to untangle the cleanup logic later.
|
|
|