Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(34)

Side by Side Diff: LayoutTests/storage/indexeddb/resources/version-change-abort.js

Issue 243523003: Fire window.onerror for uncaught IndexedDB errors (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased and linkage fix Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 indexedDBTest(prepareDatabase, setVersion1Complete); 8 self.isOnErrorTest = true;
9
10 indexedDBTest(prepareDatabase, openRequest1Complete);
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("db.createObjectStore('store1')");
18 } 20 }
19 21
20 function setVersion1Complete() 22 function openRequest1Complete()
21 { 23 {
22 debug("setVersion1 complete"); 24 debug("openRequest1 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 = openRequest2Error;
30 vcreq.onblocked = unexpectedBlockedCallback; 32 vcreq.onblocked = unexpectedBlockedCallback;
31 vcreq.onsuccess = unexpectedSuccessCallback; 33 vcreq.onsuccess = unexpectedSuccessCallback;
32 } 34 }
33 35
34 function inSetVersion2() 36 function inSetVersion2()
35 { 37 {
36 db = event.target.result; 38 db = event.target.result;
37 debug("setVersion2() callback"); 39 debug("openRequest2() callback");
38 shouldBe("db.version", "2"); 40 shouldBe("db.version", "2");
39 shouldBeTrue("vcreq.transaction instanceof IDBTransaction"); 41 shouldBeTrue("vcreq.transaction instanceof IDBTransaction");
40 trans = vcreq.result; 42 trans = vcreq.result;
41 trans.onerror = unexpectedErrorCallback; 43 trans.onerror = unexpectedErrorCallback;
42 trans.oncomplete = unexpectedCompleteCallback; 44 trans.oncomplete = unexpectedCompleteCallback;
45 trans.onabort = onTransactionAbort;
43 46
44 evalAndLog("store = db.deleteObjectStore('store1')"); 47 evalAndLog("db.deleteObjectStore('store1')");
45 evalAndLog("store = db.createObjectStore('store2')"); 48 evalAndLog("db.createObjectStore('store2')");
46 49
47 // Ensure the test harness error handler is not invoked. 50 // Throwing an exception during the callback should:
48 self.originalWindowOnError = self.onerror; 51 // * fire window.onerror (uncaught within event dispatch)
49 self.onerror = null; 52 // * Cause the transaction to abort - fires 'abort' at transaction
53 // * fires 'error' at the open request
54 // * fires window.onerror (with request error)
50 55
51 debug("raising exception"); 56 debug("raising exception");
52 throw new Error("This should *NOT* be caught!"); 57 waitForError(/This should not be caught/, onGlobalErrorUncaughtException);
58 throw new Error("This should not be caught");
53 } 59 }
54 60
55 function setVersion2Abort() 61 function onGlobalErrorUncaughtException()
62 {
63 sawGlobalErrorUncaughtException = true;
64 }
65
66 function onTransactionAbort()
67 {
68 shouldBeTrue("sawGlobalErrorUncaughtException");
69 sawTransactionAbort = true;
70 }
71
72 function openRequest2Error(evt)
56 { 73 {
57 debug(""); 74 debug("");
58 debug("setVersion2Abort() callback"); 75 debug("openRequest2Error() callback");
76 shouldBeTrue("sawGlobalErrorUncaughtException");
77 shouldBeTrue("sawTransactionAbort");
78 waitForError(/AbortError/, onGlobalErrorAbortError);
79 }
59 80
60 // Restore test harness error handler. 81 function onGlobalErrorAbortError()
61 self.onerror = self.originalWindowOnError; 82 {
62 db.close(); 83 debug("");
84 debug("Verify rollback:");
63 evalAndLog("request = indexedDB.open(dbname)"); 85 evalAndLog("request = indexedDB.open(dbname)");
64 request.onblocked = unexpectedBlockedCallback; 86 request.onblocked = unexpectedBlockedCallback;
65 request.onupgradeneeded = unexpectedUpgradeNeededCallback; 87 request.onupgradeneeded = unexpectedUpgradeNeededCallback;
66 request.onerror = unexpectedErrorCallback; 88 request.onerror = unexpectedErrorCallback;
67 request.onsuccess = function (e) { 89 request.onsuccess = function (e) {
68 db = event.target.result; 90 db = event.target.result;
69 shouldBe("db.version", "1"); 91 shouldBe("db.version", "1");
70 shouldBeTrue("db.objectStoreNames.contains('store1')"); 92 shouldBeTrue("db.objectStoreNames.contains('store1')");
71 shouldBeFalse("db.objectStoreNames.contains('store2')"); 93 shouldBeFalse("db.objectStoreNames.contains('store2')");
72 94
73 finishJSTest(); 95 finishJSTest();
74 } 96 };
75 } 97 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698