1<html> 2<head> 3<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css"> 4<script src="../../fast/js/resources/js-test-pre.js"></script> 5<script src="../../fast/js/resources/js-test-post-function.js"></script> 6<script src="resources/shared.js"></script> 7</head> 8<body> 9<p id="description"></p> 10<div id="console"></div> 11<script> 12 13description("Test exceptions in IDBRequest handlers cause aborts."); 14if (window.layoutTestController) 15 layoutTestController.waitUntilDone(); 16 17function test() 18{ 19 request = evalAndLog("webkitIndexedDB.open('exception-in-event-aborts')"); 20 request.onsuccess = setVersion; 21 request.onerror = unexpectedErrorCallback; 22} 23 24function setVersion() 25{ 26 db = evalAndLog("db = event.target.result"); 27 28 request = evalAndLog("db.setVersion('new version')"); 29 request.onsuccess = deleteExisting; 30 request.onerror = unexpectedErrorCallback; 31} 32 33function deleteExisting() 34{ 35 debug("setVersionSuccess():"); 36 window.trans = evalAndLog("trans = event.target.result"); 37 shouldBeTrue("trans !== null"); 38 trans.onabort = unexpectedAbortCallback; 39 evalAndLog("trans.oncomplete = startTest"); 40 41 deleteAllObjectStores(db); 42 43 store = evalAndLog("store = db.createObjectStore('storeName', null)"); 44 request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); 45 request.onerror = unexpectedErrorCallback; 46} 47 48function startTest() 49{ 50 debug(""); 51 trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)"); 52 evalAndLog("trans.onabort = transactionAborted1"); 53 evalAndLog("trans.oncomplete = unexpectedCompleteCallback"); 54 store = evalAndLog("store = trans.objectStore('storeName')"); 55 request = evalAndLog("store.add({x: 'value2', y: 'zzz2'}, 'key2')"); 56 trans.addEventListener('success', causeException, true); 57 request.onerror = unexpectedErrorCallback; 58} 59 60function causeException() 61{ 62 debug(""); 63 evalAndLog("event.preventDefault()"); 64 debug("Throwing"); 65 throw "this exception is expected"; 66} 67 68function transactionAborted1() 69{ 70 debug(""); 71 testPassed("The transaction was aborted."); 72 trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)"); 73 evalAndLog("trans.onabort = transactionAborted2"); 74 evalAndLog("trans.oncomplete = unexpectedCompleteCallback"); 75 store = evalAndLog("store = trans.objectStore('storeName')"); 76 request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); 77 request.onsuccess = unexpectedSuccessCallback; 78 db.onerror = causeException; 79} 80 81function transactionAborted2() 82{ 83 debug(""); 84 testPassed("The transaction was aborted."); 85 trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)"); 86 evalAndLog("trans.onabort = unexpectedAbortCallback"); 87 evalAndLog("trans.oncomplete = transactionCompleted1"); 88 store = evalAndLog("store = trans.objectStore('storeName')"); 89 request = evalAndLog("store.add({x: 'value3', y: 'zzz3'}, 'key3')"); 90 request.onsuccess = throwAndCatch; 91 request.onerror = unexpectedErrorCallback; 92 db.onerror = null; 93} 94 95function throwAndCatch() 96{ 97 debug(""); 98 evalAndLog("event.preventDefault()"); 99 debug("Throwing within a try block"); 100 try { 101 throw "AHHH"; 102 } catch (e) { 103 } 104} 105 106function transactionCompleted1() 107{ 108 debug(""); 109 testPassed("The transaction completed."); 110 trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)"); 111 evalAndLog("trans.onabort = unexpectedAbortCallback"); 112 evalAndLog("trans.oncomplete = transactionCompleted2"); 113 store = evalAndLog("store = trans.objectStore('storeName')"); 114 request = evalAndLog("store.add({x: 'value4', y: 'zzz4'}, 'key4')"); 115 request.onsuccess = unexpectedSuccessCallback; 116 request.onerror = throwAndCatch; 117} 118 119function transactionCompleted2() 120{ 121 debug(""); 122 testPassed("The transaction completed."); 123 debug(""); 124 done(); 125} 126 127test(); 128 129var successfullyParsed = true; 130 131</script> 132</body> 133</html> 134