OLD | NEW |
1 if (this.importScripts) { | 1 if (this.importScripts) { |
2 importScripts('../../../resources/js-test.js'); | 2 importScripts('../../../resources/js-test.js'); |
3 importScripts('shared.js'); | 3 importScripts('shared.js'); |
4 } | 4 } |
5 | 5 |
6 description("Ensure that aborted VERSION_CHANGE transactions are completely roll
ed back"); | 6 description("Ensure that aborted VERSION_CHANGE transactions are completely roll
ed back"); |
7 | 7 |
| 8 self.isOnErrorTest = true; |
| 9 |
8 indexedDBTest(prepareDatabase, setVersion1Complete); | 10 indexedDBTest(prepareDatabase, setVersion1Complete); |
9 function prepareDatabase() | 11 function prepareDatabase() |
10 { | 12 { |
11 db = event.target.result; | 13 db = event.target.result; |
12 trans = event.target.transaction; | 14 trans = event.target.transaction; |
13 shouldBeTrue("trans instanceof IDBTransaction"); | 15 shouldBeTrue("trans instanceof IDBTransaction"); |
14 trans.onabort = unexpectedAbortCallback; | 16 trans.onabort = unexpectedAbortCallback; |
15 trans.onerror = unexpectedErrorCallback; | 17 trans.onerror = unexpectedErrorCallback; |
16 | 18 |
17 evalAndLog("store = db.createObjectStore('store1')"); | 19 evalAndLog("store = db.createObjectStore('store1')"); |
18 } | 20 } |
19 | 21 |
20 function setVersion1Complete() | 22 function setVersion1Complete() |
21 { | 23 { |
22 debug("setVersion1 complete"); | 24 debug("setVersion1 complete"); |
23 shouldBe("db.version", "1"); | 25 shouldBe("db.version", "1"); |
24 debug(""); | 26 debug(""); |
25 db.close(); | 27 db.close(); |
26 | 28 |
27 evalAndLog("vcreq = indexedDB.open(dbname, 2)"); | 29 evalAndLog("vcreq = indexedDB.open(dbname, 2)"); |
28 vcreq.onupgradeneeded = inSetVersion2; | 30 vcreq.onupgradeneeded = inSetVersion2; |
29 vcreq.onerror = setVersion2Abort; | 31 vcreq.onerror = setVersion2Abort; |
30 vcreq.onblocked = unexpectedBlockedCallback; | 32 vcreq.onblocked = unexpectedBlockedCallback; |
31 vcreq.onsuccess = unexpectedSuccessCallback; | 33 vcreq.onsuccess = unexpectedSuccessCallback; |
| 34 expectError(); |
32 } | 35 } |
33 | 36 |
34 function inSetVersion2() | 37 function inSetVersion2() |
35 { | 38 { |
36 db = event.target.result; | 39 db = event.target.result; |
37 debug("setVersion2() callback"); | 40 debug("setVersion2() callback"); |
38 shouldBe("db.version", "2"); | 41 shouldBe("db.version", "2"); |
39 shouldBeTrue("vcreq.transaction instanceof IDBTransaction"); | 42 shouldBeTrue("vcreq.transaction instanceof IDBTransaction"); |
40 trans = vcreq.result; | 43 trans = vcreq.result; |
41 trans.onerror = unexpectedErrorCallback; | 44 trans.onerror = unexpectedErrorCallback; |
42 trans.oncomplete = unexpectedCompleteCallback; | 45 trans.oncomplete = unexpectedCompleteCallback; |
43 | 46 |
44 evalAndLog("store = db.deleteObjectStore('store1')"); | 47 evalAndLog("store = db.deleteObjectStore('store1')"); |
45 evalAndLog("store = db.createObjectStore('store2')"); | 48 evalAndLog("store = db.createObjectStore('store2')"); |
46 | 49 |
47 // Ensure the test harness error handler is not invoked. | |
48 self.originalWindowOnError = self.onerror; | |
49 self.onerror = null; | |
50 | |
51 debug("raising exception"); | 50 debug("raising exception"); |
52 throw new Error("This should *NOT* be caught!"); | 51 throw new Error("This should *NOT* be caught!"); |
53 } | 52 } |
54 | 53 |
55 function setVersion2Abort() | 54 function setVersion2Abort(evt) |
56 { | 55 { |
57 debug(""); | 56 debug(""); |
58 debug("setVersion2Abort() callback"); | 57 debug("setVersion2Abort() callback"); |
| 58 evt.preventDefault(); |
| 59 db.close(); |
59 | 60 |
60 // Restore test harness error handler. | |
61 self.onerror = self.originalWindowOnError; | |
62 db.close(); | |
63 evalAndLog("request = indexedDB.open(dbname)"); | 61 evalAndLog("request = indexedDB.open(dbname)"); |
64 request.onblocked = unexpectedBlockedCallback; | 62 request.onblocked = unexpectedBlockedCallback; |
65 request.onupgradeneeded = unexpectedUpgradeNeededCallback; | 63 request.onupgradeneeded = unexpectedUpgradeNeededCallback; |
66 request.onerror = unexpectedErrorCallback; | 64 request.onerror = unexpectedErrorCallback; |
67 request.onsuccess = function (e) { | 65 request.onsuccess = function (e) { |
68 db = event.target.result; | 66 db = event.target.result; |
69 shouldBe("db.version", "1"); | 67 shouldBe("db.version", "1"); |
70 shouldBeTrue("db.objectStoreNames.contains('store1')"); | 68 shouldBeTrue("db.objectStoreNames.contains('store1')"); |
71 shouldBeFalse("db.objectStoreNames.contains('store2')"); | 69 shouldBeFalse("db.objectStoreNames.contains('store2')"); |
72 | 70 |
73 finishJSTest(); | 71 finishJSTest(); |
74 } | 72 }; |
75 } | 73 } |
OLD | NEW |