diff options
author | Kai Koehne <kai.koehne@qt.io> | 2017-10-26 15:11:20 +0200 |
---|---|---|
committer | Kai Koehne <kai.koehne@qt.io> | 2018-02-02 09:57:01 +0000 |
commit | 0cc07329495a05fc5f8532c4420bd23db662fdb6 (patch) | |
tree | 6dc317f9509ed71304e57051e6da85ca66f1a072 /tests/auto/quick | |
parent | 28c9385ab3568361a53a4ea1559c1b971a44d50d (diff) |
Expose JavascriptCanPaste attribute
Expose an attribute to enable the execCommand("paste") functionality,
which is by default disabled due to security concerns.
[ChangeLog][General] Added JavaScriptCanPaste attribute that
enables JavaScript 'execCommand("paste")'.
Task-number: QTBUG-64056
Change-Id: I1a414021e020473dd15946fff91fb103d871e961
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'tests/auto/quick')
-rw-r--r-- | tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp index a64197b1c..f8f742ae1 100644 --- a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp +++ b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp @@ -31,6 +31,8 @@ #include <QScopedPointer> #include <QtCore/qelapsedtimer.h> +#include <QtGui/qclipboard.h> +#include <QtGui/qguiapplication.h> #include <QtGui/qpa/qwindowsysteminterface.h> #include <QtQml/QQmlEngine> #include <QtTest/QtTest> @@ -84,6 +86,8 @@ private Q_SLOTS: void changeLocale(); void userScripts(); + void javascriptClipboard_data(); + void javascriptClipboard(); private: inline QQuickWebEngineView *newWebEngineView(); @@ -860,5 +864,67 @@ void tst_QQuickWebEngineView::userScripts() list.clear(); } +void tst_QQuickWebEngineView::javascriptClipboard_data() +{ + QTest::addColumn<bool>("javascriptCanAccessClipboard"); + QTest::addColumn<bool>("javascriptCanPaste"); + QTest::addColumn<bool>("copyResult"); + QTest::addColumn<bool>("pasteResult"); + + QTest::newRow("default") << false << false << false << false; + QTest::newRow("canCopy") << true << false << true << false; + // paste command requires both permissions + QTest::newRow("canPaste") << false << true << false << false; + QTest::newRow("canCopyAndPaste") << true << true << true << true; +} + +void tst_QQuickWebEngineView::javascriptClipboard() +{ + QFETCH(bool, javascriptCanAccessClipboard); + QFETCH(bool, javascriptCanPaste); + QFETCH(bool, copyResult); + QFETCH(bool, pasteResult); + + // check defaults + QCOMPARE(webEngineView()->settings()->javascriptCanAccessClipboard(), false); + QCOMPARE(webEngineView()->settings()->javascriptCanPaste(), false); + + // check accessors + webEngineView()->settings()->setJavascriptCanAccessClipboard(javascriptCanAccessClipboard); + webEngineView()->settings()->setJavascriptCanPaste(javascriptCanPaste); + QCOMPARE(webEngineView()->settings()->javascriptCanAccessClipboard(), + javascriptCanAccessClipboard); + QCOMPARE(webEngineView()->settings()->javascriptCanPaste(), javascriptCanPaste); + + QQuickWebEngineView *view = webEngineView(); + view->loadHtml("<html><body>" + "<input type='text' value='OriginalText' id='myInput'/>" + "</body></html>"); + QVERIFY(waitForLoadSucceeded(view)); + + // make sure that 'OriginalText' is selected + evaluateJavaScriptSync(view, "document.getElementById('myInput').select()"); + QCOMPARE(evaluateJavaScriptSync(view, "window.getSelection().toString()").toString(), + "OriginalText"); + + // Check that the actual settings work by the + // - return value of queryCommandEnabled and + // - return value of execCommand + // - comparing the clipboard / input field + QGuiApplication::clipboard()->clear(); + QCOMPARE(evaluateJavaScriptSync(view, "document.queryCommandEnabled('copy')").toBool(), + copyResult); + QCOMPARE(evaluateJavaScriptSync(view, "document.execCommand('copy')").toBool(), copyResult); + QCOMPARE(QGuiApplication::clipboard()->text(), + (copyResult ? QString("OriginalText") : QString())); + + QGuiApplication::clipboard()->setText("AnotherText"); + QCOMPARE(evaluateJavaScriptSync(view, "document.queryCommandEnabled('paste')").toBool(), + pasteResult); + QCOMPARE(evaluateJavaScriptSync(view, "document.execCommand('paste')").toBool(), pasteResult); + QCOMPARE(evaluateJavaScriptSync(view, "document.getElementById('myInput').value").toString(), + (pasteResult ? QString("AnotherText") : QString("OriginalText"))); +} + QTEST_MAIN(tst_QQuickWebEngineView) #include "tst_qquickwebengineview.moc" |