3 <script src="../../fast/js/resources/js-test-pre.js"></script>
4 <script src="resources/shared.js"></script>
7 <p id="description"></p>
8 <div id="console"></div>
11 description("Test behavior when the same connection calls setVersion twice");
12 if (window.layoutTestController)
13 layoutTestController.waitUntilDone();
17 indexedDB = evalAndLog("indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;");
18 IDBTransaction = evalAndLog("IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.mozIDBTransaction;");
20 shouldBeFalse("indexedDB == null");
21 shouldBeFalse("IDBTransaction == null");
25 function openDBConnection()
27 evalAndLog("window.state = 'starting'");
28 var request = evalAndLog("indexedDB.open('two-versions-one-connection')");
29 request.onsuccess = openSuccess;
30 request.onerror = unexpectedErrorCallback;
33 function openSuccess()
35 window.db = evalAndLog("db = event.target.result");
36 evalAndLog("window.state = 0");
38 var versionChangeRequest1 = evalAndLog("db.setVersion('version 1')");
39 versionChangeRequest1.onerror = unexpectedErrorCallback;
40 versionChangeRequest1.onsuccess = inSetVersion1;
42 // and concurrently...
44 var versionChangeRequest2 = evalAndLog("db.setVersion('version 2')");
45 versionChangeRequest2.onerror = unexpectedErrorCallback;
46 versionChangeRequest2.onsuccess = inSetVersion2;
49 function inSetVersion1()
51 debug("setVersion() #1 callback");
52 evalAndLog("window.store1 = db.createObjectStore('test-store1')");
53 shouldBe("++window.state", "1");
54 var req = evalAndLog("window.store1.put('aaa', 111)");
55 req.onerror = unexpectedErrorCallback;
56 req.onsuccess = function (e) {
57 shouldBe("++window.state", "2");
62 function inSetVersion2()
64 debug("setVersion() #2 callback");
65 shouldBe("++window.state", "4");
66 evalAndLog("window.store2 = db.createObjectStore('test-store2')");
68 var req = evalAndLog("window.store2.put('bbb', 222)");
69 req.onerror = unexpectedErrorCallback;
70 req.onsuccess = function (e) {
71 shouldBe("++window.state", "5");
77 function halfwayDone()
81 shouldBe("++window.state", "3");
82 debug("halfway there..." );
84 shouldBe("++window.state", "6");
89 function checkResults() {
90 shouldBeEqualToString("window.db.version", "version 2");
91 trans = evalAndLog("window.trans = db.transaction(['test-store1', 'test-store2'])");
92 store = evalAndLog("window.store = window.trans.objectStore('test-store1')");
93 req = evalAndLog("window.req = window.store.get(111)");
94 req.onerror = unexpectedErrorCallback;
95 req.onsuccess = function (e) {
96 shouldBeEqualToString("event.target.result", "aaa");
98 store = evalAndLog("window.store = window.trans.objectStore('test-store2')");
99 req = evalAndLog("window.req = window.store.get(222)");
100 req.onerror = unexpectedErrorCallback;
101 req.onsuccess = function (e) {
102 shouldBeEqualToString("event.target.result", "bbb");