[JSC/V8] "DOMString[]" for function return values should not be null
authortkent@chromium.org <tkent@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 15 Jun 2012 02:11:28 +0000 (02:11 +0000)
committertkent@chromium.org <tkent@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 15 Jun 2012 02:11:28 +0000 (02:11 +0000)
https://bugs.webkit.org/show_bug.cgi?id=89151

Reviewed by Kentaro Hara.

jsArray and v8Array are used for "DOMString[]", not "DOMString[]?". So
we should not return JavaScript null object.

No new tests. We have no plan to use this code in production code for
now. It will be used for window.internals functions.

* bindings/js/JSDOMBinding.cpp:
(WebCore::jsArray): For null input, returns an empty array, not null.
* bindings/v8/V8Binding.cpp:
(WebCore::v8Array): Implement DOMStringList -> JavaScript array conversion.
Like jsArray(), we don't return null object.
* bindings/v8/V8Binding.h:
(WebCore): Declare v8Array().

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@120389 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/bindings/js/JSDOMBinding.cpp
Source/WebCore/bindings/v8/V8Binding.cpp
Source/WebCore/bindings/v8/V8Binding.h

index d3000c6..a4624b6 100644 (file)
@@ -1,3 +1,24 @@
+2012-06-14  Kent Tamura  <tkent@chromium.org>
+
+        [JSC/V8] "DOMString[]" for function return values should not be null
+        https://bugs.webkit.org/show_bug.cgi?id=89151
+
+        Reviewed by Kentaro Hara.
+
+        jsArray and v8Array are used for "DOMString[]", not "DOMString[]?". So
+        we should not return JavaScript null object.
+
+        No new tests. We have no plan to use this code in production code for
+        now. It will be used for window.internals functions.
+
+        * bindings/js/JSDOMBinding.cpp:
+        (WebCore::jsArray): For null input, returns an empty array, not null.
+        * bindings/v8/V8Binding.cpp:
+        (WebCore::v8Array): Implement DOMStringList -> JavaScript array conversion.
+        Like jsArray(), we don't return null object.
+        * bindings/v8/V8Binding.h:
+        (WebCore): Declare v8Array().
+
 2012-06-14  Dale Curtis  <dalecurtis@chromium.org>
 
         Disable click/dbl-click on MediaDocument for Chromium. Fix layout test for all platforms.
index d03655e..fc17990 100644 (file)
@@ -149,11 +149,11 @@ double valueToDate(ExecState* exec, JSValue value)
 
 JSC::JSValue jsArray(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, PassRefPtr<DOMStringList> stringList)
 {
-    if (!stringList)
-        return jsNull();
     JSC::MarkedArgumentBuffer list;
-    for (unsigned i = 0; i < stringList->length(); ++i)
-        list.append(jsString(exec, stringList->item(i)));
+    if (stringList) {
+        for (unsigned i = 0; i < stringList->length(); ++i)
+            list.append(jsString(exec, stringList->item(i)));
+    }
     return JSC::constructArray(exec, globalObject, list);
 }
 
index 6e036ac..974da05 100644 (file)
@@ -212,6 +212,16 @@ AtomicString v8ValueToAtomicWebCoreString(v8::Handle<v8::Value> value)
     return v8NonStringValueToAtomicWebCoreString(value);
 }
 
+v8::Handle<v8::Value> v8Array(PassRefPtr<DOMStringList> stringList, v8::Isolate* isolate)
+{
+    if (!stringList)
+        return v8::Array::New();
+    v8::Local<v8::Array> result = v8::Array::New(stringList->length());
+    for (unsigned i = 0; i < stringList->length(); ++i)
+        result->Set(v8::Integer::New(i), v8String(stringList->item(i), isolate));
+    return result;
+}
+
 int toInt32(v8::Handle<v8::Value> value, bool& ok)
 {
     ok = true;
index 3f34249..f87e4b9 100644 (file)
@@ -315,6 +315,8 @@ namespace WebCore {
         return array;
     }
 
+    v8::Handle<v8::Value> v8Array(PassRefPtr<DOMStringList>, v8::Isolate*);
+
     template <class T>
     Vector<T> toNativeArray(v8::Handle<v8::Value> value)
     {