IndexedDB: Properties of IDBKeyRange should default to undefined
authorjsbell@chromium.org <jsbell@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 13 Sep 2012 18:05:03 +0000 (18:05 +0000)
committerjsbell@chromium.org <jsbell@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 13 Sep 2012 18:05:03 +0000 (18:05 +0000)
https://bugs.webkit.org/show_bug.cgi?id=96401

Reviewed by Adam Barth.

Source/WebCore:

Per the IndexedDB spec, properties of IDBKeyRange should be |undefined| if
not set (i.e. range.upper if created with lowerBound(), and vice versa), rather
than null.

Test: storage/indexeddb/keyrange.html

* bindings/v8/custom/V8IDBKeyCustom.cpp:
(WebCore::toV8): Since IDBKeyRange is the only place where possibly-null
keys are returned to script, change the JS value from null to undefined.
And call v8Undefined(). It's faster.
* bindings/js/custom/JSIDBKeyCustom.cpp:
(WebCore::toJS): Ditto.

LayoutTests:

Update test expectations.

* storage/indexeddb/keyrange-expected.txt:
* storage/indexeddb/resources/keyrange.js:
(checkLowerBoundKeyRange):
(checkUpperBoundKeyRange):

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

LayoutTests/ChangeLog
LayoutTests/storage/indexeddb/keyrange-expected.txt
LayoutTests/storage/indexeddb/resources/keyrange.js
Source/WebCore/ChangeLog
Source/WebCore/bindings/js/JSIDBKeyCustom.cpp
Source/WebCore/bindings/v8/custom/V8IDBKeyCustom.cpp

index 5a7892e..8d87527 100644 (file)
@@ -1,3 +1,17 @@
+2012-09-13  Joshua Bell  <jsbell@chromium.org>
+
+        IndexedDB: Properties of IDBKeyRange should default to undefined
+        https://bugs.webkit.org/show_bug.cgi?id=96401
+
+        Reviewed by Adam Barth.
+
+        Update test expectations.
+
+        * storage/indexeddb/keyrange-expected.txt:
+        * storage/indexeddb/resources/keyrange.js:
+        (checkLowerBoundKeyRange):
+        (checkUpperBoundKeyRange):
+
 2012-09-13  Lauro Neto  <lauro.neto@openbossa.org>
 
         [Qt][WK2] fast/forms/access-key-for-all-elements.html fails
index 94450e6..f59a5d0 100644 (file)
@@ -42,92 +42,92 @@ PASS keyRange.upperOpen is false
 IDBKeyRange.lowerBound(10,true)
 PASS keyRange.lower is 10
 PASS keyRange.lowerOpen is true
-PASS keyRange.upper is null
+PASS keyRange.upper is undefined.
 PASS keyRange.upperOpen is true
 IDBKeyRange.lowerBound(11,false)
 PASS keyRange.lower is 11
 PASS keyRange.lowerOpen is false
-PASS keyRange.upper is null
+PASS keyRange.upper is undefined.
 PASS keyRange.upperOpen is true
 IDBKeyRange.lowerBound(12,undefined)
 PASS keyRange.lower is 12
 PASS keyRange.lowerOpen is false
-PASS keyRange.upper is null
+PASS keyRange.upper is undefined.
 PASS keyRange.upperOpen is true
 IDBKeyRange.lowerBound(10.1,true)
 PASS keyRange.lower is 10.1
 PASS keyRange.lowerOpen is true
-PASS keyRange.upper is null
+PASS keyRange.upper is undefined.
 PASS keyRange.upperOpen is true
 IDBKeyRange.lowerBound(11.2,false)
 PASS keyRange.lower is 11.2
 PASS keyRange.lowerOpen is false
-PASS keyRange.upper is null
+PASS keyRange.upper is undefined.
 PASS keyRange.upperOpen is true
 IDBKeyRange.lowerBound(12.3,undefined)
 PASS keyRange.lower is 12.3
 PASS keyRange.lowerOpen is false
-PASS keyRange.upper is null
+PASS keyRange.upper is undefined.
 PASS keyRange.upperOpen is true
 IDBKeyRange.lowerBound('aa',true)
 PASS keyRange.lower is 'aa'
 PASS keyRange.lowerOpen is true
-PASS keyRange.upper is null
+PASS keyRange.upper is undefined.
 PASS keyRange.upperOpen is true
 IDBKeyRange.lowerBound('ab',false)
 PASS keyRange.lower is 'ab'
 PASS keyRange.lowerOpen is false
-PASS keyRange.upper is null
+PASS keyRange.upper is undefined.
 PASS keyRange.upperOpen is true
 IDBKeyRange.lowerBound('ac',undefined)
 PASS keyRange.lower is 'ac'
 PASS keyRange.lowerOpen is false
-PASS keyRange.upper is null
+PASS keyRange.upper is undefined.
 PASS keyRange.upperOpen is true
 IDBKeyRange.upperBound(20,true)
 PASS keyRange.upper is 20
 PASS keyRange.upperOpen is true
-PASS keyRange.lower is null
+PASS keyRange.lower is undefined.
 PASS keyRange.lowerOpen is true
 IDBKeyRange.upperBound(21,false)
 PASS keyRange.upper is 21
 PASS keyRange.upperOpen is false
