[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

jorlow at chromium.org jorlow at chromium.org
Wed Dec 22 16:35:14 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 1ffedf350ed0525df2dcb4acbdb04dcce8a470aa
Author: jorlow at chromium.org <jorlow at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Nov 26 16:37:09 2010 +0000

    2010-11-26  Jeremy Orlow  <jorlow at chromium.org>
    
            Reviewed by Steve Block.
    
            Make IDBKeyRange match the spec
            https://bugs.webkit.org/show_bug.cgi?id=50105
    
            Remove flags and instead add two booleans for being open.
            Change left to lower and right to upper everywhere.
    
            * storage/indexeddb/constants-expected.txt:
            * storage/indexeddb/constants.html:
            * storage/indexeddb/index-cursor.html:
            * storage/indexeddb/keyrange-expected.txt:
            * storage/indexeddb/keyrange.html:
            * storage/indexeddb/objectstore-cursor.html:
            * storage/indexeddb/open-cursor.html:
            * storage/indexeddb/tutorial.html:
    2010-11-26  Jeremy Orlow  <jorlow at chromium.org>
    
            Reviewed by Steve Block.
    
            Make IDBKeyRange match the spec
            https://bugs.webkit.org/show_bug.cgi?id=50105
    
            Remove flags and instead add two booleans for being open.
            Change left to lower and right to upper everywhere.
    
            * storage/IDBIndexBackendImpl.cpp:
            (WebCore::IDBIndexBackendImpl::openCursorInternal):
            * storage/IDBKey.cpp:
            (WebCore::IDBKey::lowerCursorWhereFragment):
            (WebCore::IDBKey::upperCursorWhereFragment):
            * storage/IDBKey.h:
            * storage/IDBKeyRange.cpp:
            (WebCore::IDBKeyRange::IDBKeyRange):
            (WebCore::IDBKeyRange::only):
            (WebCore::IDBKeyRange::lowerBound):
            (WebCore::IDBKeyRange::upperBound):
            (WebCore::IDBKeyRange::bound):
            (WebCore::IDBKeyRange::lowerWhereClauseComparisonOperator):
            (WebCore::IDBKeyRange::upperWhereClauseComparisonOperator):
            * storage/IDBKeyRange.h:
            (WebCore::IDBKeyRange::create):
            (WebCore::IDBKeyRange::lower):
            (WebCore::IDBKeyRange::upper):
            (WebCore::IDBKeyRange::lowerOpen):
            (WebCore::IDBKeyRange::upperOpen):
            * storage/IDBKeyRange.idl:
            * storage/IDBObjectStoreBackendImpl.cpp:
            (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
    2010-11-26  Jeremy Orlow  <jorlow at chromium.org>
    
            Reviewed by Steve Block.
    
            Make IDBKeyRange match the spec
            https://bugs.webkit.org/show_bug.cgi?id=50105
    
            Remove flags and instead add two booleans for being open.
            Change left to lower and right to upper everywhere.
    
            * public/WebIDBKeyRange.h:
            (WebKit::WebIDBKeyRange::WebIDBKeyRange):
            * src/WebIDBKeyRange.cpp:
            (WebKit::WebIDBKeyRange::assign):
            (WebKit::WebIDBKeyRange::left):
            (WebKit::WebIDBKeyRange::right):
            (WebKit::WebIDBKeyRange::lower):
            (WebKit::WebIDBKeyRange::upper):
            (WebKit::WebIDBKeyRange::lowerOpen):
            (WebKit::WebIDBKeyRange::upperOpen):
            (WebKit::WebIDBKeyRange::flags):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@72767 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 5790491..64fb53e 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,22 @@
+2010-11-26  Jeremy Orlow  <jorlow at chromium.org>
+
+        Reviewed by Steve Block.
+
+        Make IDBKeyRange match the spec
+        https://bugs.webkit.org/show_bug.cgi?id=50105
+
+        Remove flags and instead add two booleans for being open.
+        Change left to lower and right to upper everywhere.
+
+        * storage/indexeddb/constants-expected.txt:
+        * storage/indexeddb/constants.html:
+        * storage/indexeddb/index-cursor.html:
+        * storage/indexeddb/keyrange-expected.txt:
+        * storage/indexeddb/keyrange.html:
+        * storage/indexeddb/objectstore-cursor.html:
+        * storage/indexeddb/open-cursor.html:
+        * storage/indexeddb/tutorial.html:
+
 2010-11-25  Jeremy Orlow  <jorlow at chromium.org>
 
         Reviewed by Steve Block.
diff --git a/LayoutTests/storage/indexeddb/constants-expected.txt b/LayoutTests/storage/indexeddb/constants-expected.txt
index 01b8fa1..ead0937 100644
--- a/LayoutTests/storage/indexeddb/constants-expected.txt
+++ b/LayoutTests/storage/indexeddb/constants-expected.txt
@@ -3,11 +3,6 @@ Test IndexedDB's constants.
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS webkitIDBKeyRange.SINGLE is 0
-PASS webkitIDBKeyRange.LEFT_OPEN is 1
-PASS webkitIDBKeyRange.RIGHT_OPEN is 2
-PASS webkitIDBKeyRange.LEFT_BOUND is 4
-PASS webkitIDBKeyRange.RIGHT_BOUND is 8
 PASS webkitIDBDatabaseException.UNKNOWN_ERR is 1
 PASS webkitIDBDatabaseException.NON_TRANSIENT_ERR is 1
 PASS webkitIDBDatabaseException.NOT_FOUND_ERR is 2
diff --git a/LayoutTests/storage/indexeddb/constants.html b/LayoutTests/storage/indexeddb/constants.html
index 542ed32..7909e24 100644
--- a/LayoutTests/storage/indexeddb/constants.html
+++ b/LayoutTests/storage/indexeddb/constants.html
@@ -16,12 +16,6 @@ if (window.layoutTestController)
 
 function test()
 {
-    shouldBe("webkitIDBKeyRange.SINGLE", "0");
-    shouldBe("webkitIDBKeyRange.LEFT_OPEN", "1");
-    shouldBe("webkitIDBKeyRange.RIGHT_OPEN", "2");
-    shouldBe("webkitIDBKeyRange.LEFT_BOUND", "4");
-    shouldBe("webkitIDBKeyRange.RIGHT_BOUND", "8");
-
     shouldBe("webkitIDBDatabaseException.UNKNOWN_ERR", "1");
     shouldBe("webkitIDBDatabaseException.NON_TRANSIENT_ERR", "1");
     shouldBe("webkitIDBDatabaseException.NOT_FOUND_ERR", "2");
diff --git a/LayoutTests/storage/indexeddb/index-cursor.html b/LayoutTests/storage/indexeddb/index-cursor.html
index 6a81514..fb3147d 100644
--- a/LayoutTests/storage/indexeddb/index-cursor.html
+++ b/LayoutTests/storage/indexeddb/index-cursor.html
@@ -181,11 +181,11 @@ function runNextTest()
  
     var keyRange;
     if (lower !== null && upper !== null)
-        keyRange = webkitIDBKeyRange.bound(testData[lower], testData[upper], lowerIsOpen, upperIsOpen);
+        keyRange = webkitIDBKeyRange.bound(testData[lower], testData[upper], {lowerOpen: lowerIsOpen, upperOpen: upperIsOpen});
     else if (lower !== null)
-        keyRange = webkitIDBKeyRange.leftBound(testData[lower], lowerIsOpen);
+        keyRange = webkitIDBKeyRange.lowerBound(testData[lower], lowerIsOpen);
     else
-        keyRange = webkitIDBKeyRange.rightBound(testData[upper], upperIsOpen);
+        keyRange = webkitIDBKeyRange.upperBound(testData[upper], upperIsOpen);
  
     var request = indexObject.openKeyCursor({range: keyRange, direction: ascending ? webkitIDBCursor.NEXT : webkitIDBCursor.PREV});
     request.onsuccess = cursorIteration;
diff --git a/LayoutTests/storage/indexeddb/keyrange-expected.txt b/LayoutTests/storage/indexeddb/keyrange-expected.txt
index 1a7dfff..faac937 100644
--- a/LayoutTests/storage/indexeddb/keyrange-expected.txt
+++ b/LayoutTests/storage/indexeddb/keyrange-expected.txt
@@ -3,149 +3,155 @@ Test IndexedDB's KeyRange.
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS 'SINGLE' in webkitIDBKeyRange is true
-PASS 'LEFT_OPEN' in webkitIDBKeyRange is true
-PASS 'RIGHT_OPEN' in webkitIDBKeyRange is true
-PASS 'LEFT_BOUND' in webkitIDBKeyRange is true
-PASS 'RIGHT_BOUND' in webkitIDBKeyRange is true
-PASS 'left' in webkitIDBKeyRange is false
-PASS 'right' in webkitIDBKeyRange is false
-PASS 'flags' in webkitIDBKeyRange is false
+PASS 'lower' in webkitIDBKeyRange is false
+PASS 'upper' in webkitIDBKeyRange is false
+PASS 'lowerOpen' in webkitIDBKeyRange is false
+PASS 'upperOpen' in webkitIDBKeyRange is false
 PASS 'only' in webkitIDBKeyRange is true
-PASS 'leftBound' in webkitIDBKeyRange is true
-PASS 'rightBound' in webkitIDBKeyRange is true
+PASS 'lowerBound' in webkitIDBKeyRange is true
+PASS 'upperBound' in webkitIDBKeyRange is true
 PASS 'bound' in webkitIDBKeyRange is true
 
 instance = webkitIDBKeyRange.only(1)
-PASS 'SINGLE' in instance is true
-PASS 'LEFT_OPEN' in instance is true
-PASS 'RIGHT_OPEN' in instance is true
-PASS 'LEFT_BOUND' in instance is true
-PASS 'RIGHT_BOUND' in instance is true
-PASS 'left' in instance is true
-PASS 'right' in instance is true
-PASS 'flags' in instance is true
+PASS 'lower' in instance is true
+PASS 'upper' in instance is true
+PASS 'lowerOpen' in instance is true
+PASS 'upperOpen' in instance is true
 PASS 'only' in instance is false
-PASS 'leftBound' in instance is false
-PASS 'rightBound' in instance is false
+PASS 'lowerBound' in instance is false
+PASS 'upperBound' in instance is false
 PASS 'bound' in instance is false
 
 webkitIDBKeyRange.only(1)
-PASS keyRange.left is 1
-PASS keyRange.right is 1
-PASS keyRange.flags is keyRange.SINGLE
+PASS keyRange.lower is 1
+PASS keyRange.upper is 1
+PASS keyRange.lowerOpen is false
+PASS keyRange.upperOpen is false
 webkitIDBKeyRange.only('a')
-PASS keyRange.left is 'a'
-PASS keyRange.right is 'a'
-PASS keyRange.flags is keyRange.SINGLE
-webkitIDBKeyRange.leftBound(10,true)
-PASS keyRange.left is 10
-PASS keyRange.right is null
-PASS keyRange.flags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
-webkitIDBKeyRange.leftBound(11,false)
-PASS keyRange.left is 11
-PASS keyRange.right is null
-PASS keyRange.flags is keyRange.LEFT_BOUND
-webkitIDBKeyRange.leftBound(12,undefined)
-PASS keyRange.left is 12
-PASS keyRange.right is null
-PASS keyRange.flags is keyRange.LEFT_BOUND
-webkitIDBKeyRange.leftBound('aa',true)
-PASS keyRange.left is 'aa'
-PASS keyRange.right is null
-PASS keyRange.flags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
-webkitIDBKeyRange.leftBound('ab',false)
-PASS keyRange.left is 'ab'
-PASS keyRange.right is null
-PASS keyRange.flags is keyRange.LEFT_BOUND
-webkitIDBKeyRange.leftBound('ac',undefined)
-PASS keyRange.left is 'ac'
-PASS keyRange.right is null
-PASS keyRange.flags is keyRange.LEFT_BOUND
-webkitIDBKeyRange.rightBound(20,true)
-PASS keyRange.right is 20
-PASS keyRange.left is null
-PASS keyRange.flags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-webkitIDBKeyRange.rightBound(21,false)
-PASS keyRange.right is 21
-PASS keyRange.left is null
-PASS keyRange.flags is keyRange.RIGHT_BOUND
-webkitIDBKeyRange.rightBound(22,undefined)
-PASS keyRange.right is 22
-PASS keyRange.left is null
-PASS keyRange.flags is keyRange.RIGHT_BOUND
-webkitIDBKeyRange.rightBound('ba',true)
-PASS keyRange.right is 'ba'
-PASS keyRange.left is null
-PASS keyRange.flags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-webkitIDBKeyRange.rightBound('bb',false)
-PASS keyRange.right is 'bb'
-PASS keyRange.left is null
-PASS keyRange.flags is keyRange.RIGHT_BOUND
-webkitIDBKeyRange.rightBound('bc',undefined)
-PASS keyRange.right is 'bc'
-PASS keyRange.left is null
-PASS keyRange.flags is keyRange.RIGHT_BOUND
-webkitIDBKeyRange.bound(30,40,undefined,undefined)
-PASS keyRange.left is 30
-PASS keyRange.right is 40
-PASS leftFlags is keyRange.LEFT_BOUND
-PASS rightFlags is keyRange.RIGHT_BOUND
-webkitIDBKeyRange.bound(31,41,false,false)
-PASS keyRange.left is 31
-PASS keyRange.right is 41
-PASS leftFlags is keyRange.LEFT_BOUND
-PASS rightFlags is keyRange.RIGHT_BOUND
-webkitIDBKeyRange.bound(32,42,false,true)
-PASS keyRange.left is 32
-PASS keyRange.right is 42
-PASS leftFlags is keyRange.LEFT_BOUND
-PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-webkitIDBKeyRange.bound(33,43,true,false)
-PASS keyRange.left is 33
-PASS keyRange.right is 43
-PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
-PASS rightFlags is keyRange.RIGHT_BOUND
-webkitIDBKeyRange.bound(34,44,true,true)
-PASS keyRange.left is 34
-PASS keyRange.right is 44
-PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
-PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-webkitIDBKeyRange.bound('aaa','aba',false,false)
-PASS keyRange.left is 'aaa'
-PASS keyRange.right is 'aba'
-PASS leftFlags is keyRange.LEFT_BOUND
-PASS rightFlags is keyRange.RIGHT_BOUND
-webkitIDBKeyRange.bound('aab','abb',undefined,undefined)
-PASS keyRange.left is 'aab'
-PASS keyRange.right is 'abb'
-PASS leftFlags is keyRange.LEFT_BOUND
-PASS rightFlags is keyRange.RIGHT_BOUND
-webkitIDBKeyRange.bound('aac','abc',false,false)
-PASS keyRange.left is 'aac'
-PASS keyRange.right is 'abc'
-PASS leftFlags is keyRange.LEFT_BOUND
-PASS rightFlags is keyRange.RIGHT_BOUND
-webkitIDBKeyRange.bound('aad','abd',false,true)
-PASS keyRange.left is 'aad'
-PASS keyRange.right is 'abd'
-PASS leftFlags is keyRange.LEFT_BOUND
-PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
-webkitIDBKeyRange.bound('aae','abe',true,false)
-PASS keyRange.left is 'aae'
-PASS keyRange.right is 'abe'
-PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
-PASS rightFlags is keyRange.RIGHT_BOUND
-webkitIDBKeyRange.bound('aaf','abf',true,true)
-PASS keyRange.left is 'aaf'
-PASS keyRange.right is 'abf'
-PASS leftFlags is keyRange.LEFT_OPEN | keyRange.LEFT_BOUND
-PASS rightFlags is keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND
+PASS keyRange.lower is 'a'
+PASS keyRange.upper is 'a'
+PASS keyRange.lowerOpen is false
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.lowerBound(10,true)
+PASS keyRange.lower is 10
+PASS keyRange.lowerOpen is true
+PASS keyRange.upper is null
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.lowerBound(11,false)
+PASS keyRange.lower is 11
+PASS keyRange.lowerOpen is false
+PASS keyRange.upper is null
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.lowerBound(12,undefined)
+PASS keyRange.lower is 12
+PASS keyRange.lowerOpen is false
+PASS keyRange.upper is null
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.lowerBound('aa',true)
+PASS keyRange.lower is 'aa'
+PASS keyRange.lowerOpen is true
+PASS keyRange.upper is null
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.lowerBound('ab',false)
+PASS keyRange.lower is 'ab'
+PASS keyRange.lowerOpen is false
+PASS keyRange.upper is null
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.lowerBound('ac',undefined)
+PASS keyRange.lower is 'ac'
+PASS keyRange.lowerOpen is false
+PASS keyRange.upper is null
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.upperBound(20,true)
+PASS keyRange.upper is 20
+PASS keyRange.upperOpen is true
+PASS keyRange.lower is null
+PASS keyRange.lowerOpen is false
+webkitIDBKeyRange.upperBound(21,false)
+PASS keyRange.upper is 21
+PASS keyRange.upperOpen is false
+PASS keyRange.lower is null
+PASS keyRange.lowerOpen is false
+webkitIDBKeyRange.upperBound(22,undefined)
+PASS keyRange.upper is 22
+PASS keyRange.upperOpen is false
+PASS keyRange.lower is null
+PASS keyRange.lowerOpen is false
+webkitIDBKeyRange.upperBound('ba',true)
+PASS keyRange.upper is 'ba'
+PASS keyRange.upperOpen is true
+PASS keyRange.lower is null
+PASS keyRange.lowerOpen is false
+webkitIDBKeyRange.upperBound('bb',false)
+PASS keyRange.upper is 'bb'
+PASS keyRange.upperOpen is false
+PASS keyRange.lower is null
+PASS keyRange.lowerOpen is false
+webkitIDBKeyRange.upperBound('bc',undefined)
+PASS keyRange.upper is 'bc'
+PASS keyRange.upperOpen is false
+PASS keyRange.lower is null
+PASS keyRange.lowerOpen is false
+webkitIDBKeyRange.bound(30,40, {lowerOpen: undefined, upperOpen:undefined})
+PASS keyRange.lower is 30
+PASS keyRange.upper is 40
+PASS keyRange.lowerOpen is false
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.bound(31,41, {lowerOpen: false, upperOpen:false})
+PASS keyRange.lower is 31
+PASS keyRange.upper is 41
+PASS keyRange.lowerOpen is false
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.bound(32,42, {lowerOpen: false, upperOpen:true})
+PASS keyRange.lower is 32
+PASS keyRange.upper is 42
+PASS keyRange.lowerOpen is false
+PASS keyRange.upperOpen is true
+webkitIDBKeyRange.bound(33,43, {lowerOpen: true, upperOpen:false})
+PASS keyRange.lower is 33
+PASS keyRange.upper is 43
+PASS keyRange.lowerOpen is true
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.bound(34,44, {lowerOpen: true, upperOpen:true})
+PASS keyRange.lower is 34
+PASS keyRange.upper is 44
+PASS keyRange.lowerOpen is true
+PASS keyRange.upperOpen is true
+webkitIDBKeyRange.bound('aaa','aba', {lowerOpen: false, upperOpen:false})
+PASS keyRange.lower is 'aaa'
+PASS keyRange.upper is 'aba'
+PASS keyRange.lowerOpen is false
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.bound('aab','abb', {lowerOpen: undefined, upperOpen:undefined})
+PASS keyRange.lower is 'aab'
+PASS keyRange.upper is 'abb'
+PASS keyRange.lowerOpen is false
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.bound('aac','abc', {lowerOpen: false, upperOpen:false})
+PASS keyRange.lower is 'aac'
+PASS keyRange.upper is 'abc'
+PASS keyRange.lowerOpen is false
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.bound('aad','abd', {lowerOpen: false, upperOpen:true})
+PASS keyRange.lower is 'aad'
+PASS keyRange.upper is 'abd'
+PASS keyRange.lowerOpen is false
+PASS keyRange.upperOpen is true
+webkitIDBKeyRange.bound('aae','abe', {lowerOpen: true, upperOpen:false})
+PASS keyRange.lower is 'aae'
+PASS keyRange.upper is 'abe'
+PASS keyRange.lowerOpen is true
+PASS keyRange.upperOpen is false
+webkitIDBKeyRange.bound('aaf','abf', {lowerOpen: true, upperOpen:true})
+PASS keyRange.lower is 'aaf'
+PASS keyRange.upper is 'abf'
+PASS keyRange.lowerOpen is true
+PASS keyRange.upperOpen is true
 Passing an invalid key into only([])
 PASS Caught exception: Error: TYPE_MISMATCH_ERR: DOM Exception 17
-Passing an invalid key into rightBound([])
+Passing an invalid key into upperBound([])
 PASS Caught exception: Error: TYPE_MISMATCH_ERR: DOM Exception 17
-Passing an invalid key into leftBound([])
+Passing an invalid key into lowerBound([])
 PASS Caught exception: Error: TYPE_MISMATCH_ERR: DOM Exception 17
 Passing an invalid key into bound(null, [])
 PASS Caught exception: Error: TYPE_MISMATCH_ERR: DOM Exception 17
diff --git a/LayoutTests/storage/indexeddb/keyrange.html b/LayoutTests/storage/indexeddb/keyrange.html
index 48708d9..4b926da 100644
--- a/LayoutTests/storage/indexeddb/keyrange.html
+++ b/LayoutTests/storage/indexeddb/keyrange.html
@@ -17,67 +17,68 @@ if (window.layoutTestController)
 function checkSingleKeyRange(value)
 {
     keyRange = evalAndLog("webkitIDBKeyRange.only(" + value + ")");
-    shouldBe("keyRange.left", "" + value);
-    shouldBe("keyRange.right", "" + value);
-    shouldBe("keyRange.flags", "keyRange.SINGLE");
+    shouldBe("keyRange.lower", "" + value);
+    shouldBe("keyRange.upper", "" + value);
+    shouldBeFalse("keyRange.lowerOpen");
+    shouldBeFalse("keyRange.upperOpen");
 }
 
-function checkLeftBoundKeyRange(value, open)
+function checkLowerBoundKeyRange(value, open)
 {
-    keyRange = evalAndLog("webkitIDBKeyRange.leftBound(" + value + "," + open + ")");
-    shouldBe("keyRange.left", "" + value);
-    shouldBeNull("keyRange.right");
-    shouldBe("keyRange.flags", open ? "keyRange.LEFT_OPEN | keyRange.LEFT_BOUND" : "keyRange.LEFT_BOUND");
+    keyRange = evalAndLog("webkitIDBKeyRange.lowerBound(" + value + "," + open + ")");
+    shouldBe("keyRange.lower", "" + value);
+    if (open === undefined)
+        open = false;
+    shouldBe("keyRange.lowerOpen", "" + open);
+    shouldBeNull("keyRange.upper");
+    shouldBeFalse("keyRange.upperOpen");
 }
 
-function checkRightBoundKeyRange(value, open)
+function checkUpperBoundKeyRange(value, open)
 {
-    keyRange = evalAndLog("webkitIDBKeyRange.rightBound(" + value + "," + open + ")");
-    shouldBe("keyRange.right", "" + value);
-    shouldBeNull("keyRange.left");
-    shouldBe("keyRange.flags", open ? "keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND" : "keyRange.RIGHT_BOUND");
+    keyRange = evalAndLog("webkitIDBKeyRange.upperBound(" + value + "," + open + ")");
+    shouldBe("keyRange.upper", "" + value);
+    if (open === undefined)
+        open = false;
+    shouldBe("keyRange.upperOpen", "" + open);
+    shouldBeNull("keyRange.lower");
+    shouldBeFalse("keyRange.lowerOpen");
 }
 
-function checkBoundKeyRange(left, right, openLeft, openRight)
+function checkBoundKeyRange(lower, upper, lowerOpen, upperOpen)
 {
-    keyRange = evalAndLog("webkitIDBKeyRange.bound(" + left + "," + right + "," + openLeft + "," + openRight + ")");
-    shouldBe("keyRange.left", "" + left);
-    shouldBe("keyRange.right", "" + right);
-    leftFlags = keyRange.flags & (keyRange.LEFT_OPEN | keyRange.LEFT_BOUND);
-    shouldBe("leftFlags", openLeft ? "keyRange.LEFT_OPEN | keyRange.LEFT_BOUND" : "keyRange.LEFT_BOUND");
-    rightFlags = keyRange.flags & (keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND);
-    shouldBe("rightFlags", openRight ? "keyRange.RIGHT_OPEN | keyRange.RIGHT_BOUND" : "keyRange.RIGHT_BOUND");
+    keyRange = evalAndLog("webkitIDBKeyRange.bound(" + lower + "," + upper + ", {lowerOpen: " + lowerOpen + ", upperOpen:" + upperOpen + "})");
+    shouldBe("keyRange.lower", "" + lower);
+    shouldBe("keyRange.upper", "" + upper);
+    if (lowerOpen === undefined)
+        lowerOpen = false;
+    if (upperOpen === undefined)
+        upperOpen = false;
+    shouldBe("keyRange.lowerOpen", "" + lowerOpen);
+    shouldBe("keyRange.upperOpen", "" + upperOpen);
 }
 
 function test()
 {
-    shouldBeTrue("'SINGLE' in webkitIDBKeyRange");
-    shouldBeTrue("'LEFT_OPEN' in webkitIDBKeyRange");
-    shouldBeTrue("'RIGHT_OPEN' in webkitIDBKeyRange");
-    shouldBeTrue("'LEFT_BOUND' in webkitIDBKeyRange");
-    shouldBeTrue("'RIGHT_BOUND' in webkitIDBKeyRange");
-    shouldBeFalse("'left' in webkitIDBKeyRange");
-    shouldBeFalse("'right' in webkitIDBKeyRange");
-    shouldBeFalse("'flags' in webkitIDBKeyRange");
+    shouldBeFalse("'lower' in webkitIDBKeyRange");
+    shouldBeFalse("'upper' in webkitIDBKeyRange");
+    shouldBeFalse("'lowerOpen' in webkitIDBKeyRange");
+    shouldBeFalse("'upperOpen' in webkitIDBKeyRange");
     shouldBeTrue("'only' in webkitIDBKeyRange");
-    shouldBeTrue("'leftBound' in webkitIDBKeyRange");
-    shouldBeTrue("'rightBound' in webkitIDBKeyRange");
+    shouldBeTrue("'lowerBound' in webkitIDBKeyRange");
+    shouldBeTrue("'upperBound' in webkitIDBKeyRange");
     shouldBeTrue("'bound' in webkitIDBKeyRange");
 
     debug("");
 
     var instance = evalAndLog("instance = webkitIDBKeyRange.only(1)");
-    shouldBeTrue("'SINGLE' in instance");
-    shouldBeTrue("'LEFT_OPEN' in instance");
-    shouldBeTrue("'RIGHT_OPEN' in instance");
-    shouldBeTrue("'LEFT_BOUND' in instance");
-    shouldBeTrue("'RIGHT_BOUND' in instance");
-    shouldBeTrue("'left' in instance");
-    shouldBeTrue("'right' in instance");
-    shouldBeTrue("'flags' in instance");
+    shouldBeTrue("'lower' in instance");
+    shouldBeTrue("'upper' in instance");
+    shouldBeTrue("'lowerOpen' in instance");
+    shouldBeTrue("'upperOpen' in instance");
     shouldBeFalse("'only' in instance");
-    shouldBeFalse("'leftBound' in instance");
-    shouldBeFalse("'rightBound' in instance");
+    shouldBeFalse("'lowerBound' in instance");
+    shouldBeFalse("'upperBound' in instance");
     shouldBeFalse("'bound' in instance");
 
     debug("");
@@ -85,19 +86,19 @@ function test()
     checkSingleKeyRange(1);
     checkSingleKeyRange("'a'");
 
-    checkLeftBoundKeyRange(10, true);
-    checkLeftBoundKeyRange(11, false);
-    checkLeftBoundKeyRange(12);
-    checkLeftBoundKeyRange("'aa'", true);
-    checkLeftBoundKeyRange("'ab'", false);
-    checkLeftBoundKeyRange("'ac'");
+    checkLowerBoundKeyRange(10, true);
+    checkLowerBoundKeyRange(11, false);
+    checkLowerBoundKeyRange(12);
+    checkLowerBoundKeyRange("'aa'", true);
+    checkLowerBoundKeyRange("'ab'", false);
+    checkLowerBoundKeyRange("'ac'");
 
-    checkRightBoundKeyRange(20, true);
-    checkRightBoundKeyRange(21, false);
-    checkRightBoundKeyRange(22);
-    checkRightBoundKeyRange("'ba'", true);
-    checkRightBoundKeyRange("'bb'", false);
-    checkRightBoundKeyRange("'bc'");
+    checkUpperBoundKeyRange(20, true);
+    checkUpperBoundKeyRange(21, false);
+    checkUpperBoundKeyRange(22);
+    checkUpperBoundKeyRange("'ba'", true);
+    checkUpperBoundKeyRange("'bb'", false);
+    checkUpperBoundKeyRange("'bc'");
 
     checkBoundKeyRange(30, 40);
     checkBoundKeyRange(31, 41, false, false);
@@ -121,16 +122,16 @@ function test()
     }
 
     try {
-        debug("Passing an invalid key into rightBound([])");
-        webkitIDBKeyRange.rightBound([]);
+        debug("Passing an invalid key into upperBound([])");
+        webkitIDBKeyRange.upperBound([]);
         testFailed("No exception thrown");
     } catch (e) {
         testPassed("Caught exception: " + e.toString());
     }
  
     try {
-        debug("Passing an invalid key into leftBound([])");
-        webkitIDBKeyRange.leftBound([]);
+        debug("Passing an invalid key into lowerBound([])");
+        webkitIDBKeyRange.lowerBound([]);
         testFailed("No exception thrown");
     } catch (e) {
         testPassed("Caught exception: " + e.toString());
diff --git a/LayoutTests/storage/indexeddb/objectstore-cursor.html b/LayoutTests/storage/indexeddb/objectstore-cursor.html
index 215ec91..3358917 100644
--- a/LayoutTests/storage/indexeddb/objectstore-cursor.html
+++ b/LayoutTests/storage/indexeddb/objectstore-cursor.html
@@ -159,11 +159,11 @@ function runNextTest()
  
     var keyRange;
     if (lower !== null && upper !== null)
-        keyRange = webkitIDBKeyRange.bound(testData[lower], testData[upper], lowerIsOpen, upperIsOpen);
+        keyRange = webkitIDBKeyRange.bound(testData[lower], testData[upper], {lowerOpen: lowerIsOpen, upperOpen: upperIsOpen});
     else if (lower !== null)
-        keyRange = webkitIDBKeyRange.leftBound(testData[lower], lowerIsOpen);
+        keyRange = webkitIDBKeyRange.lowerBound(testData[lower], lowerIsOpen);
     else
-        keyRange = webkitIDBKeyRange.rightBound(testData[upper], upperIsOpen);
+        keyRange = webkitIDBKeyRange.upperBound(testData[upper], upperIsOpen);
  
     var request = objectStore.openCursor({range: keyRange, direction: ascending ? webkitIDBCursor.NEXT : webkitIDBCursor.PREV});
     request.onsuccess = cursorIteration;
diff --git a/LayoutTests/storage/indexeddb/open-cursor.html b/LayoutTests/storage/indexeddb/open-cursor.html
index c5dd7d8..e4dc8f0 100644
--- a/LayoutTests/storage/indexeddb/open-cursor.html
+++ b/LayoutTests/storage/indexeddb/open-cursor.html
@@ -25,7 +25,7 @@ function emptyCursorSuccess()
 function openEmptyCursor()
 {
     debug("Opening an empty cursor.");
-    keyRange = webkitIDBKeyRange.leftBound("InexistentKey");
+    keyRange = webkitIDBKeyRange.lowerBound("InexistentKey");
     result = evalAndLog("objectStore.openCursor({range: keyRange})");
     verifyResult(result);
     result.onsuccess = emptyCursorSuccess;
@@ -55,7 +55,7 @@ function cursorSuccess()
 function openCursor()
 {
     debug("Opening cursor");
-    keyRange = webkitIDBKeyRange.leftBound("myKey");
+    keyRange = webkitIDBKeyRange.lowerBound("myKey");
     result = evalAndLog("event.source.openCursor({range: keyRange})");
     verifyResult(result);
     result.onsuccess = cursorSuccess;
diff --git a/LayoutTests/storage/indexeddb/tutorial.html b/LayoutTests/storage/indexeddb/tutorial.html
index c90a2bc..d40dd8e 100644
--- a/LayoutTests/storage/indexeddb/tutorial.html
+++ b/LayoutTests/storage/indexeddb/tutorial.html
@@ -395,9 +395,9 @@ function onIndexGetSuccess()
     // different IDBKeyRanges just to demonstrate how to use them, but we won't bother to handle
     // the onsuccess conditions.
     var lname = event.source;
-    lname.openCursor({range: IDBKeyRange.leftBound("Doe", false), direction: IDBCursor.NEXT_NO_DUPLICATE});
+    lname.openCursor({range: IDBKeyRange.lowerBound("Doe", false), direction: IDBCursor.NEXT_NO_DUPLICATE});
     lname.openCursor({direction: IDBCursor.PREV_NO_DUPLICATE});
-    lname.openCursor({range: IDBKeyRange.rightBound("ZZZZ")});
+    lname.openCursor({range: IDBKeyRange.upperBound("ZZZZ")});
     lname.openCursor({range: IDBKeyRange.only("Doe"), direction: IDBCursor.PREV});
     lname.openCursor();
     lname.openKeyCursor();
@@ -411,7 +411,8 @@ function onIndexGetSuccess()
 function onAllDone()
 {
     log("Everything worked!");
-    layoutTestController.notifyDone();
+    if (window.layoutTestController)
+        layoutTestController.notifyDone();
 }
 
 // The way setVersion is supposed to work:
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index c6b690a..eab7991 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,37 @@
+2010-11-26  Jeremy Orlow  <jorlow at chromium.org>
+
+        Reviewed by Steve Block.
+
+        Make IDBKeyRange match the spec
+        https://bugs.webkit.org/show_bug.cgi?id=50105
+
+        Remove flags and instead add two booleans for being open.
+        Change left to lower and right to upper everywhere.
+
+        * storage/IDBIndexBackendImpl.cpp:
+        (WebCore::IDBIndexBackendImpl::openCursorInternal):
+        * storage/IDBKey.cpp:
+        (WebCore::IDBKey::lowerCursorWhereFragment):
+        (WebCore::IDBKey::upperCursorWhereFragment):
+        * storage/IDBKey.h:
+        * storage/IDBKeyRange.cpp:
+        (WebCore::IDBKeyRange::IDBKeyRange):
+        (WebCore::IDBKeyRange::only):
+        (WebCore::IDBKeyRange::lowerBound):
+        (WebCore::IDBKeyRange::upperBound):
+        (WebCore::IDBKeyRange::bound):
+        (WebCore::IDBKeyRange::lowerWhereClauseComparisonOperator):
+        (WebCore::IDBKeyRange::upperWhereClauseComparisonOperator):
+        * storage/IDBKeyRange.h:
+        (WebCore::IDBKeyRange::create):
+        (WebCore::IDBKeyRange::lower):
+        (WebCore::IDBKeyRange::upper):
+        (WebCore::IDBKeyRange::lowerOpen):
+        (WebCore::IDBKeyRange::upperOpen):
+        * storage/IDBKeyRange.idl:
+        * storage/IDBObjectStoreBackendImpl.cpp:
+        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
+
 2010-11-25  Jeremy Orlow  <jorlow at chromium.org>
 
         Reviewed by Steve Block.
diff --git a/WebCore/storage/IDBIndexBackendImpl.cpp b/WebCore/storage/IDBIndexBackendImpl.cpp
index 84af234..597a8c2 100644
--- a/WebCore/storage/IDBIndexBackendImpl.cpp
+++ b/WebCore/storage/IDBIndexBackendImpl.cpp
@@ -73,13 +73,13 @@ void IDBIndexBackendImpl::openCursorInternal(ScriptExecutionContext*, PassRefPtr
                  + (objectCursor ? "ObjectStoreData.value " : "ObjectStoreData.keyString, ObjectStoreData.keyDate, ObjectStoreData.keyNumber ")
                  + "FROM IndexData INNER JOIN ObjectStoreData ON IndexData.objectStoreDataId = ObjectStoreData.id WHERE ";
 
-    bool leftBound = range && (range->flags() & IDBKeyRange::LEFT_BOUND || range->flags() == IDBKeyRange::SINGLE);
-    bool rightBound = range && (range->flags() & IDBKeyRange::RIGHT_BOUND || range->flags() == IDBKeyRange::SINGLE);
+    bool lowerBound = range && range->lower();
+    bool upperBound = range && range->upper();
     
-    if (leftBound)
-        sql += range->left()->leftCursorWhereFragment(range->leftWhereClauseComparisonOperator(), "IndexData.");
-    if (rightBound)
-        sql += range->right()->rightCursorWhereFragment(range->rightWhereClauseComparisonOperator(), "IndexData.");
+    if (lowerBound)
+        sql += range->lower()->lowerCursorWhereFragment(range->lowerWhereClauseComparisonOperator(), "IndexData.");
+    if (upperBound)
+        sql += range->upper()->upperCursorWhereFragment(range->upperWhereClauseComparisonOperator(), "IndexData.");
     sql += "IndexData.indexId = ? ORDER BY ";
 
     IDBCursor::Direction direction = static_cast<IDBCursor::Direction>(untypedDirection);
@@ -93,10 +93,10 @@ void IDBIndexBackendImpl::openCursorInternal(ScriptExecutionContext*, PassRefPtr
     ASSERT_UNUSED(ok, ok); // FIXME: Better error handling?
 
     int indexColumn = 1;
-    if (leftBound)
-        indexColumn += range->left()->bind(*query, indexColumn);
-    if (rightBound)
-        indexColumn += range->right()->bind(*query, indexColumn);
+    if (lowerBound)
+        indexColumn += range->lower()->bind(*query, indexColumn);
+    if (upperBound)
+        indexColumn += range->upper()->bind(*query, indexColumn);
     query->bindInt64(indexColumn, index->id());
 
     if (query->step() != SQLResultRow) {
diff --git a/WebCore/storage/IDBKey.cpp b/WebCore/storage/IDBKey.cpp
index 8e411b7..4f8287a 100644
--- a/WebCore/storage/IDBKey.cpp
+++ b/WebCore/storage/IDBKey.cpp
@@ -105,7 +105,7 @@ String IDBKey::whereSyntax(String qualifiedTableName) const
     return "";
 }
 
-String IDBKey::leftCursorWhereFragment(String comparisonOperator, String qualifiedTableName)
+String IDBKey::lowerCursorWhereFragment(String comparisonOperator, String qualifiedTableName)
 {
     switch (m_type) {
     case StringType:
@@ -122,7 +122,7 @@ String IDBKey::leftCursorWhereFragment(String comparisonOperator, String qualifi
     return "";
 }
 
-String IDBKey::rightCursorWhereFragment(String comparisonOperator, String qualifiedTableName)
+String IDBKey::upperCursorWhereFragment(String comparisonOperator, String qualifiedTableName)
 {
     switch (m_type) {
     case StringType:
diff --git a/WebCore/storage/IDBKey.h b/WebCore/storage/IDBKey.h
index b302fd7..9a27742 100644
--- a/WebCore/storage/IDBKey.h
+++ b/WebCore/storage/IDBKey.h
@@ -78,8 +78,8 @@ public:
 
     bool isEqual(IDBKey* other);
     String whereSyntax(String qualifiedTableName = "") const;
-    String leftCursorWhereFragment(String comparisonOperator, String qualifiedTableName = "");
-    String rightCursorWhereFragment(String comparisonOperator, String qualifiedTableName = "");
+    String lowerCursorWhereFragment(String comparisonOperator, String qualifiedTableName = "");
+    String upperCursorWhereFragment(String comparisonOperator, String qualifiedTableName = "");
     int bind(SQLiteStatement& query, int column) const;
     void bindWithNulls(SQLiteStatement& query, int baseColumn) const;
 
diff --git a/WebCore/storage/IDBKeyRange.cpp b/WebCore/storage/IDBKeyRange.cpp
index 6c612cc..142b3bd 100644
--- a/WebCore/storage/IDBKeyRange.cpp
+++ b/WebCore/storage/IDBKeyRange.cpp
@@ -32,73 +32,53 @@
 
 namespace WebCore {
 
-IDBKeyRange::IDBKeyRange(PassRefPtr<IDBKey> left, PassRefPtr<IDBKey> right, unsigned short flags)
-    : m_left(left)
-    , m_right(right)
-    , m_flags(flags)
+IDBKeyRange::IDBKeyRange(PassRefPtr<IDBKey> lower, PassRefPtr<IDBKey> upper, bool lowerOpen, bool upperOpen)
+    : m_lower(lower)
+    , m_upper(upper)
+    , m_lowerOpen(lowerOpen)
+    , m_upperOpen(upperOpen)
 {
 }
 
 PassRefPtr<IDBKeyRange> IDBKeyRange::only(PassRefPtr<IDBKey> prpValue)
 {
     RefPtr<IDBKey> value = prpValue;
-    return IDBKeyRange::create(value, value, IDBKeyRange::SINGLE);
+    return IDBKeyRange::create(value, value, false, false);
 }
 
-PassRefPtr<IDBKeyRange> IDBKeyRange::leftBound(PassRefPtr<IDBKey> bound, bool open)
+PassRefPtr<IDBKeyRange> IDBKeyRange::lowerBound(PassRefPtr<IDBKey> bound, bool open)
 {
-    unsigned short flags = IDBKeyRange::LEFT_BOUND;
-    if (open)
-        flags |= IDBKeyRange::LEFT_OPEN;
-    return IDBKeyRange::create(bound, IDBKey::create(), flags);
+    return IDBKeyRange::create(bound, 0, open, false);
 }
 
-PassRefPtr<IDBKeyRange> IDBKeyRange::rightBound(PassRefPtr<IDBKey> bound, bool open)
+PassRefPtr<IDBKeyRange> IDBKeyRange::upperBound(PassRefPtr<IDBKey> bound, bool open)
 {
-    unsigned short flags = IDBKeyRange::RIGHT_BOUND;
-    if (open)
-        flags |= IDBKeyRange::RIGHT_OPEN;
-    return IDBKeyRange::create(IDBKey::create(), bound, flags);
+    return IDBKeyRange::create(0, bound, false, open);
 }
 
-PassRefPtr<IDBKeyRange> IDBKeyRange::bound(PassRefPtr<IDBKey> left, PassRefPtr<IDBKey> right, bool openLeft, bool openRight)
+PassRefPtr<IDBKeyRange> IDBKeyRange::bound(PassRefPtr<IDBKey> lower, PassRefPtr<IDBKey> upper, const OptionsObject& options)
 {
-    unsigned short flags = IDBKeyRange::LEFT_BOUND | IDBKeyRange::RIGHT_BOUND;
-    if (openLeft)
-        flags |= IDBKeyRange::LEFT_OPEN;
-    if (openRight)
-        flags |= IDBKeyRange::RIGHT_OPEN;
-    return IDBKeyRange::create(left, right, flags);
+    bool lowerOpen = false;
+    bool upperOpen = false;
+    options.getKeyBool("lowerOpen", lowerOpen);
+    options.getKeyBool("upperOpen", upperOpen);
+    return IDBKeyRange::create(lower, upper, lowerOpen, upperOpen);
 }
 
-String IDBKeyRange::leftWhereClauseComparisonOperator() const
+String IDBKeyRange::lowerWhereClauseComparisonOperator() const
 {
-    if (m_flags & LEFT_OPEN)
+    ASSERT(m_lower);
+    if (m_lowerOpen)
         return "<";
-
-    if (m_flags & LEFT_BOUND)
-        return "<=";
-
-    if (m_flags == SINGLE)
-        return "=";
-
-    ASSERT_NOT_REACHED();
-    return "";
+    return "<=";
 }
 
-String IDBKeyRange::rightWhereClauseComparisonOperator() const
+String IDBKeyRange::upperWhereClauseComparisonOperator() const
 {
-    if (m_flags & RIGHT_OPEN)
+    ASSERT(m_upper);
+    if (m_upperOpen)
         return "<";
-
-    if (m_flags & RIGHT_BOUND)
-        return "<=";
-
-    if (m_flags == SINGLE)
-        return "=";
-
-    ASSERT_NOT_REACHED();
-    return "";
+    return "<=";
 }
 
 } // namespace WebCore
diff --git a/WebCore/storage/IDBKeyRange.h b/WebCore/storage/IDBKeyRange.h
index d246ebc..8af48fe 100644
--- a/WebCore/storage/IDBKeyRange.h
+++ b/WebCore/storage/IDBKeyRange.h
@@ -29,6 +29,7 @@
 #if ENABLE(INDEXED_DATABASE)
 
 #include "IDBKey.h"
+#include "OptionsObject.h"
 #include <wtf/PassRefPtr.h>
 #include <wtf/Threading.h>
 
@@ -36,41 +37,33 @@ namespace WebCore {
 
 class IDBKeyRange : public ThreadSafeShared<IDBKeyRange> {
 public:
-    // Keep in sync with what's in the .idl file.
-    enum Flags {
-        SINGLE = 0,
-        LEFT_OPEN = 1,
-        RIGHT_OPEN = 2,
-        LEFT_BOUND = 4,
-        RIGHT_BOUND = 8,
-    };
-
-    static PassRefPtr<IDBKeyRange> create(PassRefPtr<IDBKey> left, PassRefPtr<IDBKey> right, unsigned short flags)
+    static PassRefPtr<IDBKeyRange> create(PassRefPtr<IDBKey> lower, PassRefPtr<IDBKey> upper, bool lowerOpen, bool upperOpen)
     {
-        return adoptRef(new IDBKeyRange(left, right, flags));
+        return adoptRef(new IDBKeyRange(lower, upper, lowerOpen, upperOpen));
     }
-
     ~IDBKeyRange() { }
 
 
-    PassRefPtr<IDBKey> left() const { return m_left; }
-    PassRefPtr<IDBKey> right() const { return m_right; }
-    unsigned short flags() const { return m_flags; }
+    PassRefPtr<IDBKey> lower() const { return m_lower; }
+    PassRefPtr<IDBKey> upper() const { return m_upper; }
+    bool lowerOpen() const { return m_lowerOpen; }
+    bool upperOpen() const { return m_upperOpen; }
 
-    String leftWhereClauseComparisonOperator() const;
-    String rightWhereClauseComparisonOperator() const;
+    String lowerWhereClauseComparisonOperator() const;
+    String upperWhereClauseComparisonOperator() const;
 
     static PassRefPtr<IDBKeyRange> only(PassRefPtr<IDBKey> value);
-    static PassRefPtr<IDBKeyRange> leftBound(PassRefPtr<IDBKey> bound, bool open = false);
-    static PassRefPtr<IDBKeyRange> rightBound(PassRefPtr<IDBKey> bound, bool open = false);
-    static PassRefPtr<IDBKeyRange> bound(PassRefPtr<IDBKey> left, PassRefPtr<IDBKey> right, bool openLeft = false, bool openRight = false);
+    static PassRefPtr<IDBKeyRange> lowerBound(PassRefPtr<IDBKey> bound, bool open = false);
+    static PassRefPtr<IDBKeyRange> upperBound(PassRefPtr<IDBKey> bound, bool open = false);
+    static PassRefPtr<IDBKeyRange> bound(PassRefPtr<IDBKey> lower, PassRefPtr<IDBKey> upper, const OptionsObject& = OptionsObject());
 
 private:
-    IDBKeyRange(PassRefPtr<IDBKey> left, PassRefPtr<IDBKey> right, unsigned short flags);
+    IDBKeyRange(PassRefPtr<IDBKey> lower, PassRefPtr<IDBKey> upper, bool lowerOpen, bool upperOpen);
 
-    RefPtr<IDBKey> m_left;
-    RefPtr<IDBKey> m_right;
-    unsigned short m_flags;
+    RefPtr<IDBKey> m_lower;
+    RefPtr<IDBKey> m_upper;
+    bool m_lowerOpen;
+    bool m_upperOpen;
 };
 
 } // namespace WebCore
diff --git a/WebCore/storage/IDBKeyRange.idl b/WebCore/storage/IDBKeyRange.idl
index 8e4d61f..d7fa075 100644
--- a/WebCore/storage/IDBKeyRange.idl
+++ b/WebCore/storage/IDBKeyRange.idl
@@ -28,22 +28,16 @@ module storage {
     interface [
         Conditional=INDEXED_DATABASE
     ] IDBKeyRange {
-        // Keep in sync with what's in the .h file.
-        const unsigned short SINGLE = 0;
-        const unsigned short LEFT_OPEN = 1;
-        const unsigned short RIGHT_OPEN = 2;
-        const unsigned short LEFT_BOUND = 4;
-        const unsigned short RIGHT_BOUND = 8;
-
-        readonly attribute IDBKey left;
-        readonly attribute IDBKey right;
-        readonly attribute unsigned short flags;
+        readonly attribute IDBKey lower;
+        readonly attribute IDBKey upper;
+        readonly attribute boolean lowerOpen;
+        readonly attribute boolean upperOpen;
 
         // FIXME: Make ClassMethod work for JSC as well.
         [ClassMethod] IDBKeyRange only(in IDBKey value);
-        [ClassMethod] IDBKeyRange leftBound(in IDBKey bound, in [Optional] boolean open);
-        [ClassMethod] IDBKeyRange rightBound(in IDBKey bound, in [Optional] boolean open);
-        [ClassMethod] IDBKeyRange bound(in IDBKey left, in IDBKey right, in [Optional] boolean openLeft, in [Optional] boolean openRight);
+        [ClassMethod] IDBKeyRange lowerBound(in IDBKey bound, in [Optional] boolean open);
+        [ClassMethod] IDBKeyRange upperBound(in IDBKey bound, in [Optional] boolean open);
+        [ClassMethod] IDBKeyRange bound(in IDBKey lower, in IDBKey upper, in [Optional] OptionsObject options);
     };
 
 }
diff --git a/WebCore/storage/IDBObjectStoreBackendImpl.cpp b/WebCore/storage/IDBObjectStoreBackendImpl.cpp
index 7fc4f98..56aa167 100644
--- a/WebCore/storage/IDBObjectStoreBackendImpl.cpp
+++ b/WebCore/storage/IDBObjectStoreBackendImpl.cpp
@@ -403,15 +403,15 @@ void IDBObjectStoreBackendImpl::openCursor(PassRefPtr<IDBKeyRange> prpRange, uns
 
 void IDBObjectStoreBackendImpl::openCursorInternal(ScriptExecutionContext*, PassRefPtr<IDBObjectStoreBackendImpl> objectStore, PassRefPtr<IDBKeyRange> range, unsigned short tmpDirection, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<IDBTransactionBackendInterface> transaction)
 {
-    bool leftBound = range && (range->flags() & IDBKeyRange::LEFT_BOUND || range->flags() == IDBKeyRange::SINGLE);
-    bool rightBound = range && (range->flags() & IDBKeyRange::RIGHT_BOUND || range->flags() == IDBKeyRange::SINGLE);
+    bool lowerBound = range && range->lower();
+    bool upperBound = range && range->upper();
 
     // Several files depend on this order of selects.
     String sql = "SELECT id, keyString, keyDate, keyNumber, value FROM ObjectStoreData WHERE ";
-    if (leftBound)
-        sql += range->left()->leftCursorWhereFragment(range->leftWhereClauseComparisonOperator());
-    if (rightBound)
-        sql += range->right()->rightCursorWhereFragment(range->rightWhereClauseComparisonOperator());
+    if (lowerBound)
+        sql += range->lower()->lowerCursorWhereFragment(range->lowerWhereClauseComparisonOperator());
+    if (upperBound)
+        sql += range->upper()->upperCursorWhereFragment(range->upperWhereClauseComparisonOperator());
     sql += "objectStoreId = ? ORDER BY ";
 
     IDBCursor::Direction direction = static_cast<IDBCursor::Direction>(tmpDirection);
@@ -425,10 +425,10 @@ void IDBObjectStoreBackendImpl::openCursorInternal(ScriptExecutionContext*, Pass
     ASSERT_UNUSED(ok, ok); // FIXME: Better error handling?
 
     int currentColumn = 1;
-    if (leftBound)
-        currentColumn += range->left()->bind(*query, currentColumn);
-    if (rightBound)
-        currentColumn += range->right()->bind(*query, currentColumn);
+    if (lowerBound)
+        currentColumn += range->lower()->bind(*query, currentColumn);
+    if (upperBound)
+        currentColumn += range->upper()->bind(*query, currentColumn);
     query->bindInt64(currentColumn, objectStore->id());
 
     if (query->step() != SQLResultRow) {
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 53c65a2..1d0c371 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,25 @@
+2010-11-26  Jeremy Orlow  <jorlow at chromium.org>
+
+        Reviewed by Steve Block.
+
+        Make IDBKeyRange match the spec
+        https://bugs.webkit.org/show_bug.cgi?id=50105
+
+        Remove flags and instead add two booleans for being open.
+        Change left to lower and right to upper everywhere.
+
+        * public/WebIDBKeyRange.h:
+        (WebKit::WebIDBKeyRange::WebIDBKeyRange):
+        * src/WebIDBKeyRange.cpp:
+        (WebKit::WebIDBKeyRange::assign):
+        (WebKit::WebIDBKeyRange::left):
+        (WebKit::WebIDBKeyRange::right):
+        (WebKit::WebIDBKeyRange::lower):
+        (WebKit::WebIDBKeyRange::upper):
+        (WebKit::WebIDBKeyRange::lowerOpen):
+        (WebKit::WebIDBKeyRange::upperOpen):
+        (WebKit::WebIDBKeyRange::flags):
+
 2010-11-25  Jeremy Orlow  <jorlow at chromium.org>
 
         Reviewed by Steve Block.
diff --git a/WebKit/chromium/public/WebIDBKeyRange.h b/WebKit/chromium/public/WebIDBKeyRange.h
index 82953ce..6a9c6da 100644
--- a/WebKit/chromium/public/WebIDBKeyRange.h
+++ b/WebKit/chromium/public/WebIDBKeyRange.h
@@ -41,14 +41,22 @@ public:
     ~WebIDBKeyRange() { reset(); }
 
     WebIDBKeyRange(const WebIDBKeyRange& keyRange) { assign(keyRange); }
-    WebIDBKeyRange(const WebIDBKey& left, const WebIDBKey& right, unsigned short flags) { assign(left, right, flags); }
+    WebIDBKeyRange(const WebIDBKey& lower, const WebIDBKey& upper, bool lowerOpen, bool upperOpen) { assign(lower, upper, lowerOpen, upperOpen); }
 
+    // FIXME: Remove next 3 methods after next roll.
+    WebIDBKeyRange(const WebIDBKey& lower, const WebIDBKey& upper, unsigned short flags) { assign(lower, upper, flags); }
+    WEBKIT_API void assign(const WebIDBKey& lower, const WebIDBKey& upper, unsigned short flags);
+    WEBKIT_API unsigned short flags() const;
     WEBKIT_API WebIDBKey left() const;
     WEBKIT_API WebIDBKey right() const;
-    WEBKIT_API unsigned short flags() const;
+
+    WEBKIT_API WebIDBKey lower() const;
+    WEBKIT_API WebIDBKey upper() const;
+    WEBKIT_API bool lowerOpen() const;
+    WEBKIT_API bool upperOpen() const;
 
     WEBKIT_API void assign(const WebIDBKeyRange&);
-    WEBKIT_API void assign(const WebIDBKey& left, const WebIDBKey& right, unsigned short flags);
+    WEBKIT_API void assign(const WebIDBKey& lower, const WebIDBKey& upper, bool lowerOpen, bool upperOpen);
     WEBKIT_API void reset();
 
 #if WEBKIT_IMPLEMENTATION
diff --git a/WebKit/chromium/src/WebIDBKeyRange.cpp b/WebKit/chromium/src/WebIDBKeyRange.cpp
index 720af5f..ec5b7c2 100644
--- a/WebKit/chromium/src/WebIDBKeyRange.cpp
+++ b/WebKit/chromium/src/WebIDBKeyRange.cpp
@@ -39,12 +39,24 @@ void WebIDBKeyRange::assign(const WebIDBKeyRange& other)
     m_private = other.m_private;
 }
 
-void WebIDBKeyRange::assign(const WebIDBKey& left, const WebIDBKey& right, unsigned short flags)
+void WebIDBKeyRange::assign(const WebIDBKey& lower, const WebIDBKey& upper, bool lowerOpen, bool upperOpen)
 {
-    if (left.type() == WebIDBKey::InvalidType && right.type() == WebIDBKey::InvalidType)
+    if (lower.type() == WebIDBKey::InvalidType && upper.type() == WebIDBKey::InvalidType)
         m_private = 0;
     else
-        m_private = IDBKeyRange::create(left, right, flags);
+        m_private = IDBKeyRange::create(lower, upper, lowerOpen, upperOpen);
+}
+
+// FIXME: Remove this after next roll.
+void WebIDBKeyRange::assign(const WebIDBKey& lower, const WebIDBKey& upper, unsigned short flags)
+{
+    bool lowerOpen = !!(flags & 1);
+    bool upperOpen = !!(flags & 2);
+
+    if (lower.type() == WebIDBKey::InvalidType && upper.type() == WebIDBKey::InvalidType)
+        m_private = 0;
+    else
+        m_private = IDBKeyRange::create(lower, upper, lowerOpen, upperOpen);
 }
 
 void WebIDBKeyRange::reset()
@@ -54,23 +66,50 @@ void WebIDBKeyRange::reset()
 
 WebIDBKey WebIDBKeyRange::left() const
 {
+    return lower();
+}
+
+WebIDBKey WebIDBKeyRange::right() const
+{
+    return upper();
+}
+
+WebIDBKey WebIDBKeyRange::lower() const
+{
     if (!m_private.get())
         return WebIDBKey::createInvalid();
-    return m_private->left();
+    return m_private->lower();
 }
 
-WebIDBKey WebIDBKeyRange::right() const
+WebIDBKey WebIDBKeyRange::upper() const
 {
     if (!m_private.get())
         return WebIDBKey::createInvalid();
-    return m_private->right();
+    return m_private->upper();
+}
+
+bool WebIDBKeyRange::lowerOpen() const
+{
+    return m_private.get() && m_private->lowerOpen();
 }
 
+bool WebIDBKeyRange::upperOpen() const
+{
+    return m_private.get() && m_private->upperOpen();
+}
+
+// FIXME: Remove this after next roll.
 unsigned short WebIDBKeyRange::flags() const
 {
     if (!m_private.get())
         return 0;
-    return m_private->flags();
+
+    unsigned short flags = 0;
+    if (m_private->lowerOpen())
+        flags |= 1;
+    if (m_private->upperOpen())
+        flags |= 2;
+    return flags;
 }
 
 WebIDBKeyRange::WebIDBKeyRange(const PassRefPtr<IDBKeyRange>& value)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list