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