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 event propogation on IDBTransaction."); 14if (window.layoutTestController) 15 layoutTestController.waitUntilDone(); 16 17function test() 18{ 19 request = evalAndLog("webkitIndexedDB.open('transaction-event-propagation')"); 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 window.trans = evalAndLog("trans = event.target.result"); 36 shouldBeTrue("trans !== null"); 37 trans.onabort = unexpectedAbortCallback; 38 evalAndLog("trans.oncomplete = startTest"); 39 40 deleteAllObjectStores(db); 41 42 store = evalAndLog("store = db.createObjectStore('storeName', null)"); 43 request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); 44 request.onerror = unexpectedErrorCallback; 45} 46 47function startTest() 48{ 49 debug("Verifing abort"); 50 trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)"); 51 evalAndLog("trans.onabort = abortFiredCallback"); 52 evalAndLog("trans.oncomplete = unexpectedAbortCallback"); 53 evalAndLog("db.addEventListener('abort', dbAbortCaptureCallback, true)"); 54 evalAndLog("db.addEventListener('abort', dbAbortBubbleCallback, false)"); 55 evalAndLog("db.addEventListener('complete', unexpectedCompleteCallback, true)"); 56 evalAndLog("db.addEventListener('complete', unexpectedCompleteCallback, false)"); 57 store = evalAndLog("store = trans.objectStore('storeName')"); 58 evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); 59 dbCaptureFired = false; 60 abortFired = false; 61 dbBubbleFired1 = false; 62} 63 64function dbAbortCaptureCallback() 65{ 66 debug(""); 67 debug("In IDBDatabase abort capture"); 68 shouldBeFalse("dbCaptureFired"); 69 shouldBeFalse("abortFired"); 70 shouldBeFalse("dbBubbleFired1"); 71 shouldBe("event.target", "trans"); 72 shouldBe("event.currentTarget", "db"); 73 dbCaptureFired = true; 74} 75 76function abortFiredCallback() 77{ 78 debug(""); 79 debug("In abort handler"); 80 shouldBeTrue("dbCaptureFired"); 81 shouldBeFalse("abortFired"); 82 shouldBeFalse("dbBubbleFired1"); 83 shouldBe("event.target", "trans"); 84 shouldBe("event.currentTarget", "trans"); 85 abortFired = true; 86} 87 88function dbAbortBubbleCallback() 89{ 90 debug(""); 91 debug("In IDBDatabase error bubble"); 92 shouldBeTrue("dbCaptureFired"); 93 shouldBeTrue("abortFired"); 94 shouldBeFalse("dbBubbleFired1"); 95 shouldBe("event.target", "trans"); 96 shouldBe("event.currentTarget", "db"); 97 dbBubbleFired1 = true; 98 debug(""); 99 debug("Verifing success."); 100 trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)"); 101 evalAndLog("trans.oncomplete = completeFiredCallback"); 102 evalAndLog("trans.onabort = unexpectedAbortCallback"); 103 evalAndLog("db.removeEventListener('abort', dbAbortCaptureCallback, true)"); 104 evalAndLog("db.removeEventListener('abort', dbAbortBubbleCallback, false)"); 105 evalAndLog("db.removeEventListener('complete', unexpectedCompleteCallback, true)"); 106 evalAndLog("db.removeEventListener('complete', unexpectedCompleteCallback, false)"); 107 evalAndLog("db.addEventListener('complete', dbCompleteCaptureCallback, true)"); 108 evalAndLog("db.addEventListener('complete', dbCompleteBubbleCallback, false)"); 109 evalAndLog("db.addEventListener('abort', unexpectedAbortCallback, true)"); 110 evalAndLog("db.addEventListener('abort', unexpectedAbortCallback, false)"); 111 store = evalAndLog("store = trans.objectStore('storeName')"); 112 evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key2')"); 113 dbCaptureFired = false; 114 completeFired = false; 115 dbBubbleFired2 = false; 116} 117 118function dbCompleteCaptureCallback() 119{ 120 debug(""); 121 debug("In IDBDatabase complete capture"); 122 shouldBeFalse("dbCaptureFired"); 123 shouldBeFalse("completeFired"); 124 shouldBeFalse("dbBubbleFired2"); 125 shouldBe("event.target", "trans"); 126 shouldBe("event.currentTarget", "db"); 127 dbCaptureFired = true; 128} 129 130function completeFiredCallback() 131{ 132 debug(""); 133 debug("In IDBRequest handler"); 134 shouldBeTrue("dbCaptureFired"); 135 shouldBeFalse("completeFired"); 136 shouldBeFalse("dbBubbleFired2"); 137 shouldBe("event.target", "trans"); 138 shouldBe("event.currentTarget", "trans"); 139 completeFired = true; 140 debug(""); 141 done(); 142} 143 144function dbCompleteBubbleCallback() 145{ 146 debug(""); 147 debug("In IDBDatabase complete bubble"); 148 testFailed("Complete bubble callback should NOT fire"); 149 dbBubbleFired2 = true; 150} 151 152test(); 153 154var successfullyParsed = true; 155 156</script> 157</body> 158</html> 159