diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-08-22 16:12:38 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-09-05 14:43:55 +0000 |
commit | 1e11575a32685f7ac01f8b0cd425fa8d3ce3de33 (patch) | |
tree | 8e9182bd8eb9866b35ed9507275428f184bf2665 /src/webenginewidgets/api/qwebengineview.cpp | |
parent | ed1c711532227a7504fe6a700d9051a443c3a61b (diff) | |
download | qtwebengine-1e11575a32685f7ac01f8b0cd425fa8d3ce3de33.tar.gz |
Avoid reattach of page before deleting it
Also fixes potential double delete if you do delete a view's implied
page.
Change-Id: Ib74128c0801f992694f4a5d8c148974039a6c7b2
Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Reviewed-by: Zakor Tamas <ztamas@inf.u-szeged.hu>
Diffstat (limited to 'src/webenginewidgets/api/qwebengineview.cpp')
-rw-r--r-- | src/webenginewidgets/api/qwebengineview.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index a207af392..aa51e5b0e 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE -void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page) +void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page, bool pageBeingDeleted) { if (view && page == view->d_func()->page) return; @@ -64,20 +64,22 @@ void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page) // Un-bind page from its current view. if (QWebEngineView *oldView = page->d_func()->view) { page->disconnect(oldView); - oldView->d_func()->page = 0; + oldView->d_func()->page = nullptr; } page->d_func()->view = view; - page->d_func()->adapter->reattachRWHV(); + if (!pageBeingDeleted) + page->d_func()->adapter->reattachRWHV(); } if (view) { // Un-bind view from its current page. if (QWebEnginePage *oldPage = view->d_func()->page) { oldPage->disconnect(view); - oldPage->d_func()->view = 0; - oldPage->d_func()->adapter->reattachRWHV(); + oldPage->d_func()->view = nullptr; if (oldPage->parent() == view) delete oldPage; + else + oldPage->d_func()->adapter->reattachRWHV(); } view->d_func()->page = page; } @@ -147,8 +149,7 @@ QWebEngineView::QWebEngineView(QWidget *parent) QWebEngineView::~QWebEngineView() { - Q_D(QWebEngineView); - QWebEngineViewPrivate::bind(0, d->page); + QWebEngineViewPrivate::bind(this, nullptr); } QWebEnginePage* QWebEngineView::page() const |