diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-04-27 10:03:12 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-04-27 10:03:43 +0200 |
commit | 10e66c6dd0b8a8dd17252d6408c13b689fac6995 (patch) | |
tree | fbdddb33a818b5495b24f3949f7406b0b916e78c /src/webenginewidgets | |
parent | d0852f90a24673ccc9ef0b93e224ba37b674644d (diff) | |
parent | 75412200db05ddc5ee2b9aea367b580d8b0c438e (diff) |
Merge remote-tracking branch 'origin/5.15' into dev
Conflicts:
configure.pri
src/pdf/api/qpdfpagerenderer.h
Change-Id: I7e68277080e29238bbfe8511539ea75b2db89489
Diffstat (limited to 'src/webenginewidgets')
7 files changed, 53 insertions, 39 deletions
diff --git a/src/webenginewidgets/api/qwebenginecertificateerror.cpp b/src/webenginewidgets/api/qwebenginecertificateerror.cpp index 3f20b6483..d86019af8 100644 --- a/src/webenginewidgets/api/qwebenginecertificateerror.cpp +++ b/src/webenginewidgets/api/qwebenginecertificateerror.cpp @@ -147,6 +147,9 @@ QWebEngineCertificateError::~QWebEngineCertificateError() \value CertificateValidityTooLong The certificate has a validity period that is too long. (Added in Qt 5.7) \value CertificateTransparencyRequired Certificate Transparency was required for this connection, but the server did not provide CT information that complied with the policy. (Added in Qt 5.8) + \value CertificateKnownInterceptionBlocked The certificate is known to be + used for interception by an entity other the device owner. (Added in + 5.15) */ /*! diff --git a/src/webenginewidgets/api/qwebenginecertificateerror.h b/src/webenginewidgets/api/qwebenginecertificateerror.h index d3a19edfc..a32f7ab8e 100644 --- a/src/webenginewidgets/api/qwebenginecertificateerror.h +++ b/src/webenginewidgets/api/qwebenginecertificateerror.h @@ -73,6 +73,7 @@ public: CertificateNameConstraintViolation = -212, CertificateValidityTooLong = -213, CertificateTransparencyRequired = -214, + CertificateKnownInterceptionBlocked = -217, }; Error error() const; diff --git a/src/webenginewidgets/api/qwebenginedownloaditem.h b/src/webenginewidgets/api/qwebenginedownloaditem.h index 8d98799a3..094054079 100644 --- a/src/webenginewidgets/api/qwebenginedownloaditem.h +++ b/src/webenginewidgets/api/qwebenginedownloaditem.h @@ -119,10 +119,17 @@ public: QUrl url() const; QString mimeType() const; #if QT_DEPRECATED_SINCE(5, 14) +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) QT_DEPRECATED_VERSION_X(5, 14, "Use downloadDirectory() and downloadFileName() instead") QString path() const; QT_DEPRECATED_VERSION_X(5, 14, "Use setDownloadDirectory() and setDownloadFileName() instead") void setPath(QString path); +#else + QT_DEPRECATED_X("Use downloadDirectory() and downloadFileName() instead") + QString path() const; + QT_DEPRECATED_X("Use setDownloadDirectory() and setDownloadFileName() instead") + void setPath(QString path); +#endif #endif bool isFinished() const; bool isPaused() const; diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index ad6196850..b267c5dd1 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -163,7 +163,6 @@ QWebEnginePagePrivate::QWebEnginePagePrivate(QWebEngineProfile *_profile) , webChannelWorldId(QWebEngineScript::MainWorld) , defaultAudioMuted(false) , defaultZoomFactor(1.0) - , requestInterceptor(nullptr) #if QT_CONFIG(webengine_printing_and_pdf) , currentPrinter(nullptr) #endif @@ -185,8 +184,6 @@ QWebEnginePagePrivate::QWebEnginePagePrivate(QWebEngineProfile *_profile) QWebEnginePagePrivate::~QWebEnginePagePrivate() { - if (requestInterceptor) - profile->d_ptr->profileAdapter()->removePageRequestInterceptor(); delete history; delete settings; profile->d_ptr->removeWebContentsAdapterClient(this); @@ -537,10 +534,24 @@ void QWebEnginePagePrivate::runMediaAccessPermissionRequest(const QUrl &security Q_EMIT q->featurePermissionRequested(securityOrigin, feature); } -void QWebEnginePagePrivate::runGeolocationPermissionRequest(const QUrl &securityOrigin) +static QWebEnginePage::Feature toFeature(QtWebEngineCore::ProfileAdapter::PermissionType type) +{ + switch (type) { + case QtWebEngineCore::ProfileAdapter::NotificationPermission: + return QWebEnginePage::Notifications; + case QtWebEngineCore::ProfileAdapter::GeolocationPermission: + return QWebEnginePage::Geolocation; + default: + break; + } + Q_UNREACHABLE(); + return QWebEnginePage::Feature(-1); +} + +void QWebEnginePagePrivate::runFeaturePermissionRequest(QtWebEngineCore::ProfileAdapter::PermissionType permission, const QUrl &securityOrigin) { Q_Q(QWebEnginePage); - Q_EMIT q->featurePermissionRequested(securityOrigin, QWebEnginePage::Geolocation); + Q_EMIT q->featurePermissionRequested(securityOrigin, toFeature(permission)); } void QWebEnginePagePrivate::runMouseLockPermissionRequest(const QUrl &securityOrigin) @@ -561,12 +572,6 @@ void QWebEnginePagePrivate::runRegisterProtocolHandlerRequest(QWebEngineRegister Q_EMIT q->registerProtocolHandlerRequested(request); } -void QWebEnginePagePrivate::runUserNotificationPermissionRequest(const QUrl &securityOrigin) -{ - Q_Q(QWebEnginePage); - Q_EMIT q->featurePermissionRequested(securityOrigin, QWebEnginePage::Notifications); -} - QObject *QWebEnginePagePrivate::accessibilityParentObject() { return view; @@ -1908,20 +1913,7 @@ void QWebEnginePagePrivate::visibleChanged(bool visible) void QWebEnginePage::setUrlRequestInterceptor(QWebEngineUrlRequestInterceptor *interceptor) { Q_D(QWebEnginePage); - bool hadInterceptorChanged = bool(d->requestInterceptor) != bool(interceptor); - d->requestInterceptor = interceptor; - if (hadInterceptorChanged) { - if (interceptor) - d->profile->d_ptr->profileAdapter()->addPageRequestInterceptor(); - else - d->profile->d_ptr->profileAdapter()->removePageRequestInterceptor(); - } -} - -void QWebEnginePagePrivate::interceptRequest(QWebEngineUrlRequestInfo &info) -{ - if (requestInterceptor) - requestInterceptor->interceptRequest(info); + d->adapter->setRequestInterceptor(interceptor); } #if QT_CONFIG(menu) @@ -1976,13 +1968,13 @@ void QWebEnginePage::setFeaturePermission(const QUrl &securityOrigin, QWebEngine d->adapter->grantMediaAccessPermission(securityOrigin, WebContentsAdapterClient::MediaDesktopVideoCapture); break; case Geolocation: - d->adapter->runGeolocationRequestCallback(securityOrigin, true); + d->adapter->runFeatureRequestCallback(securityOrigin, ProfileAdapter::GeolocationPermission, true); break; case MouseLock: d->adapter->grantMouseLockPermission(true); break; case Notifications: - d->adapter->runUserNotificationRequestCallback(securityOrigin, true); + d->adapter->runFeatureRequestCallback(securityOrigin, ProfileAdapter::NotificationPermission, true); break; } } else { // if (policy == PermissionDeniedByUser) @@ -1995,13 +1987,13 @@ void QWebEnginePage::setFeaturePermission(const QUrl &securityOrigin, QWebEngine d->adapter->grantMediaAccessPermission(securityOrigin, WebContentsAdapterClient::MediaNone); break; case Geolocation: - d->adapter->runGeolocationRequestCallback(securityOrigin, false); + d->adapter->runFeatureRequestCallback(securityOrigin, ProfileAdapter::GeolocationPermission, false); break; case MouseLock: d->adapter->grantMouseLockPermission(false); break; case Notifications: - d->adapter->runUserNotificationRequestCallback(securityOrigin, false); + d->adapter->runFeatureRequestCallback(securityOrigin, ProfileAdapter::NotificationPermission, false); break; } } @@ -2372,7 +2364,9 @@ void QWebEnginePage::javaScriptAlert(const QUrl &securityOrigin, const QString & { Q_UNUSED(securityOrigin); #if QT_CONFIG(messagebox) - QMessageBox::information(view(), QStringLiteral("Javascript Alert - %1").arg(url().toString()), msg); + QMessageBox::information(view(), + QStringLiteral("Javascript Alert - %1").arg(url().toString()), + msg.toHtmlEscaped()); #else Q_UNUSED(msg); #endif // QT_CONFIG(messagebox) @@ -2382,7 +2376,11 @@ bool QWebEnginePage::javaScriptConfirm(const QUrl &securityOrigin, const QString { Q_UNUSED(securityOrigin); #if QT_CONFIG(messagebox) - return (QMessageBox::information(view(), QStringLiteral("Javascript Confirm - %1").arg(url().toString()), msg, QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok); + return (QMessageBox::information(view(), + QStringLiteral("Javascript Confirm - %1").arg(url().toString()), + msg.toHtmlEscaped(), + QMessageBox::Ok, + QMessageBox::Cancel) == QMessageBox::Ok); #else Q_UNUSED(msg); return false; @@ -2395,7 +2393,12 @@ bool QWebEnginePage::javaScriptPrompt(const QUrl &securityOrigin, const QString #if QT_CONFIG(inputdialog) bool ret = false; if (result) - *result = QInputDialog::getText(view(), QStringLiteral("Javascript Prompt - %1").arg(url().toString()), msg, QLineEdit::Normal, defaultValue, &ret); + *result = QInputDialog::getText(view(), + QStringLiteral("Javascript Prompt - %1").arg(url().toString()), + msg.toHtmlEscaped(), + QLineEdit::Normal, + defaultValue.toHtmlEscaped(), + &ret); return ret; #else Q_UNUSED(msg); diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h index 7fdc811e2..f37413b8e 100644 --- a/src/webenginewidgets/api/qwebenginepage_p.h +++ b/src/webenginewidgets/api/qwebenginepage_p.h @@ -136,8 +136,7 @@ public: void authenticationRequired(QSharedPointer<QtWebEngineCore::AuthenticationDialogController>) override; void releaseProfile() override; void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) override; - void runGeolocationPermissionRequest(const QUrl &securityOrigin) override; - void runUserNotificationPermissionRequest(const QUrl &securityOrigin) override; + void runFeaturePermissionRequest(QtWebEngineCore::ProfileAdapter::PermissionType permission, const QUrl &securityOrigin) override; void runMouseLockPermissionRequest(const QUrl &securityOrigin) override; void runQuotaRequest(QWebEngineQuotaRequest) override; void runRegisterProtocolHandlerRequest(QWebEngineRegisterProtocolHandlerRequest) override; @@ -162,7 +161,6 @@ public: void hideTouchSelectionMenu() override { } const QObject *holdingQObject() const override; ClientType clientType() override { return QtWebEngineCore::WebContentsAdapterClient::WidgetsClient; } - void interceptRequest(QWebEngineUrlRequestInfo &) override; void widgetChanged(QtWebEngineCore::RenderWidgetHostViewQtDelegate *newWidget) override; void findTextFinished(const QWebEngineFindTextResult &result) override; @@ -203,7 +201,6 @@ public: bool defaultAudioMuted; qreal defaultZoomFactor; QTimer wasShownTimer; - QWebEngineUrlRequestInterceptor *requestInterceptor; QtWebEngineCore::RenderWidgetHostViewQtDelegateWidget *widget = nullptr; mutable QtWebEngineCore::CallbackDirectory m_callbacks; diff --git a/src/webenginewidgets/api/qwebengineprofile.cpp b/src/webenginewidgets/api/qwebengineprofile.cpp index 470babf8f..4c49be709 100644 --- a/src/webenginewidgets/api/qwebengineprofile.cpp +++ b/src/webenginewidgets/api/qwebengineprofile.cpp @@ -596,6 +596,7 @@ QWebEngineCookieStore* QWebEngineProfile::cookieStore() Interceptors installed with this method will call QWebEngineUrlRequestInterceptor::interceptRequest on the I/O thread. Therefore the user has to provide thread-safe interaction with the other user classes. + For a duration of this call ui thread is blocked. Use setUrlRequestInterceptor instead. \since 5.6 diff --git a/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc b/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc index 7043469a0..b83da9440 100644 --- a/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc +++ b/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc @@ -174,9 +174,11 @@ Enabled by default. (Added in Qt 5.10) \value PlaybackRequiresUserGesture Inhibits playback of media content until the user interacts with - the page. This is similar to how Chrome on Android behaves, while - the default behavior when it is disabled is similar to Chrome on desktops. - (Added in Qt 5.11) + the page. By default, WebEngine uses Chromium settings, as described + in \l {Autoplay Policy Changes}. This is similar to how Chrome on + Android behaves, while the default behavior when it is disabled is + similar to Chrome on desktops. To overwrite the default behavior, + disable this setting. (Added in Qt 5.11) \value JavascriptCanPaste Enables JavaScript \c{execCommand("paste")}. This also requires enabling JavascriptCanAccessClipboard. |