summaryrefslogtreecommitdiffstats
path: root/src/webenginewidgets
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-05-17 09:23:05 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2019-05-17 09:23:05 +0000
commit0f081baa31facec779057de29eec14c6f458f6a6 (patch)
tree989110595da0d3ca42a78eaa73078ad24431a2d4 /src/webenginewidgets
parenta4eeb9dbd995d598bd3a639dd450def7c242b383 (diff)
parent4561b5a83966792b7325e63c91d78a6f70e65961 (diff)
Merge "Merge remote-tracking branch 'origin/5.13' into dev" into refs/staging/dev
Diffstat (limited to 'src/webenginewidgets')
-rw-r--r--src/webenginewidgets/api/qwebenginepage.cpp36
-rw-r--r--src/webenginewidgets/doc/src/qtwebkitportingguide.qdoc9
-rw-r--r--src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc18
3 files changed, 44 insertions, 19 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index e1b9a8fe3..86736d42b 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -686,24 +686,34 @@ void QWebEnginePagePrivate::bindPageAndView(QWebEnginePage *page, QWebEngineView
auto oldView = page ? page->d_func()->view : nullptr;
auto oldPage = view ? view->d_func()->page : nullptr;
+ bool ownNewPage = false;
+ bool deleteOldPage = false;
+
// Change pointers first.
if (page && oldView != view) {
- if (oldView)
+ if (oldView) {
+ ownNewPage = oldView->d_func()->m_ownsPage;
oldView->d_func()->page = nullptr;
+ oldView->d_func()->m_ownsPage = false;
+ }
page->d_func()->view = view;
}
if (view && oldPage != page) {
- if (oldPage)
- oldPage->d_func()->view = nullptr;
+ if (oldPage) {
+ if (oldPage->d_func())
+ oldPage->d_func()->view = nullptr;
+ deleteOldPage = view->d_func()->m_ownsPage;
+ }
+ view->d_func()->m_ownsPage = ownNewPage;
view->d_func()->page = page;
}
// 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);
@@ -712,17 +722,15 @@ 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);
-
- // At this point m_ownsPage should still refer to oldPage,
- // it is only set for the new page after binding.
- if (view->d_func()->m_ownsPage) {
- delete oldPage;
- view->d_func()->m_ownsPage = false;
- }
}
+ if (deleteOldPage)
+ delete oldPage;
}
void QWebEnginePagePrivate::bindPageAndWidget(QWebEnginePage *page, RenderWidgetHostViewQtDelegateWidget *widget)
@@ -733,7 +741,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;
}
@@ -746,7 +754,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);
}
diff --git a/src/webenginewidgets/doc/src/qtwebkitportingguide.qdoc b/src/webenginewidgets/doc/src/qtwebkitportingguide.qdoc
index e3fdc4ff1..9e8cc463c 100644
--- a/src/webenginewidgets/doc/src/qtwebkitportingguide.qdoc
+++ b/src/webenginewidgets/doc/src/qtwebkitportingguide.qdoc
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
@@ -266,7 +266,6 @@
page.runJavaScript("document.documentElement.contentEditable = true");
\endcode
-
\section1 Unavailable Qt WebKit API
The Qt \WebKit classes and methods in this list will not be available in \QWE.
@@ -310,5 +309,11 @@
engine process them by overloading the QWebEnginePage::acceptNavigationRequest()
function. This is necessary when an HTML document is used as part of the user interface,
and not to display external data, for example, when displaying a list of results.
+
+ \note \l{QWebEnginePage::}{acceptNavigationRequest()} starts the
+ loading process and emits the \l{QWebEnginePage::}{loadStarted()}
+ signal \e before the request is accepted or rejected. Therefore, a
+ \l{QWebEnginePage::}{loadFinished()} signal that returns \c false
+ is to be expected even after delegating the request.
\endtable
*/
diff --git a/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc b/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
index c6a97debb..354019a8d 100644
--- a/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
+++ b/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2015 The Qt Company Ltd.
+ Copyright (C) 2019 The Qt Company Ltd.
Copyright (C) 2008, 2009, 2012 Nokia Corporation and/or its subsidiary(-ies)
Copyright (C) 2007 Staikos Computing Services Inc.
Copyright (C) 2007 Apple Inc.
@@ -384,6 +384,11 @@
used as part of the user interface, and not to display external data, for example, when
displaying a list of results.
+ \note The loading process is started and the loadStarted() signal is emitted
+ \e before the request is accepted or rejected. Therefore, a loadFinished()
+ signal that returns \c false is to be expected even after delegating the
+ request.
+
The \l{QWebEngineUrlRequestInterceptor} class offers further options for intercepting and
manipulating requests.
*/
@@ -531,7 +536,7 @@
This signal is emitted when a page starts loading content.
- \sa loadFinished()
+ \sa loadFinished(), acceptNavigationRequest()
*/
/*!
@@ -551,7 +556,14 @@
is independent of script execution or page rendering.
\a ok will indicate whether the load was successful or any error occurred.
- \sa loadStarted()
+ \note Navigation requests can be delegated to the Qt application instead
+ of having the HTML handler engine process them by overloading the
+ acceptNavigationRequest() function. Because the loading process is started
+ and the loadStarted() signal is emitted \e before the request is accepted
+ or rejected, a \c loadFinished() signal that returns \c false is to be
+ expected even after delegating the request.
+
+ \sa loadStarted(), acceptNavigationRequest()
*/
/*!