diff options
-rw-r--r-- | src/webengine/api/qquickwebenginesettings.cpp | 4 | ||||
-rw-r--r-- | src/webengine/api/qquickwebenginesettings_p.h | 4 | ||||
-rw-r--r-- | src/webengine/plugin/plugin.cpp | 1 | ||||
-rw-r--r-- | src/webengine/plugin/plugin.pro | 2 | ||||
-rw-r--r-- | src/webengine/plugin/plugins.qmltypes | 23 | ||||
-rw-r--r-- | src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc | 7 | ||||
-rw-r--r-- | tests/auto/widgets/qwebengineschemes/BLACKLIST | 0 | ||||
-rw-r--r-- | tests/auto/widgets/qwebengineschemes/qwebengineschemes.pro | 3 | ||||
-rw-r--r-- | tests/auto/widgets/qwebengineschemes/tst_qwebengineschemes.cpp | 110 | ||||
-rw-r--r-- | tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp | 69 | ||||
-rw-r--r-- | tests/auto/widgets/widgets.pro | 6 |
11 files changed, 149 insertions, 80 deletions
diff --git a/src/webengine/api/qquickwebenginesettings.cpp b/src/webengine/api/qquickwebenginesettings.cpp index fa73af8b2..71af00d30 100644 --- a/src/webengine/api/qquickwebenginesettings.cpp +++ b/src/webengine/api/qquickwebenginesettings.cpp @@ -74,7 +74,7 @@ QQuickWebEngineSettings::~QQuickWebEngineSettings() /*! \enum QQuickWebEngineSettings::UnknownUrlSchemePolicy - \since WebEngine 1.6 + \since WebEngine 1.7 This enum describes how navigation requests to URLs with unknown schemes are handled. @@ -417,7 +417,7 @@ ASSERT_ENUMS_MATCH(QQuickWebEngineSettings::AllowAllUnknownUrlSchemes, WebEngine /*! \qmlproperty WebEngineSettings::UnknownUrlSchemePolicy WebEngineSettings::unknownUrlSchemePolicy - \since QtWebEngine 1.6 + \since QtWebEngine 1.7 Specifies how navigation requests to URLs with unknown schemes are handled. Default is \l{QWebEngineSettings::UnknownUrlSchemePolicy}{WebEngineSettings.AllowUnknownUrlSchemesFromUserInteraction}. diff --git a/src/webengine/api/qquickwebenginesettings_p.h b/src/webengine/api/qquickwebenginesettings_p.h index 8a405fcd3..6e0900c58 100644 --- a/src/webengine/api/qquickwebenginesettings_p.h +++ b/src/webengine/api/qquickwebenginesettings_p.h @@ -88,7 +88,7 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineSettings : public QObject { Q_PROPERTY(bool allowGeolocationOnInsecureOrigins READ allowGeolocationOnInsecureOrigins WRITE setAllowGeolocationOnInsecureOrigins NOTIFY allowGeolocationOnInsecureOriginsChanged REVISION 4 FINAL) Q_PROPERTY(bool allowWindowActivationFromJavaScript READ allowWindowActivationFromJavaScript WRITE setAllowWindowActivationFromJavaScript NOTIFY allowWindowActivationFromJavaScriptChanged REVISION 5 FINAL) Q_PROPERTY(bool showScrollBars READ showScrollBars WRITE setShowScrollBars NOTIFY showScrollBarsChanged REVISION 5 FINAL) - Q_PROPERTY(UnknownUrlSchemePolicy unknownUrlSchemePolicy READ unknownUrlSchemePolicy WRITE setUnknownUrlSchemePolicy NOTIFY unknownUrlSchemePolicyChanged REVISION 5 FINAL) + Q_PROPERTY(UnknownUrlSchemePolicy unknownUrlSchemePolicy READ unknownUrlSchemePolicy WRITE setUnknownUrlSchemePolicy NOTIFY unknownUrlSchemePolicyChanged REVISION 6 FINAL) public: enum UnknownUrlSchemePolicy { @@ -181,7 +181,7 @@ signals: Q_REVISION(4) void allowGeolocationOnInsecureOriginsChanged(); Q_REVISION(5) void allowWindowActivationFromJavaScriptChanged(); Q_REVISION(5) void showScrollBarsChanged(); - Q_REVISION(5) void unknownUrlSchemePolicyChanged(); + Q_REVISION(6) void unknownUrlSchemePolicyChanged(); private: explicit QQuickWebEngineSettings(QQuickWebEngineSettings *parentSettings = 0); diff --git a/src/webengine/plugin/plugin.cpp b/src/webengine/plugin/plugin.cpp index 077762352..1568adfbe 100644 --- a/src/webengine/plugin/plugin.cpp +++ b/src/webengine/plugin/plugin.cpp @@ -113,6 +113,7 @@ public: qmlRegisterUncreatableType<QQuickWebEngineSettings, 3>(uri, 1, 4, "WebEngineSettings", tr("Cannot create a separate instance of WebEngineSettings")); qmlRegisterUncreatableType<QQuickWebEngineSettings, 4>(uri, 1, 5, "WebEngineSettings", tr("Cannot create a separate instance of WebEngineSettings")); qmlRegisterUncreatableType<QQuickWebEngineSettings, 5>(uri, 1, 6, "WebEngineSettings", tr("Cannot create a separate instance of WebEngineSettings")); + qmlRegisterUncreatableType<QQuickWebEngineSettings, 6>(uri, 1, 7, "WebEngineSettings", tr("Cannot create a separate instance of WebEngineSettings")); qmlRegisterSingletonType<QQuickWebEngineSingleton>(uri, 1, 1, "WebEngine", webEngineSingletonProvider); qmlRegisterUncreatableType<QQuickWebEngineHistory>(uri, 1, 1, "NavigationHistory", tr("Cannot create a separate instance of NavigationHistory")); diff --git a/src/webengine/plugin/plugin.pro b/src/webengine/plugin/plugin.pro index 1f9ef00c5..84b497e34 100644 --- a/src/webengine/plugin/plugin.pro +++ b/src/webengine/plugin/plugin.pro @@ -1,7 +1,7 @@ CXX_MODULE = qml TARGET = qtwebengineplugin TARGETPATH = QtWebEngine -IMPORT_VERSION = 1.6 +IMPORT_VERSION = 1.7 QT += webengine qml quick QT_PRIVATE += webengine-private diff --git a/src/webengine/plugin/plugins.qmltypes b/src/webengine/plugin/plugins.qmltypes index e8ec1fa7a..b57aa4498 100644 --- a/src/webengine/plugin/plugins.qmltypes +++ b/src/webengine/plugin/plugins.qmltypes @@ -4,7 +4,7 @@ import QtQuick.tooling 1.2 // It is used for QML tooling purposes only. // // This file was auto-generated by: -// 'qmlplugindump -defaultplatform -dependencies dependencies.json -nonrelocatable QtWebEngine 1.6' +// 'qmlplugindump -defaultplatform -dependencies dependencies.json -nonrelocatable QtWebEngine 1.7' Module { dependencies: ["QtQuick 2.6"] @@ -432,6 +432,16 @@ Module { Method { name: "clearHttpCache"; revision: 2 } } Component { + name: "QQuickWebEngineQuotaPermissionRequest" + exports: ["QtWebEngine/QuotaPermissionRequest 1.7"] + isCreatable: false + exportMetaObjectRevisions: [0] + Property { name: "origin"; type: "QUrl"; isReadonly: true } + Property { name: "requestedSize"; type: "qlonglong"; isReadonly: true } + Method { name: "accept" } + Method { name: "reject" } + } + Component { name: "QQuickWebEngineScript" prototype: "QObject" exports: ["QtWebEngine/WebEngineScript 1.1"] @@ -553,7 +563,8 @@ Module { Property { name: "allowRunningInsecureContent"; revision: 3; type: "bool" } Property { name: "allowGeolocationOnInsecureOrigins"; revision: 4; type: "bool" } Property { name: "allowWindowActivationFromJavaScript"; revision: 5; type: "bool" } - Property { name: "unknownUrlSchemePolicy"; revision: 5; type: "UnknownUrlSchemePolicy" } + Property { name: "showScrollBars"; revision: 5; type: "bool" } + Property { name: "unknownUrlSchemePolicy"; revision: 6; type: "UnknownUrlSchemePolicy" } Signal { name: "fullScreenSupportEnabledChanged"; revision: 1 } Signal { name: "screenCaptureEnabledChanged"; revision: 2 } Signal { name: "webGLEnabledChanged"; revision: 2 } @@ -565,7 +576,8 @@ Module { Signal { name: "allowRunningInsecureContentChanged"; revision: 3 } Signal { name: "allowGeolocationOnInsecureOriginsChanged"; revision: 4 } Signal { name: "allowWindowActivationFromJavaScriptChanged"; revision: 5 } - Signal { name: "unknownUrlSchemePolicyChanged"; revision: 5 } + Signal { name: "showScrollBarsChanged"; revision: 5 } + Signal { name: "unknownUrlSchemePolicyChanged"; revision: 6 } } Component { name: "QQuickWebEngineSingleton" @@ -1039,6 +1051,11 @@ Module { Parameter { name: "filePath"; type: "string" } Parameter { name: "success"; type: "bool" } } + Signal { + name: "quotaPermissionRequested" + revision: 7 + Parameter { name: "request"; type: "QQuickWebEngineQuotaPermissionRequest" } + } Method { name: "runJavaScript" Parameter { type: "string" } diff --git a/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc b/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc index facc0e8e6..fb5ed019e 100644 --- a/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc +++ b/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc @@ -172,7 +172,7 @@ /*! \enum QWebEngineSettings::UnknownUrlSchemePolicy - \since Qt 5.10 + \since Qt 5.11 This enum describes how navigation requests to URLs with unknown schemes are handled. @@ -184,6 +184,8 @@ from JavaScript) are suppressed. \value AllowAllUnknownUrlSchemes Allows all navigation requests to URLs with unknown schemes. + + \sa unknownUrlSchemePolicy setUnknownUrlSchemePolicy resetUnknownUrlSchemePolicy */ /*! @@ -240,6 +242,7 @@ /*! \fn QWebEngineSettings::UnknownUrlSchemePolicy QWebEngineSettings::unknownUrlSchemePolicy() const + \since Qt 5.11 Returns the currently selected policy for handling navigation requests to URLs with unknown schemes. Default is \l{QWebEngineSettings::AllowUnknownUrlSchemesFromUserInteraction}. \sa setUnknownUrlSchemePolicy resetUnknownUrlSchemePolicy @@ -247,6 +250,7 @@ /*! \fn void QWebEngineSettings::setUnknownUrlSchemePolicy(QWebEngineSettings::UnknownUrlSchemePolicy policy) + \since Qt 5.11 Sets the policy for handling navigation requests to URLs with unknown schemes to \a policy. Default is \l{QWebEngineSettings::AllowUnknownUrlSchemesFromUserInteraction}. \sa unknownUrlSchemePolicy resetUnknownUrlSchemePolicy @@ -254,6 +258,7 @@ /*! \fn void QWebEngineSettings::resetUnknownUrlSchemePolicy() + \since Qt 5.11 Removes the policy for handling navigation requests to URLs with unknown schemes. \sa unknownUrlSchemePolicy setUnknownUrlSchemePolicy */ diff --git a/tests/auto/widgets/qwebengineschemes/BLACKLIST b/tests/auto/widgets/qwebengineschemes/BLACKLIST new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/auto/widgets/qwebengineschemes/BLACKLIST diff --git a/tests/auto/widgets/qwebengineschemes/qwebengineschemes.pro b/tests/auto/widgets/qwebengineschemes/qwebengineschemes.pro new file mode 100644 index 000000000..e56bbe8f7 --- /dev/null +++ b/tests/auto/widgets/qwebengineschemes/qwebengineschemes.pro @@ -0,0 +1,3 @@ +include(../tests.pri) +exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc +QT *= core-private gui-private diff --git a/tests/auto/widgets/qwebengineschemes/tst_qwebengineschemes.cpp b/tests/auto/widgets/qwebengineschemes/tst_qwebengineschemes.cpp new file mode 100644 index 000000000..09d495ad5 --- /dev/null +++ b/tests/auto/widgets/qwebengineschemes/tst_qwebengineschemes.cpp @@ -0,0 +1,110 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWebEngine module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtTest/QtTest> + +#include <qwebengineview.h> +#include <qwebenginepage.h> +#include <qwebengineprofile.h> +#include <qwebenginesettings.h> + +class tst_QWebEngineSchemes : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void unknownUrlSchemePolicy(); +}; + +class AcceptNavigationRequestHandler : public QWebEnginePage +{ +public: + AcceptNavigationRequestHandler(QObject* parent = nullptr) + : QWebEnginePage(parent) + { + } + int acceptNavigationRequestCalls = 0; + bool acceptNavigationRequest(const QUrl &/*url*/, NavigationType /*type*/, bool /*isMainFrame*/) override + { + this->acceptNavigationRequestCalls++; + return false; + } +}; + +void tst_QWebEngineSchemes::unknownUrlSchemePolicy() +{ + QWebEngineView view; + AcceptNavigationRequestHandler page; + view.setPage(&page); + view.resize(400, 40); + view.show(); + QTest::qWaitForWindowExposed(&view); + QWebEngineSettings *settings = view.page()->profile()->settings(); + settings->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled, true); + QSignalSpy loadFinishedSpy(&view, &QWebEngineView::loadFinished); + + QWebEngineSettings::UnknownUrlSchemePolicy policies[6] = {QWebEngineSettings::DisallowUnknownUrlSchemes, + QWebEngineSettings::DisallowUnknownUrlSchemes, + QWebEngineSettings::AllowUnknownUrlSchemesFromUserInteraction, + QWebEngineSettings::AllowUnknownUrlSchemesFromUserInteraction, + QWebEngineSettings::AllowAllUnknownUrlSchemes, + QWebEngineSettings::AllowAllUnknownUrlSchemes}; + // even iterations are for navigation-requests from javascript, + // odd iterations are for navigations-requests from user-interaction + for (int i = 0; i < 8; i++) { + if (i <= 5) + settings->setUnknownUrlSchemePolicy(policies[i]); + else + settings->resetUnknownUrlSchemePolicy(); + loadFinishedSpy.clear(); + page.acceptNavigationRequestCalls = 0; + bool shouldAccept; + + if (i % 2 == 0) { // navigation request coming from javascript + shouldAccept = (4 <= i && i <= 5); // only case AllowAllUnknownUrlSchemes + view.setHtml("<html><script>setTimeout(function(){ window.location.href='nonexistentscheme://somewhere'; }, 10);</script><body>testing...</body></html>"); + } else { // navigation request coming from user interaction + shouldAccept = (2 <= i); // all cases except DisallowUnknownUrlSchemes + view.setHtml("<html><body><a id='nonexlink' href='nonexistentscheme://somewhere'>nonexistentscheme://somewhere</a></body></html>"); + QTRY_COMPARE_WITH_TIMEOUT(loadFinishedSpy.size(), 1, 30000); + // focus and trigger the link + view.page()->runJavaScript("document.getElementById('nonexlink').focus();", [&view](const QVariant &result) { + Q_UNUSED(result); + QTest::sendKeyEvent(QTest::Press, view.focusProxy(), Qt::Key_Return, QString("\r"), Qt::NoModifier); + QTest::sendKeyEvent(QTest::Release, view.focusProxy(), Qt::Key_Return, QString("\r"), Qt::NoModifier); + }); + } + + bool errorPageEnabled = settings->testAttribute(QWebEngineSettings::ErrorPageEnabled); + QTRY_COMPARE_WITH_TIMEOUT(loadFinishedSpy.size(), 2 + (errorPageEnabled ? 1 : 0), 30000); + QCOMPARE(page.acceptNavigationRequestCalls, shouldAccept ? 1 : 0); + } +} + +QTEST_MAIN(tst_QWebEngineSchemes) +#include "tst_qwebengineschemes.moc" diff --git a/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp b/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp index 09e1b73c9..5cbcf4ec0 100644 --- a/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp +++ b/tests/auto/widgets/qwebenginesettings/tst_qwebenginesettings.cpp @@ -19,8 +19,6 @@ #include <QtTest/QtTest> -#include <qwebengineview.h> -#include <qwebenginepage.h> #include <qwebengineprofile.h> #include <qwebenginesettings.h> @@ -31,7 +29,6 @@ private Q_SLOTS: void resetAttributes(); void defaultFontFamily_data(); void defaultFontFamily(); - void unknownUrlSchemePolicy(); }; void tst_QWebEngineSettings::resetAttributes() @@ -88,72 +85,6 @@ void tst_QWebEngineSettings::defaultFontFamily() QVERIFY(!settings->fontFamily(static_cast<QWebEngineSettings::FontFamily>(fontFamily)).isEmpty()); } - -class AcceptNavigationRequestHandler : public QWebEnginePage -{ -public: - AcceptNavigationRequestHandler(QObject* parent = nullptr) - : QWebEnginePage(parent) - { - } - int acceptNavigationRequestCalls = 0; - bool acceptNavigationRequest(const QUrl &/*url*/, NavigationType /*type*/, bool /*isMainFrame*/) override - { - this->acceptNavigationRequestCalls++; - return false; - } -}; - -void tst_QWebEngineSettings::unknownUrlSchemePolicy() -{ - QWebEngineView view; - AcceptNavigationRequestHandler page; - view.setPage(&page); - view.resize(400, 40); - view.show(); - QTest::qWaitForWindowExposed(&view); - QWebEngineSettings *settings = view.page()->profile()->settings(); - settings->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled, true); - QSignalSpy loadFinishedSpy(&view, &QWebEngineView::loadFinished); - - QWebEngineSettings::UnknownUrlSchemePolicy policies[6] = {QWebEngineSettings::DisallowUnknownUrlSchemes, - QWebEngineSettings::DisallowUnknownUrlSchemes, - QWebEngineSettings::AllowUnknownUrlSchemesFromUserInteraction, - QWebEngineSettings::AllowUnknownUrlSchemesFromUserInteraction, - QWebEngineSettings::AllowAllUnknownUrlSchemes, - QWebEngineSettings::AllowAllUnknownUrlSchemes}; - // even iterations are for navigation-requests from javascript, - // odd iterations are for navigations-requests from user-interaction - for (int i = 0; i < 8; i++) { - if (i <= 5) - settings->setUnknownUrlSchemePolicy(policies[i]); - else - settings->resetUnknownUrlSchemePolicy(); - loadFinishedSpy.clear(); - page.acceptNavigationRequestCalls = 0; - bool shouldAccept; - - if (i % 2 == 0) { // navigation request coming from javascript - shouldAccept = (4 <= i && i <= 5); // only case AllowAllUnknownUrlSchemes - view.setHtml("<html><script>setTimeout(function(){ window.location.href='nonexistentscheme://somewhere'; }, 10);</script><body>testing...</body></html>"); - } else { // navigation request coming from user interaction - shouldAccept = (2 <= i); // all cases except DisallowUnknownUrlSchemes - view.setHtml("<html><body><a id='nonexlink' href='nonexistentscheme://somewhere'>nonexistentscheme://somewhere</a></body></html>"); - QTRY_COMPARE_WITH_TIMEOUT(loadFinishedSpy.size(), 1, 30000); - // focus and trigger the link - view.page()->runJavaScript("document.getElementById('nonexlink').focus();", [&view](const QVariant &result) { - Q_UNUSED(result); - QTest::sendKeyEvent(QTest::Press, view.focusProxy(), Qt::Key_Return, QString("\r"), Qt::NoModifier); - QTest::sendKeyEvent(QTest::Release, view.focusProxy(), Qt::Key_Return, QString("\r"), Qt::NoModifier); - }); - } - - bool errorPageEnabled = settings->testAttribute(QWebEngineSettings::ErrorPageEnabled); - QTRY_COMPARE_WITH_TIMEOUT(loadFinishedSpy.size(), 2 + (errorPageEnabled ? 1 : 0), 30000); - QCOMPARE(page.acceptNavigationRequestCalls, shouldAccept ? 1 : 0); - } -} - QTEST_MAIN(tst_QWebEngineSettings) #include "tst_qwebenginesettings.moc" diff --git a/tests/auto/widgets/widgets.pro b/tests/auto/widgets/widgets.pro index 60e5cc11f..e007df711 100644 --- a/tests/auto/widgets/widgets.pro +++ b/tests/auto/widgets/widgets.pro @@ -13,6 +13,7 @@ SUBDIRS += \ qwebenginehistoryinterface \ qwebengineinspector \ qwebengineprofile \ + qwebengineschemes \ qwebenginescript \ qwebenginesettings \ qwebengineview @@ -28,5 +29,6 @@ qtConfig(spellchecker):!cross_compile { # QTBUG-60268 boot2qt: SUBDIRS -= qwebengineaccessibility qwebenginedefaultsurfaceformat \ qwebenginefaviconmanager qwebenginepage qwebenginehistory \ - qwebengineprofile qwebenginescript qwebengineview \ - qwebenginedownloads + qwebengineprofile qwebengineschemes qwebenginescript \ + qwebengineview qwebenginedownloads + |