summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Tokarev <annulen@yandex.ru>2017-04-03 20:43:59 +0300
committerKonstantin Tokarev <annulen@yandex.ru>2017-04-04 11:24:48 +0000
commit95a78c9f04d9a3f954477855f84180ced556a480 (patch)
treec2ec9e8200aa71912f128cf66037d893ad922f03
parent8f0971a1425e5d322af576581e225e4d0e6e5313 (diff)
downloadqtwebkit-5.6.3.tar.gz
[QML] evaluateJavaScript should preserve null values in result5.6.3
We should not convert null to undefined when returning JS values from JSC to QJSEngine. Change-Id: I20f5638fe9104341e1a0878fdbdbc49e5fa8d2e1 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> (cherry picked from commit 689348d71bd31adc669a67f9f840d31b63fff333)
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp5
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_evaluateJavaScript.qml36
2 files changed, 41 insertions, 0 deletions
diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp
index bc2d5d21c..5300a40ff 100644
--- a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp
@@ -131,6 +131,11 @@ static QJSValue buildQJSValue(QJSEngine* engine, JSGlobalContextRef context, JSV
return var;
switch (JSValueGetType(context, value)) {
+ case kJSTypeUndefined:
+ break;
+ case kJSTypeNull:
+ var = QJSValue(QJSValue::NullValue);
+ break;
case kJSTypeBoolean:
var = QJSValue(JSValueToBoolean(context, value));
break;
diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_evaluateJavaScript.qml b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_evaluateJavaScript.qml
index 720b4cd04..f533efa34 100644
--- a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_evaluateJavaScript.qml
+++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_evaluateJavaScript.qml
@@ -81,6 +81,42 @@ Item {
'{"child":{"level":2},"level":"1"}')
}
+ function test_undefinedValue() {
+ resultSpy.clear()
+ webView.url = "about:blank"
+ verify(webView.waitForLoadSucceeded())
+
+ webView.experimental.evaluateJavaScript(
+ "(function() { })()",
+
+ function(result) {
+ webView.lastResult = result
+ })
+
+ resultSpy.wait()
+ verify(typeof webView.lastResult === "undefined")
+ compare(webView.lastResult, undefined)
+ }
+
+ function test_nullValue() {
+ resultSpy.clear()
+
+ webView.url = "about:blank"
+ verify(webView.waitForLoadSucceeded())
+
+ webView.experimental.evaluateJavaScript(
+ "(function() { return { value: null } })()",
+
+ function(result) {
+ webView.lastResult = result
+ })
+
+ resultSpy.wait()
+ verify(typeof webView.lastResult === "object")
+ verify(typeof webView.lastResult.value === "object")
+ compare(webView.lastResult.value, null)
+ }
+
function test_booleanValue() {
resultSpy.clear()
webView.url = "about:blank"