-PASS keyRange.lower is null
+PASS keyRange.lower is undefined.
 PASS keyRange.lowerOpen is true
 IDBKeyRange.upperBound(22,undefined)
 PASS keyRange.upper is 22
 PASS keyRange.upperOpen is false
-PASS keyRange.lower is null
+PASS keyRange.lower is undefined.
 PASS keyRange.lowerOpen is true
 IDBKeyRange.upperBound(20.2,true)
 PASS keyRange.upper is 20.2
 PASS keyRange.upperOpen is true
-PASS keyRange.lower is null
+PASS keyRange.lower is undefined.
 PASS keyRange.lowerOpen is true
 IDBKeyRange.upperBound(21.3,false)
 PASS keyRange.upper is 21.3
 PASS keyRange.upperOpen is false
-PASS keyRange.lower is null
+PASS keyRange.lower is undefined.
 PASS keyRange.lowerOpen is true
 IDBKeyRange.upperBound(22.4,undefined)
 PASS keyRange.upper is 22.4
 PASS keyRange.upperOpen is false
-PASS keyRange.lower is null
+PASS keyRange.lower is undefined.
 PASS keyRange.lowerOpen is true
 IDBKeyRange.upperBound('ba',true)
 PASS keyRange.upper is 'ba'
 PASS keyRange.upperOpen is true
-PASS keyRange.lower is null
+PASS keyRange.lower is undefined.
 PASS keyRange.lowerOpen is true
 IDBKeyRange.upperBound('bb',false)
 PASS keyRange.upper is 'bb'
 PASS keyRange.upperOpen is false
-PASS keyRange.lower is null
+PASS keyRange.lower is undefined.
 PASS keyRange.lowerOpen is true
 IDBKeyRange.upperBound('bc',undefined)
 PASS keyRange.upper is 'bc'
 PASS keyRange.upperOpen is false
-PASS keyRange.lower is null
+PASS keyRange.lower is undefined.
 PASS keyRange.lowerOpen is true
 IDBKeyRange.bound(30,40, undefined, undefined)
 PASS keyRange.lower is 30
index fd9b30d..af2e3e4 100644 (file)
@@ -21,7 +21,7 @@ function checkLowerBoundKeyRange(value, open)
     if (open === undefined)
         open = false;
     shouldBe("keyRange.lowerOpen", "" + open);
-    shouldBeNull("keyRange.upper");
+    shouldBeUndefined("keyRange.upper");
     shouldBeTrue("keyRange.upperOpen");
 }
 
@@ -32,7 +32,7 @@ function checkUpperBoundKeyRange(value, open)
     if (open === undefined)
         open = false;
     shouldBe("keyRange.upperOpen", "" + open);
-    shouldBeNull("keyRange.lower");
+    shouldBeUndefined("keyRange.lower");
     shouldBeTrue("keyRange.lowerOpen");
 }
 
index 60f7af5..7a89af9 100644 (file)
@@ -1,3 +1,23 @@
+2012-09-13  Joshua Bell  <jsbell@chromium.org>
+
+        IndexedDB: Properties of IDBKeyRange should default to undefined
+        https://bugs.webkit.org/show_bug.cgi?id=96401
+
+        Reviewed by Adam Barth.
+
+        Per the IndexedDB spec, properties of IDBKeyRange should be |undefined| if
+        not set (i.e. range.upper if created with lowerBound(), and vice versa), rather
+        than null.
+
+        Test: storage/indexeddb/keyrange.html
+
+        * bindings/v8/custom/V8IDBKeyCustom.cpp:
+        (WebCore::toV8): Since IDBKeyRange is the only place where possibly-null
+        keys are returned to script, change the JS value from null to undefined.
+        And call v8Undefined(). It's faster.
+        * bindings/js/custom/JSIDBKeyCustom.cpp:
+        (WebCore::toJS): Ditto.
+
 2012-09-13  Sami Kyostila  <skyostil@chromium.org>
 
         Refactor paint overflow clipping
index 4afa550..85aa5db 100644 (file)
@@ -40,7 +40,7 @@ namespace WebCore {
 JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, IDBKey* key)
 {
     if (!key)
-        return jsNull();
+        return jsUndefined();
 
     switch (key->type()) {
     case IDBKey::ArrayType:
index 2340031..fc116a9 100644 (file)
@@ -41,13 +41,13 @@ namespace WebCore {
 v8::Handle<v8::Value> toV8(IDBKey* key, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
 {
     if (!key)
-        return v8NullWithCheck(isolate);
+        return v8Undefined();
 
     switch (key->type()) {
     case IDBKey::InvalidType:
     case IDBKey::MinType:
         ASSERT_NOT_REACHED();
-        return v8::Undefined();
+        return v8Undefined();
     case IDBKey::NumberType:
         return v8::Number::New(key->number());
     case IDBKey::StringType:
@@ -64,7 +64,7 @@ v8::Handle<v8::Value> toV8(IDBKey* key, v8::Handle<v8::Object> creationContext,
     }
 
     ASSERT_NOT_REACHED();
-    return v8::Undefined();
+    return v8Undefined();
 }
 
 } // namespace WebCore