summaryrefslogtreecommitdiffstats
path: root/tests/auto/quick
diff options
context:
space:
mode:
authorKai Koehne <kai.koehne@qt.io>2017-10-26 15:11:20 +0200
committerKai Koehne <kai.koehne@qt.io>2018-02-02 09:57:01 +0000
commit0cc07329495a05fc5f8532c4420bd23db662fdb6 (patch)
tree6dc317f9509ed71304e57051e6da85ca66f1a072 /tests/auto/quick
parent28c9385ab3568361a53a4ea1559c1b971a44d50d (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.cpp66
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"