summaryrefslogtreecommitdiffstats
path: root/src/webenginewidgets/api
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-05-03 10:45:54 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-05-03 10:01:39 +0000
commitfc077552673e25c580592047369acbe47f4be46d (patch)
treee6da32cf75d1f0f2b76af6f2f60f061b2678a861 /src/webenginewidgets/api
parent5a4656b9c731418f5568e57060b96b81333ac98f (diff)
Do not crash on QWebEnginePagePrivate::releaseProfile()
Deregistering the widget or deleting the view should be able to handle a now missing d_ptr in the old page. Change-Id: Ic843f7bde12776b6aad4fad865ccf14a25695154 Fixes: QTBUG-75547 Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
Diffstat (limited to 'src/webenginewidgets/api')
-rw-r--r--src/webenginewidgets/api/qwebenginepage.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index 54006169e..c33034015 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -762,7 +762,8 @@ void QWebEnginePagePrivate::bindPageAndView(QWebEnginePage *page, QWebEngineView
if (view && oldPage != page) {
if (oldPage) {
- oldPage->d_func()->view = nullptr;
+ if (oldPage->d_func())
+ oldPage->d_func()->view = nullptr;
deleteOldPage = view->d_func()->m_ownsPage;
}
view->d_func()->m_ownsPage = ownNewPage;
@@ -772,7 +773,7 @@ void QWebEnginePagePrivate::bindPageAndView(QWebEnginePage *page, QWebEngineView
// Then notify.
auto widget = page ? page->d_func()->widget : nullptr;
- auto oldWidget = oldPage ? oldPage->d_func()->widget : nullptr;
+ auto oldWidget = (oldPage && oldPage->d_func()) ? oldPage->d_func()->widget : nullptr;
if (page && oldView != view && oldView) {
oldView->d_func()->pageChanged(page, nullptr);
@@ -781,7 +782,10 @@ void QWebEnginePagePrivate::bindPageAndView(QWebEnginePage *page, QWebEngineView
}
if (view && oldPage != page) {
- view->d_func()->pageChanged(oldPage, page);
+ if (oldPage && oldPage->d_func())
+ view->d_func()->pageChanged(oldPage, page);
+ else
+ view->d_func()->pageChanged(nullptr, page);
if (oldWidget != widget)
view->d_func()->widgetChanged(oldWidget, widget);
}
@@ -797,7 +801,7 @@ void QWebEnginePagePrivate::bindPageAndWidget(QWebEnginePage *page, RenderWidget
// Change pointers first.
if (widget && oldPage != page) {
- if (oldPage)
+ if (oldPage && oldPage->d_func())
oldPage->d_func()->widget = nullptr;
widget->m_page = page;
}
@@ -810,7 +814,7 @@ void QWebEnginePagePrivate::bindPageAndWidget(QWebEnginePage *page, RenderWidget
// Then notify.
- if (widget && oldPage != page && oldPage) {
+ if (widget && oldPage != page && oldPage && oldPage->d_func()) {
if (auto oldView = oldPage->d_func()->view)
oldView->d_func()->widgetChanged(widget, nullptr);
}