4 <script src="../../fast/js/resources/js-test-pre.js"></script>
5 <script src="resources/shared.js"></script>
8 <p id="description"></p>
9 <div id="console"></div>
12 description("Ensure that aborted VERSION_CHANGE transactions are completely rolled back");
13 if (window.layoutTestController)
14 layoutTestController.waitUntilDone();
18 evalAndLog("indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;");
19 evalAndLog("IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;");
20 shouldBeFalse("indexedDB == null");
21 shouldBeFalse("IDBTransaction == null");
26 function openDBConnection()
28 request = evalAndLog("indexedDB.open('version-change-abort')");
29 request.onsuccess = openSuccess;
30 request.onerror = unexpectedErrorCallback;
33 function openSuccess()
35 window.db = evalAndLog("db = event.target.result");
38 evalAndLog("vcreq = db.setVersion('version 1')");
39 vcreq.onsuccess = inSetVersion1;
40 vcreq.onerror = unexpectedErrorCallback;
43 function inSetVersion1()
45 debug("setVersion1() callback");
46 shouldBeTrue("vcreq.result instanceof IDBTransaction");
48 trans.onabort = unexpectedAbortCallback;
49 trans.onerror = unexpectedErrorCallback;
50 trans.oncomplete = setVersion1Complete;
52 evalAndLog("store = db.createObjectStore('store1')");
55 function setVersion1Complete()
57 debug("setVersion1 complete");
58 shouldBeEqualToString("db.version", "version 1");
61 evalAndLog("vcreq = db.setVersion('version 2')");
62 vcreq.onsuccess = inSetVersion2;
63 vcreq.onerror = unexpectedErrorCallback;
66 function inSetVersion2()
68 debug("setVersion2() callback");
69 shouldBeEqualToString("db.version", "version 2");
70 shouldBeTrue("vcreq.result instanceof IDBTransaction");
72 trans.onabort = setVersion2Abort;
73 trans.onerror = unexpectedErrorCallback;
74 trans.oncomplete = unexpectedCompleteCallback;
76 evalAndLog("store = db.deleteObjectStore('store1')");
77 evalAndLog("store = db.createObjectStore('store2')");
79 // Ensure the test harness error handler is not invoked.
80 window.originalWindowOnError = window.onerror;
81 window.onerror = null;
83 debug("raising exception");
84 throw new Error("This should *NOT* be caught!");
87 function setVersion2Abort()
90 debug("setVersion2Abort() callback");
92 // Restore test harness error handler.
93 window.onerror = window.originalWindowOnError;
95 shouldBeEqualToString("db.version", "version 1");
96 shouldBeTrue("db.objectStoreNames.contains('store1')");
97 shouldBeFalse("db.objectStoreNames.contains('store2')");