summaryrefslogtreecommitdiff
path: root/src/webenginewidgets/api/qwebengineview.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-08-22 16:12:38 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-09-05 14:43:55 +0000
commit1e11575a32685f7ac01f8b0cd425fa8d3ce3de33 (patch)
tree8e9182bd8eb9866b35ed9507275428f184bf2665 /src/webenginewidgets/api/qwebengineview.cpp
parented1c711532227a7504fe6a700d9051a443c3a61b (diff)
downloadqtwebengine-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.cpp15
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