summaryrefslogtreecommitdiffstats
path: root/LayoutTests/storage
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-05 14:36:32 +0100
committerBen Murdoch <benm@google.com>2011-05-10 15:38:30 +0100
commitf05b935882198ccf7d81675736e3aeb089c5113a (patch)
tree4ea0ca838d9ef1b15cf17ddb3928efb427c7e5a1 /LayoutTests/storage
parent60fbdcc62bced8db2cb1fd233cc4d1e4ea17db1b (diff)
downloadexternal_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.zip
external_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.tar.gz
external_webkit-f05b935882198ccf7d81675736e3aeb089c5113a.tar.bz2
Merge WebKit at r74534: Initial merge by git.
Change-Id: I6ccd1154fa1b19c2ec2a66878eb675738735f1eb
Diffstat (limited to 'LayoutTests/storage')
-rw-r--r--LayoutTests/storage/domstorage/localstorage/private-browsing-affects-storage-expected.txt8
-rw-r--r--LayoutTests/storage/domstorage/sessionstorage/private-browsing-affects-storage-expected.txt8
-rw-r--r--LayoutTests/storage/hash-change-with-xhr.js6
-rw-r--r--LayoutTests/storage/indexeddb/cursor-delete-expected.txt133
-rw-r--r--LayoutTests/storage/indexeddb/cursor-delete.html132
-rw-r--r--LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt134
-rw-r--r--LayoutTests/storage/indexeddb/cursor-index-delete.html136
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-basics-expected.txt31
-rw-r--r--LayoutTests/storage/indexeddb/objectstore-basics.html45
-rw-r--r--LayoutTests/storage/indexeddb/transaction-crash-on-abort-expected.txt32
-rw-r--r--LayoutTests/storage/indexeddb/transaction-crash-on-abort.html44
-rw-r--r--LayoutTests/storage/private-browsing-noread-nowrite-expected.txt (renamed from LayoutTests/storage/private-browsing-readonly-expected.txt)2
-rw-r--r--LayoutTests/storage/private-browsing-noread-nowrite.html (renamed from LayoutTests/storage/private-browsing-readonly.html)5
13 files changed, 669 insertions, 47 deletions
diff --git a/LayoutTests/storage/domstorage/localstorage/private-browsing-affects-storage-expected.txt b/LayoutTests/storage/domstorage/localstorage/private-browsing-affects-storage-expected.txt
index 6de4296..2fea061 100644
--- a/LayoutTests/storage/domstorage/localstorage/private-browsing-affects-storage-expected.txt
+++ b/LayoutTests/storage/domstorage/localstorage/private-browsing-affects-storage-expected.txt
@@ -1,7 +1,7 @@
This is a test to make sure that when private browsing is on any attempt to change the localStorage area fail.
-Initial value of testItem is: InitialValue
+Initial value of testItem is: null
Caught exception trying to change item: Error: QUOTA_EXCEEDED_ERR: DOM Exception 22
-After change attempt, testItem is: InitialValue
-After remove attempt, testItem is: InitialValue
-After clear attempt, testItem is: InitialValue
+After change attempt, testItem is: null
+After remove attempt, testItem is: null
+After clear attempt, testItem is: null
diff --git a/LayoutTests/storage/domstorage/sessionstorage/private-browsing-affects-storage-expected.txt b/LayoutTests/storage/domstorage/sessionstorage/private-browsing-affects-storage-expected.txt
index ed2017a..58c99f2 100644
--- a/LayoutTests/storage/domstorage/sessionstorage/private-browsing-affects-storage-expected.txt
+++ b/LayoutTests/storage/domstorage/sessionstorage/private-browsing-affects-storage-expected.txt
@@ -1,7 +1,7 @@
This is a test to make sure that when private browsing is on any attempt to change the sessionStorage area fail.
-Initial value of testItem is: InitialValue
+Initial value of testItem is: null
Caught exception trying to change item: Error: QUOTA_EXCEEDED_ERR: DOM Exception 22
-After change attempt, testItem is: InitialValue
-After remove attempt, testItem is: InitialValue
-After clear attempt, testItem is: InitialValue
+After change attempt, testItem is: null
+After remove attempt, testItem is: null
+After clear attempt, testItem is: null
diff --git a/LayoutTests/storage/hash-change-with-xhr.js b/LayoutTests/storage/hash-change-with-xhr.js
index 4290681..7f56f79 100644
--- a/LayoutTests/storage/hash-change-with-xhr.js
+++ b/LayoutTests/storage/hash-change-with-xhr.js
@@ -81,6 +81,12 @@ function invokeBack()
function runTest()
{
+ // Location changes need to happen outside the onload handler to generate history entries.
+ setTimeout(runTestsInner, 0);
+}
+
+function runTestsInner()
+{
backIterations = 10;
consecutiveFailures = 0;
successes = 0;
diff --git a/LayoutTests/storage/indexeddb/cursor-delete-expected.txt b/LayoutTests/storage/indexeddb/cursor-delete-expected.txt
new file mode 100644
index 0000000..1fdf9ed
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/cursor-delete-expected.txt
@@ -0,0 +1,133 @@
+Test IndexedDB's openCursor.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+webkitIndexedDB.open('name')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+objectStore = db.createObjectStore('test')
+objectStore.add('myValue1', 'myKey1')
+objectStore.add('myValue2', 'myKey2')
+objectStore.add('myValue3', 'myKey3')
+objectStore.add('myValue4', 'myKey4')
+openCursor1
+trans = db.transaction('test', webkitIDBTransaction.READ_WRITE)
+trans.objectStore('test').openCursor({range: keyRange})
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+event.result.delete()
+PASS event.result.value is "myValue1"
+event.result.continue()
+event.result.delete()
+PASS event.result.value is "myValue2"
+event.result.continue()
+event.result.delete()
+PASS event.result.value is "myValue3"
+event.result.continue()
+event.result.delete()
+PASS event.result.value is "myValue4"
+event.result.continue()
+PASS counter is 5
+trans.objectStore('test').openCursor({range: keyRange})
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+WARN: shouldBe() expects string arguments
+PASS null is null
+trans = db.transaction('test', webkitIDBTransaction.READ_WRITE)
+objectStore = trans.objectStore('test')
+objectStore.add('myValue1', 'myKey1')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+openCursor2
+objectStore.openCursor({range: keyRange})
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS [object IDBCursor] is non-null.
+event.result.delete()
+objectStore.get('myKey1')
+Error event fired:
+PASS 'result' in event is false
+PASS 'code' in event is true
+PASS 'message' in event is true
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/cursor-delete.html b/LayoutTests/storage/indexeddb/cursor-delete.html
new file mode 100644
index 0000000..ce62d6a
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/cursor-delete.html
@@ -0,0 +1,132 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test IndexedDB's openCursor.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+test();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name')");
+ verifyResult(result);
+ result.onsuccess = openSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ verifySuccessEvent(event);
+ var db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = setVersionSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersionSuccess()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+ trans.oncomplete = openCursor;
+
+ deleteAllObjectStores(db, createAndPopulateObjectStore);
+}
+
+function createAndPopulateObjectStore()
+{
+ var objectStore = evalAndLog("objectStore = db.createObjectStore('test')");
+ evalAndLog("objectStore.add('myValue1', 'myKey1')");
+ evalAndLog("objectStore.add('myValue2', 'myKey2')");
+ evalAndLog("objectStore.add('myValue3', 'myKey3')");
+ evalAndLog("objectStore.add('myValue4', 'myKey4')");
+}
+
+function openCursor()
+{
+ debug("openCursor1");
+ evalAndLog("trans = db.transaction('test', webkitIDBTransaction.READ_WRITE)");
+ keyRange = webkitIDBKeyRange.lowerBound("myKey1");
+ result = evalAndLog("trans.objectStore('test').openCursor({range: keyRange})");
+ verifyResult(result);
+ result.onsuccess = cursorSuccess;
+ result.onerror = unexpectedErrorCallback;
+ counter = 1;
+}
+
+function cursorSuccess()
+{
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ result = evalAndLog("trans.objectStore('test').openCursor({range: keyRange})");
+ verifyResult(result);
+ result.onsuccess = cursorEmpty;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+ evalAndLog("event.result.delete()");
+ shouldBeEqualToString("event.result.value", "myValue" + counter++);
+ evalAndLog("event.result.continue()");
+}
+
+function cursorEmpty()
+{
+ verifySuccessEvent(event);
+ shouldBeNull(event.result);
+ trans.oncomplete = addObject;
+}
+
+function addObject()
+{
+ evalAndLog("trans = db.transaction('test', webkitIDBTransaction.READ_WRITE)");
+ objectStore = evalAndLog("objectStore = trans.objectStore('test')");
+ result = evalAndLog("objectStore.add('myValue1', 'myKey1')");
+ verifyResult(result);
+ result.onsuccess = openCursor2;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openCursor2()
+{
+ debug("openCursor2");
+ result = evalAndLog("objectStore.openCursor({range: keyRange})");
+ verifyResult(result);
+ result.onsuccess = deleteObject;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function deleteObject()
+{
+ verifySuccessEvent(event);
+ shouldBeNonNull(event.result);
+ evalAndLog("event.result.delete()");
+ result = evalAndLog("objectStore.get('myKey1')");
+ result.onsuccess = unexpectedSuccessCallback;
+ result.onerror = verifyObjectDeleted;
+}
+
+function verifyObjectDeleted()
+{
+ verifyErrorEvent(event);
+ done();
+}
+
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt b/LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt
new file mode 100644
index 0000000..4598556
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt
@@ -0,0 +1,134 @@
+Test IndexedDB's openCursor.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+webkitIndexedDB.open('name')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+db.setVersion('new version')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+setVersionSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+trans = event.result
+PASS trans !== null is true
+Deleted all object stores.
+objectStore = db.createObjectStore('test')
+objectStore.createIndex('testIndex', 'x')
+objectStore.add({x: 1}, 'myKey1')
+objectStore.add({x: 2}, 'myKey2')
+objectStore.add({x: 3}, 'myKey3')
+objectStore.add({x: 4}, 'myKey4')
+openCursor1
+trans = db.transaction('test', webkitIDBTransaction.READ_WRITE)
+trans.objectStore('test').index('testIndex').openCursor({range: keyRange})
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+event.result.delete()
+PASS event.result.key is counter++
+event.result.continue()
+event.result.delete()
+PASS event.result.key is counter++
+event.result.continue()
+event.result.delete()
+PASS event.result.key is counter++
+event.result.continue()
+event.result.delete()
+PASS event.result.key is counter++
+event.result.continue()
+PASS counter is 5
+trans.objectStore('test').index('testIndex').openCursor({range: keyRange})
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS event.result is null
+trans = db.transaction('test', webkitIDBTransaction.READ_WRITE)
+objectStore = trans.objectStore('test')
+objectStore.add({x: 1}, 'myKey1')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+openCursor2
+index = event.source.index('testIndex')
+index.openCursor({range: keyRange})
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS [object IDBCursor] is non-null.
+event.result.delete()
+index.get(1)
+Error event fired:
+PASS 'result' in event is false
+PASS 'code' in event is true
+PASS 'message' in event is true
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/cursor-index-delete.html b/LayoutTests/storage/indexeddb/cursor-index-delete.html
new file mode 100644
index 0000000..ea10f02
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/cursor-index-delete.html
@@ -0,0 +1,136 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test IndexedDB's openCursor.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+test();
+
+function test()
+{
+ result = evalAndLog("webkitIndexedDB.open('name')");
+ verifyResult(result);
+ result.onsuccess = openSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ verifySuccessEvent(event);
+ var db = evalAndLog("db = event.result");
+
+ result = evalAndLog("db.setVersion('new version')");
+ verifyResult(result);
+ result.onsuccess = setVersionSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function setVersionSuccess()
+{
+ debug("setVersionSuccess():");
+ verifySuccessEvent(event);
+ window.trans = evalAndLog("trans = event.result");
+ shouldBeTrue("trans !== null");
+ trans.onabort = unexpectedAbortCallback;
+ trans.oncomplete = openCursor;
+
+ deleteAllObjectStores(db, createAndPopulateObjectStoreAndIndex);
+}
+
+function createAndPopulateObjectStoreAndIndex()
+{
+ objectStore = evalAndLog("objectStore = db.createObjectStore('test')");
+ evalAndLog("objectStore.createIndex('testIndex', 'x')");
+
+ evalAndLog("objectStore.add({x: 1}, 'myKey1')");
+ evalAndLog("objectStore.add({x: 2}, 'myKey2')");
+ evalAndLog("objectStore.add({x: 3}, 'myKey3')");
+ evalAndLog("objectStore.add({x: 4}, 'myKey4')");
+}
+
+function openCursor()
+{
+ debug("openCursor1");
+ evalAndLog("trans = db.transaction('test', webkitIDBTransaction.READ_WRITE)");
+ keyRange = webkitIDBKeyRange.lowerBound(1);
+ result = evalAndLog("trans.objectStore('test').index('testIndex').openCursor({range: keyRange})");
+ verifyResult(result);
+ result.onsuccess = cursorSuccess;
+ result.onerror = unexpectedErrorCallback;
+ counter = 1;
+}
+
+function cursorSuccess()
+{
+ if (event.result == null) {
+ shouldBe("counter", "5");
+ result = evalAndLog("trans.objectStore('test').index('testIndex').openCursor({range: keyRange})");
+ verifyResult(result);
+ result.onsuccess = cursorEmpty;
+ result.onerror = unexpectedErrorCallback;
+ return;
+ }
+ var deleteResult = evalAndLog("event.result.delete()");
+ deleteResult.onerror = unexpectedErrorCallback;
+ shouldBe("event.result.key", "counter++");
+ evalAndLog("event.result.continue()");
+}
+
+function cursorEmpty()
+{
+ verifySuccessEvent(event);
+ shouldBeNull("event.result");
+ trans.oncomplete = addObject;
+}
+
+function addObject()
+{
+ evalAndLog("trans = db.transaction('test', webkitIDBTransaction.READ_WRITE)");
+ objectStore = evalAndLog("objectStore = trans.objectStore('test')");
+ result = evalAndLog("objectStore.add({x: 1}, 'myKey1')");
+ verifyResult(result);
+ result.onsuccess = openCursor2;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openCursor2()
+{
+ debug("openCursor2");
+ evalAndLog("index = event.source.index('testIndex')");
+ result = evalAndLog("index.openCursor({range: keyRange})");
+ verifyResult(result);
+ result.onsuccess = deleteObject;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function deleteObject()
+{
+ verifySuccessEvent(event);
+ shouldBeNonNull(event.result);
+ evalAndLog("event.result.delete()");
+ result = evalAndLog("index.get(1)");
+ result.onsuccess = unexpectedSuccessCallback;
+ result.onerror = verifyObjectDeleted;
+}
+
+function verifyObjectDeleted()
+{
+ verifyErrorEvent(event);
+ done();
+}
+
+var successfullyParsed = true;
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt b/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
index e736d2f..17746d3 100644
--- a/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
+++ b/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
@@ -98,22 +98,13 @@ PASS store.indexNames.item(100) is null
transaction = db.transaction()
store = transaction.objectStore('storeName')
Try to insert data with a Date key:
-store.add({x: 'foo'}, new Date())
-PASS Exception thrown
-PASS code is DOMException.TYPE_MISMATCH_ERR
+store.add({x: 'foo'}, testDate)
Try to insert a value not handled by structured clone:
store.add({x: 'bar', y: document.getElementById('console')}, 'bar')
PASS Exception thrown
PASS code is DOMException.NOT_SUPPORTED_ERR
Try to insert data where key path yields a Date key:
-store.add({x: new Date()}, 'foo')
-PASS Adding data where key path yielded Date key resulted in error.
-store.add({x: 'value'}, 'key')
-PASS 'onsuccess' in result is true
-PASS 'onerror' in result is true
-PASS 'readyState' in result is true
-An event should fire shortly...
-
+store.add({x: new Date(), y: 'value'}, 'key')
addSuccess():
Success event fired:
PASS 'result' in event is true
@@ -127,7 +118,7 @@ PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
PASS event.result is "key"
-event.source.add({x: 'value'}, 'zzz')
+event.source.add({x: 'foo'}, 'zzz')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
PASS 'readyState' in result is true
@@ -208,8 +199,22 @@ PASS 'onerror' in event.target is true
PASS 'readyState' in event.target is true
PASS event.target.readyState is event.target.DONE
-PASS event.result.x is "value"
+PASS event.result.y is "value"
store = event.source
+store.get(testDate)
+getSuccessDateKey():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+PASS event.result.x is "foo"
store.delete('key')
PASS 'onsuccess' in result is true
PASS 'onerror' in result is true
diff --git a/LayoutTests/storage/indexeddb/objectstore-basics.html b/LayoutTests/storage/indexeddb/objectstore-basics.html
index 3d2a1d2..a368c01 100644
--- a/LayoutTests/storage/indexeddb/objectstore-basics.html
+++ b/LayoutTests/storage/indexeddb/objectstore-basics.html
@@ -136,6 +136,7 @@ function checkMetadata()
addData();
}
+var testDate = new Date("August 25, 1991 20:57:08");
function addData()
{
@@ -144,17 +145,13 @@ function addData()
window.store = evalAndLog("store = transaction.objectStore('storeName')");
debug("Try to insert data with a Date key:");
- // FIXME: This should work in the future.
- try {
- debug("store.add({x: 'foo'}, new Date())");
- store.add({x: 'foo'}, new Date());
- testFailed("Passing a Date as key argument should have thrown.");
- } catch (err) {
- testPassed("Exception thrown");
- code = err.code;
- shouldBe("code", "DOMException.TYPE_MISMATCH_ERR");
- }
+ result = evalAndLog("store.add({x: 'foo'}, testDate)");
+ result.onsuccess = addDateSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+function addDateSuccess()
+{
debug("Try to insert a value not handled by structured clone:");
try {
debug("store.add({x: 'bar', y: document.getElementById('console')}, 'bar')");
@@ -166,19 +163,8 @@ function addData()
shouldBe("code", "DOMException.NOT_SUPPORTED_ERR");
}
- // FIXME: This should work in the future.
debug("Try to insert data where key path yields a Date key:");
- result = evalAndLog("store.add({x: new Date()}, 'foo')");
- result.onsuccess = unexpectedSuccessCallback;
- result.onerror = addKeyPathYieldingDateFailure;
-}
-
-function addKeyPathYieldingDateFailure()
-{
- testPassed("Adding data where key path yielded Date key resulted in error.");
-
- result = evalAndLog("store.add({x: 'value'}, 'key')");
- verifyResult(result);
+ result = evalAndLog("store.add({x: new Date(), y: 'value'}, 'key')");
result.onsuccess = addSuccess;
result.onerror = unexpectedErrorCallback;
}
@@ -189,7 +175,7 @@ function addSuccess()
verifySuccessEvent(event);
shouldBeEqualToString("event.result", "key");
- result = evalAndLog("event.source.add({x: 'value'}, 'zzz')");
+ result = evalAndLog("event.source.add({x: 'foo'}, 'zzz')");
verifyResult(result);
result.onsuccess = unexpectedSuccessCallback;
result.onerror = addAgainFailure;
@@ -248,8 +234,19 @@ function getSuccess()
{
debug("getSuccess():");
verifySuccessEvent(event);
- shouldBeEqualToString("event.result.x", "value");
+ shouldBeEqualToString("event.result.y", "value");
+
var store = evalAndLog("store = event.source");
+ result = evalAndLog("store.get(testDate)");
+ result.onsuccess = getSuccessDateKey;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function getSuccessDateKey()
+{
+ debug("getSuccessDateKey():");
+ verifySuccessEvent(event);
+ shouldBeEqualToString("event.result.x", "foo");
result = evalAndLog("store.delete('key')");
verifyResult(result);
diff --git a/LayoutTests/storage/indexeddb/transaction-crash-on-abort-expected.txt b/LayoutTests/storage/indexeddb/transaction-crash-on-abort-expected.txt
new file mode 100644
index 0000000..413643c
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/transaction-crash-on-abort-expected.txt
@@ -0,0 +1,32 @@
+Test IndexedDB transaction does not crash on abort.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 'webkitIndexedDB' in window is true
+PASS webkitIndexedDB == null is false
+webkitIndexedDB.open('name')
+PASS 'onsuccess' in result is true
+PASS 'onerror' in result is true
+PASS 'readyState' in result is true
+An event should fire shortly...
+
+openSuccess():
+Success event fired:
+PASS 'result' in event is true
+PASS 'code' in event is false
+PASS 'message' in event is false
+PASS 'source' in event is true
+PASS event.source != null is true
+PASS 'onsuccess' in event.target is true
+PASS 'onerror' in event.target is true
+PASS 'readyState' in event.target is true
+PASS event.target.readyState is event.target.DONE
+
+db = event.result
+db.transaction([])
+window.gc()
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/transaction-crash-on-abort.html b/LayoutTests/storage/indexeddb/transaction-crash-on-abort.html
new file mode 100644
index 0000000..1b13c87
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/transaction-crash-on-abort.html
@@ -0,0 +1,44 @@
+<html>
+<head>
+<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
+<script src="../../fast/js/resources/js-test-pre.js"></script>
+<script src="../../fast/js/resources/js-test-post-function.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+
+description("Test IndexedDB transaction does not crash on abort.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+function test()
+{
+ shouldBeTrue("'webkitIndexedDB' in window");
+ shouldBeFalse("webkitIndexedDB == null");
+
+ result = evalAndLog("webkitIndexedDB.open('name')");
+ verifyResult(result);
+ result.onsuccess = openSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ debug("openSuccess():");
+ verifySuccessEvent(event);
+ db = evalAndLog("db = event.result");
+ evalAndLog("db.transaction([])");
+ evalAndLog("window.gc()");
+ done();
+}
+
+var successfullyParsed = true;
+
+test();
+
+</script>
+</body>
+</html>
diff --git a/LayoutTests/storage/private-browsing-readonly-expected.txt b/LayoutTests/storage/private-browsing-noread-nowrite-expected.txt
index d5f4e0b..7542ba6 100644
--- a/LayoutTests/storage/private-browsing-readonly-expected.txt
+++ b/LayoutTests/storage/private-browsing-noread-nowrite-expected.txt
@@ -9,5 +9,7 @@ Private browsing statement 3 completed with an error
not authorized
Private browsing statement 4 completed with an error
not authorized
+Private browsing statement 5 completed with an error
+access to PrivateTest1.randomData is prohibited
Test ended
diff --git a/LayoutTests/storage/private-browsing-readonly.html b/LayoutTests/storage/private-browsing-noread-nowrite.html
index 972b123..b9b5882 100644
--- a/LayoutTests/storage/private-browsing-readonly.html
+++ b/LayoutTests/storage/private-browsing-noread-nowrite.html
@@ -16,7 +16,8 @@ var privateBrowsingStatements = [
"CREATE TABLE IF NOT EXISTS PrivateTest2 (randomData)",
"DELETE FROM PrivateTest1",
"DROP TABLE PrivateTest1",
- "INSERT INTO PrivateTest1 VALUES ('somedata')"
+ "INSERT INTO PrivateTest1 VALUES ('somedata')",
+ "SELECT * FROM PrivateTest1"
];
var completed = 0;
@@ -88,7 +89,7 @@ function runTest()
layoutTestController.waitUntilDone();
}
- var database = openDatabase("PrivateBrowsingReadOnlyTest", "1.0", "Test private browsing read-only safety", 1);
+ var database = openDatabase("PrivateBrowsingNoReadNoWriteTest", "1.0", "Test private browsing no read/write safety", 1);
database.transaction(runSetup, endTest, endTest);
}