• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
4<script src="../../fast/js/resources/js-test-pre.js"></script>
5<script src="../../fast/js/resources/js-test-post-function.js"></script>
6<script src="resources/shared.js"></script>
7</head>
8<body>
9<p id="description"></p>
10<div id="console"></div>
11<script>
12
13description("4 open connections try to setVersion at the same time.  3 connections eventually close, allowing 1 setVersion call to proceed.");
14if (window.layoutTestController)
15    layoutTestController.waitUntilDone();
16
17connections = []
18function test()
19{
20    if ('webkitIndexedDB' in window)
21        IndexedDB = webkitIndexedDB;
22    else if ('mozIndexedDB' in window)
23        IndexedDB = mozIndexedDB;
24    shouldBeFalse("IndexedDB == null");
25    openDBConnection();
26}
27
28function openDBConnection()
29{
30    result = evalAndLog("IndexedDB.open('set-version-queue')");
31    result.onsuccess = openSuccess;
32    result.onerror = unexpectedErrorCallback;
33}
34
35function openSuccess()
36{
37    connection = event.target.result;
38    connection.onversionchange = generateVersionChangeHandler();
39    connections.push(connection);
40    if (connections.length < 4)
41        openDBConnection();
42    else {
43        request = evalAndLog("connections[0].setVersion('version 0')");
44        request.onerror = function(event){ connectionError(event, 0) };
45        request.onsuccess = unexpectedSuccessCallback;
46        request.onblocked = blocked0;
47        request1 = evalAndLog("connections[1].setVersion('version 1')");
48        request1.onerror = unexpectedErrorCallback;
49        request1.onsuccess = inSetVersion1;
50        request1.onblocked = blocked1;
51        request2 = evalAndLog("connections[2].setVersion('version 2')");
52        request2.onerror = function(event){ connectionError(event, 2) };
53        request2.onsuccess = unexpectedSuccessCallback;
54        request2.onblocked = blocked2;
55        request3 = evalAndLog("connections[3].setVersion('version 3')");
56        request3.onerror = function(event){ connectionError(event, 3) };
57        request3.onsuccess = unexpectedSuccessCallback;
58        request3.onblocked = blocked3;
59        debug("");
60    }
61}
62
63function generateVersionChangeHandler()
64{
65    var connectionNum = connections.length;
66    return function(event)
67    {
68        shouldBeTrue("event.version.length > 0");
69        debug("connection[" + connectionNum + "] received versionChangeEvent: " + event.version);
70    }
71}
72
73blocked0fired = false;
74blocked2fired = false;
75function blocked0(event)
76{
77    debug("");
78    testPassed("connection[0] got blocked event");
79    shouldBeEqualToString("event.version", "version 0");
80    debug("Close the connection that received the block event:");
81    evalAndLog("connections[0].close()");
82    debug("Close another connection as well, to test 4.7.4-note:");
83    evalAndLog("connections[3].close()");
84    evalAndLog("blocked0fired = true");
85    debug("");
86}
87
88function blocked1(event)
89{
90    debug("")
91    testPassed("connection[1] got blocked event");
92    debug("Ensure that this blocked event is in order:");
93    shouldBeTrue("blocked0fired");
94    shouldBeFalse("blocked2fired");
95    debug("")
96}
97
98function blocked2(event)
99{
100    debug("")
101    testPassed("connection[2] got blocked event");
102    shouldBeEqualToString("event.version", "version 2");
103    evalAndLog("connections[2].close()");
104    evalAndLog("blocked2fired = true");
105    debug("")
106}
107
108function blocked3(event)
109{
110    debug("")
111    testPassed("connection[3] got blocked event");
112    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.");
113    shouldBeEqualToString("event.version", "version 3");
114}
115
116function connectionError(event, connectionId)
117{
118    debug("")
119    testPassed("connection[" + connectionId + "] got error event");
120    shouldBe("event.target.errorCode", "13")
121    if ('webkitIndexedDB' in window) {
122        shouldBe("event.target.webkitErrorMessage.length > 0", "true");
123        debug(event.target.webkitErrorMessage);
124    }
125}
126
127function inSetVersion1(event)
128{
129    debug("")
130    testPassed("connection[1] got into SetVersion");
131    done();
132}
133
134var successfullyParsed = true;
135
136test();
137
138</script>
139</body>
140</html>
141