diff options
author | Konstantin Tokarev <annulen@yandex.ru> | 2017-04-03 20:43:59 +0300 |
---|---|---|
committer | Konstantin Tokarev <annulen@yandex.ru> | 2017-04-04 11:24:48 +0000 |
commit | 95a78c9f04d9a3f954477855f84180ced556a480 (patch) | |
tree | c2ec9e8200aa71912f128cf66037d893ad922f03 | |
parent | 8f0971a1425e5d322af576581e225e4d0e6e5313 (diff) | |
download | qtwebkit-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.cpp | 5 | ||||
-rw-r--r-- | Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_evaluateJavaScript.qml | 36 |
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" |