summaryrefslogtreecommitdiffstats
path: root/LayoutTests/storage/indexeddb/set_version_queue.html
diff options
context:
space:
mode:
Diffstat (limited to 'LayoutTests/storage/indexeddb/set_version_queue.html')
-rw-r--r--LayoutTests/storage/indexeddb/set_version_queue.html140
1 files changed, 140 insertions, 0 deletions
diff --git a/LayoutTests/storage/indexeddb/set_version_queue.html b/LayoutTests/storage/indexeddb/set_version_queue.html
new file mode 100644
index 0000000..b00a69a
--- /dev/null
+++ b/LayoutTests/storage/indexeddb/set_version_queue.html
@@ -0,0 +1,140 @@
+<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("4 open connections try to setVersion at the same time. 3 connections eventually close, allowing 1 setVersion call to proceed.");
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+
+connections = []
+function test()
+{
+ if ('webkitIndexedDB' in window)
+ IndexedDB = webkitIndexedDB;
+ else if ('mozIndexedDB' in window)
+ IndexedDB = mozIndexedDB;
+ shouldBeFalse("IndexedDB == null");
+ openDBConnection();
+}
+
+function openDBConnection()
+{
+ result = evalAndLog("IndexedDB.open('set-version-queue')");
+ result.onsuccess = openSuccess;
+ result.onerror = unexpectedErrorCallback;
+}
+
+function openSuccess()
+{
+ connection = event.target.result;
+ connection.onversionchange = generateVersionChangeHandler();
+ connections.push(connection);
+ if (connections.length < 4)
+ openDBConnection();
+ else {
+ request = evalAndLog("connections[0].setVersion('version 0')");
+ request.onerror = function(event){ connectionError(event, 0) };
+ request.onsuccess = unexpectedSuccessCallback;
+ request.onblocked = blocked0;
+ request1 = evalAndLog("connections[1].setVersion('version 1')");
+ request1.onerror = unexpectedErrorCallback;
+ request1.onsuccess = inSetVersion1;
+ request1.onblocked = blocked1;
+ request2 = evalAndLog("connections[2].setVersion('version 2')");
+ request2.onerror = function(event){ connectionError(event, 2) };
+ request2.onsuccess = unexpectedSuccessCallback;
+ request2.onblocked = blocked2;
+ request3 = evalAndLog("connections[3].setVersion('version 3')");
+ request3.onerror = function(event){ connectionError(event, 3) };
+ request3.onsuccess = unexpectedSuccessCallback;
+ request3.onblocked = blocked3;
+ debug("");
+ }
+}
+
+function generateVersionChangeHandler()
+{
+ var connectionNum = connections.length;
+ return function(event)
+ {
+ shouldBeTrue("event.version.length > 0");
+ debug("connection[" + connectionNum + "] received versionChangeEvent: " + event.version);
+ }
+}
+
+blocked0fired = false;
+blocked2fired = false;
+function blocked0(event)
+{
+ debug("");
+ testPassed("connection[0] got blocked event");
+ shouldBeEqualToString("event.version", "version 0");
+ debug("Close the connection that received the block event:");
+ evalAndLog("connections[0].close()");
+ debug("Close another connection as well, to test 4.7.4-note:");
+ evalAndLog("connections[3].close()");
+ evalAndLog("blocked0fired = true");
+ debug("");
+}
+
+function blocked1(event)
+{
+ debug("")
+ testPassed("connection[1] got blocked event");
+ debug("Ensure that this blocked event is in order:");
+ shouldBeTrue("blocked0fired");
+ shouldBeFalse("blocked2fired");
+ debug("")
+}
+
+function blocked2(event)
+{
+ debug("")
+ testPassed("connection[2] got blocked event");
+ shouldBeEqualToString("event.version", "version 2");
+ evalAndLog("connections[2].close()");
+ evalAndLog("blocked2fired = true");
+ debug("")
+}
+
+function blocked3(event)
+{
+ debug("")
+ testPassed("connection[3] got blocked event");
+ debug("Note: This means that a connection can receive a blocked event after its close() method has been called. Spec is silent on the issue and this is easiest to implement.");
+ shouldBeEqualToString("event.version", "version 3");
+}
+
+function connectionError(event, connectionId)
+{
+ debug("")
+ testPassed("connection[" + connectionId + "] got error event");
+ shouldBe("event.target.errorCode", "13")
+ if ('webkitIndexedDB' in window) {
+ shouldBe("event.target.webkitErrorMessage.length > 0", "true");
+ debug(event.target.webkitErrorMessage);
+ }
+}
+
+function inSetVersion1(event)
+{
+ debug("")
+ testPassed("connection[1] got into SetVersion");
+ done();
+}
+
+var successfullyParsed = true;
+
+test();
+
+</script>
+</body>
+</html>