Diff
Modified: trunk/LayoutTests/ChangeLog (207787 => 207788)
--- trunk/LayoutTests/ChangeLog 2016-10-24 23:34:32 UTC (rev 207787)
+++ trunk/LayoutTests/ChangeLog 2016-10-25 00:05:24 UTC (rev 207788)
@@ -1,3 +1,14 @@
+2016-10-24 Brady Eidson <beid...@apple.com>
+
+ IndexedDB 2.0: Support new IDBKeyRange interfaces.
+ <rdar://problem/28806929> and https://bugs.webkit.org/show_bug.cgi?id=163910
+
+ Reviewed by Andy Estes.
+
+ * storage/indexeddb/keyrange-expected.txt:
+ * storage/indexeddb/keyrange-private-expected.txt:
+ * storage/indexeddb/resources/keyrange.js:
+
2016-10-23 Yusuke Suzuki <utatane....@gmail.com>
[DOMJIT] Add a way for DOMJIT::Patchpoint to express effects
Modified: trunk/LayoutTests/storage/indexeddb/keyrange-expected.txt (207787 => 207788)
--- trunk/LayoutTests/storage/indexeddb/keyrange-expected.txt 2016-10-24 23:34:32 UTC (rev 207787)
+++ trunk/LayoutTests/storage/indexeddb/keyrange-expected.txt 2016-10-25 00:05:24 UTC (rev 207788)
@@ -9,6 +9,7 @@
PASS 'upper' in IDBKeyRange is false
PASS 'lowerOpen' in IDBKeyRange is false
PASS 'upperOpen' in IDBKeyRange is false
+PASS 'contains' in IDBKeyRange is false
PASS 'only' in IDBKeyRange is true
PASS 'lowerBound' in IDBKeyRange is true
PASS 'upperBound' in IDBKeyRange is true
@@ -19,6 +20,7 @@
PASS 'upper' in instance is true
PASS 'lowerOpen' in instance is true
PASS 'upperOpen' in instance is true
+PASS 'contains' in instance is true
PASS 'only' in instance is false
PASS 'lowerBound' in instance is false
PASS 'upperBound' in instance is false
@@ -29,186 +31,281 @@
PASS keyRange.upper is 1
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains(1.1) is false
+PASS keyRange.contains(0.9) is false
+PASS keyRange.contains(1) is true
IDBKeyRange.only(3.14)
PASS keyRange.lower is 3.14
PASS keyRange.upper is 3.14
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains(3.24) is false
+PASS keyRange.contains(3.04) is false
+PASS keyRange.contains(3.14) is true
IDBKeyRange.only('a')
PASS keyRange.lower is 'a'
PASS keyRange.upper is 'a'
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains('aa') is false
+PASS keyRange.contains('') is false
+PASS keyRange.contains('a') is true
IDBKeyRange.lowerBound(10,true)
PASS keyRange.lower is 10
PASS keyRange.lowerOpen is true
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains(10) is false
+PASS keyRange.contains(10.1) is true
+PASS keyRange.contains(9.9) is false
IDBKeyRange.lowerBound(11,false)
PASS keyRange.lower is 11
PASS keyRange.lowerOpen is false
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains(11) is true
+PASS keyRange.contains(11.1) is true
+PASS keyRange.contains(10.9) is false
IDBKeyRange.lowerBound(12,undefined)
PASS keyRange.lower is 12
PASS keyRange.lowerOpen is false
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains(12) is true
+PASS keyRange.contains(12.1) is true
+PASS keyRange.contains(11.9) is false
IDBKeyRange.lowerBound(10.1,true)
PASS keyRange.lower is 10.1
PASS keyRange.lowerOpen is true
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains(10.1) is false
+PASS keyRange.contains(10.2) is true
+PASS keyRange.contains(10) is false
IDBKeyRange.lowerBound(11.2,false)
PASS keyRange.lower is 11.2
PASS keyRange.lowerOpen is false
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains(11.2) is true
+PASS keyRange.contains(11.299999999999999) is true
+PASS keyRange.contains(11.1) is false
IDBKeyRange.lowerBound(12.3,undefined)
PASS keyRange.lower is 12.3
PASS keyRange.lowerOpen is false
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains(12.3) is true
+PASS keyRange.contains(12.4) is true
+PASS keyRange.contains(12.200000000000001) is false
IDBKeyRange.lowerBound('aa',true)
PASS keyRange.lower is 'aa'
PASS keyRange.lowerOpen is true
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains('aa') is false
+PASS keyRange.contains('aaa') is true
+PASS keyRange.contains('a') is false
IDBKeyRange.lowerBound('ab',false)
PASS keyRange.lower is 'ab'
PASS keyRange.lowerOpen is false
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains('ab') is true
+PASS keyRange.contains('abb') is true
+PASS keyRange.contains('a') is false
IDBKeyRange.lowerBound('ac',undefined)
PASS keyRange.lower is 'ac'
PASS keyRange.lowerOpen is false
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains('ac') is true
+PASS keyRange.contains('acc') is true
+PASS keyRange.contains('a') is false
IDBKeyRange.upperBound(20,true)
PASS keyRange.upper is 20
PASS keyRange.upperOpen is true
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains(20) is false
+PASS keyRange.contains(20.1) is false
+PASS keyRange.contains(19.9) is true
IDBKeyRange.upperBound(21,false)
PASS keyRange.upper is 21
PASS keyRange.upperOpen is false
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains(21) is true
+PASS keyRange.contains(21.1) is false
+PASS keyRange.contains(20.9) is true
IDBKeyRange.upperBound(22,undefined)
PASS keyRange.upper is 22
PASS keyRange.upperOpen is false
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains(22) is true
+PASS keyRange.contains(22.1) is false
+PASS keyRange.contains(21.9) is true
IDBKeyRange.upperBound(20.2,true)
PASS keyRange.upper is 20.2
PASS keyRange.upperOpen is true
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains(20.2) is false
+PASS keyRange.contains(20.3) is false
+PASS keyRange.contains(20.099999999999998) is true
IDBKeyRange.upperBound(21.3,false)
PASS keyRange.upper is 21.3
PASS keyRange.upperOpen is false
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains(21.3) is true
+PASS keyRange.contains(21.400000000000002) is false
+PASS keyRange.contains(21.2) is true
IDBKeyRange.upperBound(22.4,undefined)
PASS keyRange.upper is 22.4
PASS keyRange.upperOpen is false
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains(22.4) is true
+PASS keyRange.contains(22.5) is false
+PASS keyRange.contains(22.299999999999997) is true
IDBKeyRange.upperBound('ba',true)
PASS keyRange.upper is 'ba'
PASS keyRange.upperOpen is true
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains('ba') is false
+PASS keyRange.contains('baa') is false
+PASS keyRange.contains('b') is true
IDBKeyRange.upperBound('bb',false)
PASS keyRange.upper is 'bb'
PASS keyRange.upperOpen is false
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains('bb') is true
+PASS keyRange.contains('bbb') is false
+PASS keyRange.contains('b') is true
IDBKeyRange.upperBound('bc',undefined)
PASS keyRange.upper is 'bc'
PASS keyRange.upperOpen is false
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains('bc') is true
+PASS keyRange.contains('bcc') is false
+PASS keyRange.contains('b') is true
IDBKeyRange.bound(30,40, undefined, undefined)
PASS keyRange.lower is 30
PASS keyRange.upper is 40
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains(30) is true
+PASS keyRange.contains(40) is true
IDBKeyRange.bound(31,41, false, false)
PASS keyRange.lower is 31
PASS keyRange.upper is 41
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains(31) is true
+PASS keyRange.contains(41) is true
IDBKeyRange.bound(32,42, false, true)
PASS keyRange.lower is 32
PASS keyRange.upper is 42
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is true
+PASS keyRange.contains(32) is true
+PASS keyRange.contains(42) is false
IDBKeyRange.bound(33,43, true, false)
PASS keyRange.lower is 33
PASS keyRange.upper is 43
PASS keyRange.lowerOpen is true
PASS keyRange.upperOpen is false
+PASS keyRange.contains(33) is false
+PASS keyRange.contains(43) is true
IDBKeyRange.bound(34,44, true, true)
PASS keyRange.lower is 34
PASS keyRange.upper is 44
PASS keyRange.lowerOpen is true
PASS keyRange.upperOpen is true
+PASS keyRange.contains(34) is false
+PASS keyRange.contains(44) is false
IDBKeyRange.bound(30.1,40.2, undefined, undefined)
PASS keyRange.lower is 30.1
PASS keyRange.upper is 40.2
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains(30.1) is true
+PASS keyRange.contains(40.2) is true
IDBKeyRange.bound(31.3,41.4, false, false)
PASS keyRange.lower is 31.3
PASS keyRange.upper is 41.4
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains(31.3) is true
+PASS keyRange.contains(41.4) is true
IDBKeyRange.bound(32.5,42.6, false, true)
PASS keyRange.lower is 32.5
PASS keyRange.upper is 42.6
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is true
+PASS keyRange.contains(32.5) is true
+PASS keyRange.contains(42.6) is false
IDBKeyRange.bound(33.7,43.8, true, false)
PASS keyRange.lower is 33.7
PASS keyRange.upper is 43.8
PASS keyRange.lowerOpen is true
PASS keyRange.upperOpen is false
+PASS keyRange.contains(33.7) is false
+PASS keyRange.contains(43.8) is true
IDBKeyRange.bound(34.9,44, true, true)
PASS keyRange.lower is 34.9
PASS keyRange.upper is 44
PASS keyRange.lowerOpen is true
PASS keyRange.upperOpen is true
+PASS keyRange.contains(34.9) is false
+PASS keyRange.contains(44) is false
IDBKeyRange.bound('aaa','aba', false, false)
PASS keyRange.lower is 'aaa'
PASS keyRange.upper is 'aba'
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains('aaa') is true
+PASS keyRange.contains('aba') is true
IDBKeyRange.bound('aab','abb', undefined, undefined)
PASS keyRange.lower is 'aab'
PASS keyRange.upper is 'abb'
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains('aab') is true
+PASS keyRange.contains('abb') is true
IDBKeyRange.bound('aac','abc', false, false)
PASS keyRange.lower is 'aac'
PASS keyRange.upper is 'abc'
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains('aac') is true
+PASS keyRange.contains('abc') is true
IDBKeyRange.bound('aad','abd', false, true)
PASS keyRange.lower is 'aad'
PASS keyRange.upper is 'abd'
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is true
+PASS keyRange.contains('aad') is true
+PASS keyRange.contains('abd') is false
IDBKeyRange.bound('aae','abe', true, false)
PASS keyRange.lower is 'aae'
PASS keyRange.upper is 'abe'
PASS keyRange.lowerOpen is true
PASS keyRange.upperOpen is false
+PASS keyRange.contains('aae') is false
+PASS keyRange.contains('abe') is true
IDBKeyRange.bound('aaf','abf', true, true)
PASS keyRange.lower is 'aaf'
PASS keyRange.upper is 'abf'
PASS keyRange.lowerOpen is true
PASS keyRange.upperOpen is true
+PASS keyRange.contains('aaf') is false
+PASS keyRange.contains('abf') is false
Passing an invalid key into only({})
Expecting exception from IDBKeyRange.only({})
PASS Exception was thrown.
@@ -270,6 +367,12 @@
PASS ename is 'DataError'
Exception message: The data provided does not meet requirements.
Equal keys, none of the bounds is open, bound(4, 4, false, false)
+Passing an invalid key in to IDBKeyRange.contains({})
+Expecting exception from invalidKeyKeyRange.contains({})
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to execute 'contains' on 'IDBKeyRange': The passed-in value is not a valid IndexedDB key.
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/LayoutTests/storage/indexeddb/keyrange-private-expected.txt (207787 => 207788)
--- trunk/LayoutTests/storage/indexeddb/keyrange-private-expected.txt 2016-10-24 23:34:32 UTC (rev 207787)
+++ trunk/LayoutTests/storage/indexeddb/keyrange-private-expected.txt 2016-10-25 00:05:24 UTC (rev 207788)
@@ -9,6 +9,7 @@
PASS 'upper' in IDBKeyRange is false
PASS 'lowerOpen' in IDBKeyRange is false
PASS 'upperOpen' in IDBKeyRange is false
+PASS 'contains' in IDBKeyRange is false
PASS 'only' in IDBKeyRange is true
PASS 'lowerBound' in IDBKeyRange is true
PASS 'upperBound' in IDBKeyRange is true
@@ -19,6 +20,7 @@
PASS 'upper' in instance is true
PASS 'lowerOpen' in instance is true
PASS 'upperOpen' in instance is true
+PASS 'contains' in instance is true
PASS 'only' in instance is false
PASS 'lowerBound' in instance is false
PASS 'upperBound' in instance is false
@@ -29,186 +31,281 @@
PASS keyRange.upper is 1
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains(1.1) is false
+PASS keyRange.contains(0.9) is false
+PASS keyRange.contains(1) is true
IDBKeyRange.only(3.14)
PASS keyRange.lower is 3.14
PASS keyRange.upper is 3.14
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains(3.24) is false
+PASS keyRange.contains(3.04) is false
+PASS keyRange.contains(3.14) is true
IDBKeyRange.only('a')
PASS keyRange.lower is 'a'
PASS keyRange.upper is 'a'
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains('aa') is false
+PASS keyRange.contains('') is false
+PASS keyRange.contains('a') is true
IDBKeyRange.lowerBound(10,true)
PASS keyRange.lower is 10
PASS keyRange.lowerOpen is true
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains(10) is false
+PASS keyRange.contains(10.1) is true
+PASS keyRange.contains(9.9) is false
IDBKeyRange.lowerBound(11,false)
PASS keyRange.lower is 11
PASS keyRange.lowerOpen is false
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains(11) is true
+PASS keyRange.contains(11.1) is true
+PASS keyRange.contains(10.9) is false
IDBKeyRange.lowerBound(12,undefined)
PASS keyRange.lower is 12
PASS keyRange.lowerOpen is false
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains(12) is true
+PASS keyRange.contains(12.1) is true
+PASS keyRange.contains(11.9) is false
IDBKeyRange.lowerBound(10.1,true)
PASS keyRange.lower is 10.1
PASS keyRange.lowerOpen is true
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains(10.1) is false
+PASS keyRange.contains(10.2) is true
+PASS keyRange.contains(10) is false
IDBKeyRange.lowerBound(11.2,false)
PASS keyRange.lower is 11.2
PASS keyRange.lowerOpen is false
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains(11.2) is true
+PASS keyRange.contains(11.299999999999999) is true
+PASS keyRange.contains(11.1) is false
IDBKeyRange.lowerBound(12.3,undefined)
PASS keyRange.lower is 12.3
PASS keyRange.lowerOpen is false
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains(12.3) is true
+PASS keyRange.contains(12.4) is true
+PASS keyRange.contains(12.200000000000001) is false
IDBKeyRange.lowerBound('aa',true)
PASS keyRange.lower is 'aa'
PASS keyRange.lowerOpen is true
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains('aa') is false
+PASS keyRange.contains('aaa') is true
+PASS keyRange.contains('a') is false
IDBKeyRange.lowerBound('ab',false)
PASS keyRange.lower is 'ab'
PASS keyRange.lowerOpen is false
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains('ab') is true
+PASS keyRange.contains('abb') is true
+PASS keyRange.contains('a') is false
IDBKeyRange.lowerBound('ac',undefined)
PASS keyRange.lower is 'ac'
PASS keyRange.lowerOpen is false
PASS keyRange.upper is undefined.
PASS keyRange.upperOpen is true
+PASS keyRange.contains('ac') is true
+PASS keyRange.contains('acc') is true
+PASS keyRange.contains('a') is false
IDBKeyRange.upperBound(20,true)
PASS keyRange.upper is 20
PASS keyRange.upperOpen is true
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains(20) is false
+PASS keyRange.contains(20.1) is false
+PASS keyRange.contains(19.9) is true
IDBKeyRange.upperBound(21,false)
PASS keyRange.upper is 21
PASS keyRange.upperOpen is false
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains(21) is true
+PASS keyRange.contains(21.1) is false
+PASS keyRange.contains(20.9) is true
IDBKeyRange.upperBound(22,undefined)
PASS keyRange.upper is 22
PASS keyRange.upperOpen is false
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains(22) is true
+PASS keyRange.contains(22.1) is false
+PASS keyRange.contains(21.9) is true
IDBKeyRange.upperBound(20.2,true)
PASS keyRange.upper is 20.2
PASS keyRange.upperOpen is true
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains(20.2) is false
+PASS keyRange.contains(20.3) is false
+PASS keyRange.contains(20.099999999999998) is true
IDBKeyRange.upperBound(21.3,false)
PASS keyRange.upper is 21.3
PASS keyRange.upperOpen is false
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains(21.3) is true
+PASS keyRange.contains(21.400000000000002) is false
+PASS keyRange.contains(21.2) is true
IDBKeyRange.upperBound(22.4,undefined)
PASS keyRange.upper is 22.4
PASS keyRange.upperOpen is false
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains(22.4) is true
+PASS keyRange.contains(22.5) is false
+PASS keyRange.contains(22.299999999999997) is true
IDBKeyRange.upperBound('ba',true)
PASS keyRange.upper is 'ba'
PASS keyRange.upperOpen is true
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains('ba') is false
+PASS keyRange.contains('baa') is false
+PASS keyRange.contains('b') is true
IDBKeyRange.upperBound('bb',false)
PASS keyRange.upper is 'bb'
PASS keyRange.upperOpen is false
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains('bb') is true
+PASS keyRange.contains('bbb') is false
+PASS keyRange.contains('b') is true
IDBKeyRange.upperBound('bc',undefined)
PASS keyRange.upper is 'bc'
PASS keyRange.upperOpen is false
PASS keyRange.lower is undefined.
PASS keyRange.lowerOpen is true
+PASS keyRange.contains('bc') is true
+PASS keyRange.contains('bcc') is false
+PASS keyRange.contains('b') is true
IDBKeyRange.bound(30,40, undefined, undefined)
PASS keyRange.lower is 30
PASS keyRange.upper is 40
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains(30) is true
+PASS keyRange.contains(40) is true
IDBKeyRange.bound(31,41, false, false)
PASS keyRange.lower is 31
PASS keyRange.upper is 41
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains(31) is true
+PASS keyRange.contains(41) is true
IDBKeyRange.bound(32,42, false, true)
PASS keyRange.lower is 32
PASS keyRange.upper is 42
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is true
+PASS keyRange.contains(32) is true
+PASS keyRange.contains(42) is false
IDBKeyRange.bound(33,43, true, false)
PASS keyRange.lower is 33
PASS keyRange.upper is 43
PASS keyRange.lowerOpen is true
PASS keyRange.upperOpen is false
+PASS keyRange.contains(33) is false
+PASS keyRange.contains(43) is true
IDBKeyRange.bound(34,44, true, true)
PASS keyRange.lower is 34
PASS keyRange.upper is 44
PASS keyRange.lowerOpen is true
PASS keyRange.upperOpen is true
+PASS keyRange.contains(34) is false
+PASS keyRange.contains(44) is false
IDBKeyRange.bound(30.1,40.2, undefined, undefined)
PASS keyRange.lower is 30.1
PASS keyRange.upper is 40.2
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains(30.1) is true
+PASS keyRange.contains(40.2) is true
IDBKeyRange.bound(31.3,41.4, false, false)
PASS keyRange.lower is 31.3
PASS keyRange.upper is 41.4
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains(31.3) is true
+PASS keyRange.contains(41.4) is true
IDBKeyRange.bound(32.5,42.6, false, true)
PASS keyRange.lower is 32.5
PASS keyRange.upper is 42.6
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is true
+PASS keyRange.contains(32.5) is true
+PASS keyRange.contains(42.6) is false
IDBKeyRange.bound(33.7,43.8, true, false)
PASS keyRange.lower is 33.7
PASS keyRange.upper is 43.8
PASS keyRange.lowerOpen is true
PASS keyRange.upperOpen is false
+PASS keyRange.contains(33.7) is false
+PASS keyRange.contains(43.8) is true
IDBKeyRange.bound(34.9,44, true, true)
PASS keyRange.lower is 34.9
PASS keyRange.upper is 44
PASS keyRange.lowerOpen is true
PASS keyRange.upperOpen is true
+PASS keyRange.contains(34.9) is false
+PASS keyRange.contains(44) is false
IDBKeyRange.bound('aaa','aba', false, false)
PASS keyRange.lower is 'aaa'
PASS keyRange.upper is 'aba'
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains('aaa') is true
+PASS keyRange.contains('aba') is true
IDBKeyRange.bound('aab','abb', undefined, undefined)
PASS keyRange.lower is 'aab'
PASS keyRange.upper is 'abb'
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains('aab') is true
+PASS keyRange.contains('abb') is true
IDBKeyRange.bound('aac','abc', false, false)
PASS keyRange.lower is 'aac'
PASS keyRange.upper is 'abc'
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is false
+PASS keyRange.contains('aac') is true
+PASS keyRange.contains('abc') is true
IDBKeyRange.bound('aad','abd', false, true)
PASS keyRange.lower is 'aad'
PASS keyRange.upper is 'abd'
PASS keyRange.lowerOpen is false
PASS keyRange.upperOpen is true
+PASS keyRange.contains('aad') is true
+PASS keyRange.contains('abd') is false
IDBKeyRange.bound('aae','abe', true, false)
PASS keyRange.lower is 'aae'
PASS keyRange.upper is 'abe'
PASS keyRange.lowerOpen is true
PASS keyRange.upperOpen is false
+PASS keyRange.contains('aae') is false
+PASS keyRange.contains('abe') is true
IDBKeyRange.bound('aaf','abf', true, true)
PASS keyRange.lower is 'aaf'
PASS keyRange.upper is 'abf'
PASS keyRange.lowerOpen is true
PASS keyRange.upperOpen is true
+PASS keyRange.contains('aaf') is false
+PASS keyRange.contains('abf') is false
Passing an invalid key into only({})
Expecting exception from IDBKeyRange.only({})
PASS Exception was thrown.
@@ -270,6 +367,12 @@
PASS ename is 'DataError'
Exception message: The data provided does not meet requirements.
Equal keys, none of the bounds is open, bound(4, 4, false, false)
+Passing an invalid key in to IDBKeyRange.contains({})
+Expecting exception from invalidKeyKeyRange.contains({})
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to execute 'contains' on 'IDBKeyRange': The passed-in value is not a valid IndexedDB key.
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/LayoutTests/storage/indexeddb/resources/keyrange.js (207787 => 207788)
--- trunk/LayoutTests/storage/indexeddb/resources/keyrange.js 2016-10-24 23:34:32 UTC (rev 207787)
+++ trunk/LayoutTests/storage/indexeddb/resources/keyrange.js 2016-10-25 00:05:24 UTC (rev 207788)
@@ -5,6 +5,38 @@
description("Test IndexedDB's KeyRange.");
+function incrementedKey(key)
+{
+ if (typeof key == "number")
+ return key + 0.1;
+ if (typeof key == "string") {
+ if (key.length < 2)
+ testFailed("String key is too short: " + key);
+ if (key.charAt(key.length - 1) != "'")
+ testFailed("Completely unexpected string key: " + key);
+
+ return key.substring(0, key.length - 1) + key.charAt(key.length - 2) + "'";
+ }
+
+ testFailed("Incrementing unexpected key type: " + typeof key);
+}
+
+function decrementedKey(key)
+{
+ if (typeof key == "number")
+ return key - 0.1;
+ if (typeof key == "string") {
+ if (key.length < 3)
+ testFailed("String key is too short: " + key);
+ if (key.charAt(key.length - 1) != "'")
+ testFailed("Completely unexpected string key: " + key);
+
+ return key.substring(0, key.length - 2) + "'";
+ }
+
+ testFailed("Decrementing unexpected key type: " + typeof key);
+}
+
function checkSingleKeyRange(value)
{
keyRange = evalAndLog("IDBKeyRange.only(" + value + ")");
@@ -12,6 +44,9 @@
shouldBe("keyRange.upper", "" + value);
shouldBeFalse("keyRange.lowerOpen");
shouldBeFalse("keyRange.upperOpen");
+ shouldBeFalse("keyRange.contains(" + incrementedKey(value) + ")");
+ shouldBeFalse("keyRange.contains(" + decrementedKey(value) + ")");
+ shouldBeTrue("keyRange.contains(" + value + ")");
}
function checkLowerBoundKeyRange(value, open)
@@ -23,6 +58,14 @@
shouldBe("keyRange.lowerOpen", "" + open);
shouldBeUndefined("keyRange.upper");
shouldBeTrue("keyRange.upperOpen");
+
+ if (open)
+ shouldBeFalse("keyRange.contains(" + value + ")");
+ else
+ shouldBeTrue("keyRange.contains(" + value + ")");
+
+ shouldBeTrue("keyRange.contains(" + incrementedKey(value) + ")");
+ shouldBeFalse("keyRange.contains(" + decrementedKey(value) + ")");
}
function checkUpperBoundKeyRange(value, open)
@@ -34,6 +77,14 @@
shouldBe("keyRange.upperOpen", "" + open);
shouldBeUndefined("keyRange.lower");
shouldBeTrue("keyRange.lowerOpen");
+
+ if (open)
+ shouldBeFalse("keyRange.contains(" + value + ")");
+ else
+ shouldBeTrue("keyRange.contains(" + value + ")");
+
+ shouldBeFalse("keyRange.contains(" + incrementedKey(value) + ")");
+ shouldBeTrue("keyRange.contains(" + decrementedKey(value) + ")");
}
function checkBoundKeyRange(lower, upper, lowerOpen, upperOpen)
@@ -47,6 +98,16 @@
upperOpen = false;
shouldBe("keyRange.lowerOpen", "" + lowerOpen);
shouldBe("keyRange.upperOpen", "" + upperOpen);
+
+ if (lowerOpen)
+ shouldBeFalse("keyRange.contains(" + lower + ")");
+ else
+ shouldBeTrue("keyRange.contains(" + lower + ")");
+
+ if (upperOpen)
+ shouldBeFalse("keyRange.contains(" + upper + ")");
+ else
+ shouldBeTrue("keyRange.contains(" + upper + ")");
}
function test()
@@ -56,6 +117,7 @@
shouldBeFalse("'upper' in IDBKeyRange");
shouldBeFalse("'lowerOpen' in IDBKeyRange");
shouldBeFalse("'upperOpen' in IDBKeyRange");
+ shouldBeFalse("'contains' in IDBKeyRange");
shouldBeTrue("'only' in IDBKeyRange");
shouldBeTrue("'lowerBound' in IDBKeyRange");
shouldBeTrue("'upperBound' in IDBKeyRange");
@@ -68,6 +130,7 @@
shouldBeTrue("'upper' in instance");
shouldBeTrue("'lowerOpen' in instance");
shouldBeTrue("'upperOpen' in instance");
+ shouldBeTrue("'contains' in instance");
shouldBeFalse("'only' in instance");
shouldBeFalse("'lowerBound' in instance");
shouldBeFalse("'upperBound' in instance");
@@ -150,6 +213,10 @@
debug("Equal keys, none of the bounds is open, bound(4, 4, false, false)");
IDBKeyRange.bound(4, 4, false, false);
+
+ debug("Passing an invalid key in to IDBKeyRange.contains({})");
+ eval("invalidKeyKeyRange = IDBKeyRange.only('a')");
+ evalAndExpectException("invalidKeyKeyRange.contains({})", "0", "'DataError'");
}
test();
Modified: trunk/Source/WebCore/ChangeLog (207787 => 207788)
--- trunk/Source/WebCore/ChangeLog 2016-10-24 23:34:32 UTC (rev 207787)
+++ trunk/Source/WebCore/ChangeLog 2016-10-25 00:05:24 UTC (rev 207788)
@@ -1,3 +1,19 @@
+2016-10-24 Brady Eidson <beid...@apple.com>
+
+ IndexedDB 2.0: Support new IDBKeyRange interfaces.
+ <rdar://problem/28806929> and https://bugs.webkit.org/show_bug.cgi?id=163910
+
+ Reviewed by Andy Estes.
+
+ No new tests (Covered by additions to existing test)
+
+ The "new IDBKeyRanges interfaces" really just means adding the instance method IDBKeyRange.contains.
+
+ * Modules/indexeddb/IDBKeyRange.cpp:
+ (WebCore::IDBKeyRange::contains):
+ * Modules/indexeddb/IDBKeyRange.h:
+ * Modules/indexeddb/IDBKeyRange.idl:
+
2016-10-23 Yusuke Suzuki <utatane....@gmail.com>
[DOMJIT] Add a way for DOMJIT::Patchpoint to express effects
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBKeyRange.cpp (207787 => 207788)
--- trunk/Source/WebCore/Modules/indexeddb/IDBKeyRange.cpp 2016-10-24 23:34:32 UTC (rev 207787)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBKeyRange.cpp 2016-10-25 00:05:24 UTC (rev 207788)
@@ -113,6 +113,33 @@
return m_lower && m_upper && !m_isLowerOpen && !m_isUpperOpen && m_lower->isEqual(*m_upper);
}
+ExceptionOr<bool> IDBKeyRange::contains(JSC::ExecState& state, JSC::JSValue keyValue)
+{
+ auto key = scriptValueToIDBKey(state, keyValue);
+ if (!key->isValid())
+ return Exception { IDBDatabaseException::DataError, "Failed to execute 'contains' on 'IDBKeyRange': The passed-in value is not a valid IndexedDB key." };
+
+ if (m_lower) {
+ int compare = m_lower->compare(key.get());
+
+ if (compare > 0)
+ return false;
+ if (m_isLowerOpen && !compare)
+ return false;
+ }
+
+ if (m_upper) {
+ int compare = m_upper->compare(key.get());
+
+ if (compare < 0)
+ return false;
+ if (m_isUpperOpen && !compare)
+ return false;
+ }
+
+ return true;
+}
+
} // namespace WebCore
#endif // ENABLE(INDEXED_DATABASE)
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBKeyRange.h (207787 => 207788)
--- trunk/Source/WebCore/Modules/indexeddb/IDBKeyRange.h 2016-10-24 23:34:32 UTC (rev 207787)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBKeyRange.h 2016-10-25 00:05:24 UTC (rev 207788)
@@ -63,6 +63,8 @@
static ExceptionOr<Ref<IDBKeyRange>> bound(JSC::ExecState&, JSC::JSValue lower, JSC::JSValue upper, bool lowerOpen, bool upperOpen);
+ ExceptionOr<bool> contains(JSC::ExecState&, JSC::JSValue key);
+
WEBCORE_EXPORT bool isOnlyKey() const;
private:
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBKeyRange.idl (207787 => 207788)
--- trunk/Source/WebCore/Modules/indexeddb/IDBKeyRange.idl 2016-10-24 23:34:32 UTC (rev 207787)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBKeyRange.idl 2016-10-25 00:05:24 UTC (rev 207788)
@@ -37,4 +37,6 @@
[CallWith=ScriptState, MayThrowException] static IDBKeyRange lowerBound(any lower, optional boolean open = false);
[CallWith=ScriptState, MayThrowException] static IDBKeyRange upperBound(any upper, optional boolean open = false);
[CallWith=ScriptState, MayThrowException] static IDBKeyRange bound(any lower, any upper, optional boolean lowerOpen = false, optional boolean upperOpen = false);
+
+ [CallWith=ScriptState, MayThrowException] boolean contains(any key);
};