diff options
Diffstat (limited to 'LayoutTests/storage/indexeddb/set_version_queue.html')
-rw-r--r-- | LayoutTests/storage/indexeddb/set_version_queue.html | 140 |
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> |