• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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