diff options
author | Michal Klocek <michal.klocek@qt.io> | 2019-02-01 12:01:26 +0100 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2019-02-04 15:34:00 +0000 |
commit | 5e92adf5f85c4ec8340d5b7e92166a5e4f8e9883 (patch) | |
tree | 350d28ccf5de9a85cc26f520bd0dda2222bc1021 /src/core/api | |
parent | a8b48040243c95316a9dad92360f086cf6e537af (diff) |
Move QWebEngineUrlRequestInterceptor::intercept to ui thread
Currently interceptor sufferers thread safety issues, when
custom profiles are deleted, interceptor is set to be nullptr,
however it can be still referenced in IO thread. Since
profile was split to ui and io part, where io part can outlive
the ui part, this can boost thread safety issues.
Since QWebEngineUrlRequestInterceptor is living on ui thread
simplify the logic move intercept call to ui thread.
This fixes the issue of referencing interceptor in io thread.
Add new method to install interceptor setUrlRequestInterceptor,
and deprecate old one. Update interceptor install method name
on page to match the profile one.
Task-number: QTBUG-69844
Change-Id: I5dd2b6b734fd91906cccc6c1408ffbe7b1b4250c
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/core/api')
-rw-r--r-- | src/core/api/qwebengineurlrequestinfo.cpp | 10 | ||||
-rw-r--r-- | src/core/api/qwebengineurlrequestinterceptor.h | 2 |
2 files changed, 4 insertions, 8 deletions
diff --git a/src/core/api/qwebengineurlrequestinfo.cpp b/src/core/api/qwebengineurlrequestinfo.cpp index c3e5b5445..dc2d07740 100644 --- a/src/core/api/qwebengineurlrequestinfo.cpp +++ b/src/core/api/qwebengineurlrequestinfo.cpp @@ -96,8 +96,8 @@ ASSERT_ENUMS_MATCH(QtWebEngineCore::WebContentsAdapterClient::OtherNavigation, Q interceptor on the profile enables intercepting, blocking, and modifying URL requests before they reach the networking stack of Chromium. - You can install the interceptor on a profile via QWebEngineProfile::setRequestInterceptor() - or QQuickWebEngineProfile::setRequestInterceptor(). + You can install the interceptor on a profile via QWebEngineProfile::setUrlRequestInterceptor() + or QQuickWebEngineProfile::setUrlRequestInterceptor(). When using the \l{Qt WebEngine Widgets Module}, \l{QWebEnginePage::acceptNavigationRequest()} offers further options to accept or block requests. @@ -115,11 +115,7 @@ ASSERT_ENUMS_MATCH(QtWebEngineCore::WebContentsAdapterClient::OtherNavigation, Q \fn void QWebEngineUrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info) Reimplementing this virtual function makes it possible to intercept URL - requests. For interceptors installed on a QWebEngineProfile, the function is executed - on the I/O thread, and thus it may not be thread-safe to interact with pages. If the - interceptor was installed on a QWebEnginePage, the function is executed on the main - application thread, and can safely interact with other user classes. Both versions will - be stalling the URL request until handled. + requests. This method will be stalling the URL request until handled. \a info contains the information about the URL request and will track internally whether its members have been altered. diff --git a/src/core/api/qwebengineurlrequestinterceptor.h b/src/core/api/qwebengineurlrequestinterceptor.h index dc2a15ee3..2b07681ca 100644 --- a/src/core/api/qwebengineurlrequestinterceptor.h +++ b/src/core/api/qwebengineurlrequestinterceptor.h @@ -55,7 +55,7 @@ class QWEBENGINECORE_EXPORT QWebEngineUrlRequestInterceptor : public QObject Q_OBJECT Q_DISABLE_COPY(QWebEngineUrlRequestInterceptor) public: - explicit QWebEngineUrlRequestInterceptor(QObject *p = Q_NULLPTR) + explicit QWebEngineUrlRequestInterceptor(QObject *p = nullptr) : QObject (p) { } |