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 IDBRequest."); 14if (window.layoutTestController) 15 layoutTestController.waitUntilDone(); 16 17function test() 18{ 19 request = evalAndLog("webkitIndexedDB.open('request-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 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("Verify that handler fires and that not preventing default will result in an abort"); 51 trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)"); 52 evalAndLog("trans.onabort = transactionAborted"); 53 evalAndLog("trans.oncomplete = unexpectedCompleteCallback"); 54 evalAndLog("trans.onerror = allowDefault"); 55 store = evalAndLog("store = trans.objectStore('storeName')"); 56 request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); 57 request.onsuccess = unexpectedSuccessCallback; 58 handlerFired = false; 59} 60 61function allowDefault() 62{ 63 testPassed("Event handler fired"); 64 debug("Doing nothing to prevent the default action..."); 65 handlerFired = true; 66} 67 68function transactionAborted() 69{ 70 shouldBeTrue("handlerFired"); 71 debug(""); 72 debug("Verifing error"); 73 trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)"); 74 evalAndLog("trans.onabort = transactionAborted2"); 75 evalAndLog("trans.oncomplete = unexpectedAbortCallback"); 76 evalAndLog("trans.addEventListener('error', errorCaptureCallback, true)"); 77 evalAndLog("trans.addEventListener('error', errorBubbleCallback, false)"); 78 evalAndLog("trans.addEventListener('success', unexpectedSuccessCallback, true)"); 79 evalAndLog("trans.addEventListener('success', unexpectedSuccessCallback, false)"); 80 evalAndLog("db.addEventListener('error', dbErrorCaptureCallback, true)"); 81 evalAndLog("db.addEventListener('error', dbErrorBubbleCallback, false)"); 82 evalAndLog("db.addEventListener('success', unexpectedSuccessCallback, true)"); 83 evalAndLog("db.addEventListener('success', unexpectedSuccessCallback, false)"); 84 store = evalAndLog("store = trans.objectStore('storeName')"); 85 request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')"); 86 request.onsuccess = unexpectedSuccessCallback; 87 request.onerror = errorFiredCallback; 88 dbCaptureFired = false; 89 captureFired = false; 90 requestFired = false; 91 bubbleFired = false; 92 dbBubbleFired = false; 93} 94 95function dbErrorCaptureCallback() 96{ 97 debug(""); 98 debug("In IDBDatabase error capture"); 99 shouldBeFalse("dbCaptureFired"); 100 shouldBeFalse("captureFired"); 101 shouldBeFalse("requestFired"); 102 shouldBeFalse("bubbleFired"); 103 shouldBeFalse("dbBubbleFired"); 104 shouldBe("event.target", "request"); 105 shouldBe("event.currentTarget", "db"); 106 dbCaptureFired = true; 107} 108 109function errorCaptureCallback() 110{ 111 debug(""); 112 debug("In IDBTransaction error capture"); 113 shouldBeTrue("dbCaptureFired"); 114 shouldBeFalse("captureFired"); 115 shouldBeFalse("requestFired"); 116 shouldBeFalse("bubbleFired"); 117 shouldBeFalse("dbBubbleFired"); 118 shouldBe("event.target", "request"); 119 shouldBe("event.currentTarget", "trans"); 120 captureFired = true; 121} 122 123function errorFiredCallback() 124{ 125 debug(""); 126 debug("In IDBRequest handler"); 127 shouldBeTrue("dbCaptureFired"); 128 shouldBeTrue("captureFired"); 129 shouldBeFalse("requestFired"); 130 shouldBeFalse("bubbleFired"); 131 shouldBeFalse("dbBubbleFired"); 132 shouldBe("event.target", "request"); 133 shouldBe("event.currentTarget", "request"); 134 requestFired = true; 135} 136 137function errorBubbleCallback() 138{ 139 debug(""); 140 debug("In IDBTransaction error bubble"); 141 shouldBeTrue("dbCaptureFired"); 142 shouldBeTrue("captureFired"); 143 shouldBeTrue("requestFired"); 144 shouldBeFalse("bubbleFired"); 145 shouldBeFalse("dbBubbleFired"); 146 shouldBe("event.target", "request"); 147 shouldBe("event.currentTarget", "trans"); 148 bubbleFired = true; 149} 150 151function dbErrorBubbleCallback() 152{ 153 debug(""); 154 debug("In IDBDatabase error bubble"); 155 shouldBeTrue("dbCaptureFired"); 156 shouldBeTrue("captureFired"); 157 shouldBeTrue("requestFired"); 158 shouldBeTrue("bubbleFired"); 159 shouldBeFalse("dbBubbleFired"); 160 shouldBe("event.target", "request"); 161 shouldBe("event.currentTarget", "db"); 162 dbBubbleFired = true; 163} 164 165function transactionAborted2() 166{ 167 debug(""); 168 debug("Transaction aborted"); 169 shouldBeTrue("dbCaptureFired"); 170 shouldBeTrue("captureFired"); 171 shouldBeTrue("requestFired"); 172 shouldBeTrue("bubbleFired"); 173 shouldBeTrue("dbBubbleFired"); 174 debug(""); 175 debug("Verifing success."); 176 trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)"); 177 evalAndLog("trans.oncomplete = transactionComplete"); 178 evalAndLog("trans.onabort = unexpectedAbortCallback"); 179 evalAndLog("trans.addEventListener('success', successCaptureCallback, true)"); 180 evalAndLog("trans.addEventListener('success', successBubbleCallback, false)"); 181 evalAndLog("trans.addEventListener('error', unexpectedErrorCallback, true)"); 182 evalAndLog("trans.addEventListener('error', unexpectedErrorCallback, false)"); 183 evalAndLog("db.removeEventListener('error', dbErrorCaptureCallback, true)"); 184 evalAndLog("db.removeEventListener('error', dbErrorBubbleCallback, false)"); 185 evalAndLog("db.removeEventListener('success', unexpectedSuccessCallback, true)"); 186 evalAndLog("db.removeEventListener('success', unexpectedSuccessCallback, false)"); 187 evalAndLog("db.addEventListener('success', dbSuccessCaptureCallback, true)"); 188 evalAndLog("db.addEventListener('success', dbSuccessBubbleCallback, false)"); 189 evalAndLog("db.addEventListener('error', unexpectedErrorCallback, true)"); 190 evalAndLog("db.addEventListener('error', unexpectedErrorCallback, false)"); 191 store = evalAndLog("store = trans.objectStore('storeName')"); 192 request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key2')"); 193 request.onerror = unexpectedErrorCallback; 194 request.onsuccess = successFiredCallback; 195 dbCaptureFired = false; 196 captureFired = false; 197 requestFired = false; 198 bubbleFired = false; 199 dbBubbleFired = false; 200} 201 202function dbSuccessCaptureCallback() 203{ 204 debug(""); 205 debug("In IDBDatabase success capture"); 206 shouldBeFalse("dbCaptureFired"); 207 shouldBeFalse("captureFired"); 208 shouldBeFalse("requestFired"); 209 shouldBeFalse("bubbleFired"); 210 shouldBeFalse("dbBubbleFired"); 211 shouldBe("event.target", "request"); 212 shouldBe("event.currentTarget", "db"); 213 dbCaptureFired = true; 214} 215 216function successCaptureCallback() 217{ 218 debug(""); 219 debug("In IDBTransaction success capture"); 220 shouldBeTrue("dbCaptureFired"); 221 shouldBeFalse("captureFired"); 222 shouldBeFalse("requestFired"); 223 shouldBeFalse("bubbleFired"); 224 shouldBeFalse("dbBubbleFired"); 225 shouldBe("event.target", "request"); 226 shouldBe("event.currentTarget", "trans"); 227 captureFired = true; 228} 229 230function successFiredCallback() 231{ 232 debug(""); 233 debug("In IDBRequest handler"); 234 shouldBeTrue("dbCaptureFired"); 235 shouldBeTrue("captureFired"); 236 shouldBeFalse("requestFired"); 237 shouldBeFalse("bubbleFired"); 238 shouldBeFalse("dbBubbleFired"); 239 shouldBe("event.target", "request"); 240 shouldBe("event.currentTarget", "request"); 241 requestFired = true; 242} 243 244function successBubbleCallback() 245{ 246 debug(""); 247 debug("In IDBTransaction success bubble"); 248 testFailed("Success bubble callback should NOT fire"); 249 bubbleFired = true; 250} 251 252function dbSuccessBubbleCallback() 253{ 254 debug(""); 255 debug("In IDBDatabase success bubble"); 256 testFailed("Success bubble callback should NOT fire"); 257 dbBubbleFired = true; 258} 259 260function transactionComplete() 261{ 262 debug(""); 263 debug("Transaction completed"); 264 shouldBeTrue("dbCaptureFired"); 265 shouldBeTrue("captureFired"); 266 shouldBeTrue("requestFired"); 267 shouldBeFalse("bubbleFired"); 268 shouldBeFalse("dbBubbleFired"); 269 debug(""); 270 271 done(); 272 return; 273} 274 275test(); 276 277var successfullyParsed = true; 278 279</script> 280</body> 281</html> 282