summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantin Tokarev <annulen@yandex.ru>2017-04-03 20:43:59 +0300
committerKonstantin Tokarev <annulen@yandex.ru>2017-04-03 22:18:34 +0000
commit689348d71bd31adc669a67f9f840d31b63fff333 (patch)
tree48163a88be9ad05408686541629999c22efb309c
parent64f830beec03cd4ccf5ad586f2db21d38dcd85b2 (diff)
[QML] evaluateJavaScript should preserve null values in result
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>
-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 ea903f328..b4576af36 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 {
'{"level":"1","child":{"level":2}}')
}
+ 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"