dom/indexedDB/test/event_propagation_iframe.html

changeset 2
7e26c7da4463
equal deleted inserted replaced
-1:000000000000 0:05d598bbadb8
1 <!--
2 Any copyright is dedicated to the Public Domain.
3 http://creativecommons.org/publicdomain/zero/1.0/
4 -->
5 <html>
6 <head>
7 <title>Indexed Database Property Test</title>
8
9 <script type="text/javascript;version=1.7">
10
11 let testGenerator = testSteps();
12
13 function ok(val, message) {
14 val = val ? "true" : "false";
15 window.parent.postMessage("SimpleTest.ok(" + val + ", '" + message +
16 "');", "*");
17 }
18
19 function grabEventAndContinueHandler(event) {
20 testGenerator.send(event);
21 }
22
23 function errorHandler(event) {
24 ok(false, "indexedDB error, code " + event.target.error.name);
25 finishTest();
26 }
27
28 function finishTest() {
29 // Let window.onerror have a chance to fire
30 setTimeout(function() {
31 setTimeout(function() {
32 testGenerator.close();
33 ok(windowErrorCount == 1, "Good window.onerror count");
34 window.parent.postMessage("SimpleTest.finish();", "*");
35 }, 0);
36 }, 0);
37 }
38
39 const eventChain = [
40 "IDBRequest",
41 "IDBTransaction",
42 "IDBDatabase"
43 ];
44
45 let captureCount = 0;
46 let bubbleCount = 0;
47 let atTargetCount = 0;
48 let windowErrorCount = 0;
49
50 window.onerror = function(event) {
51 ok(!windowErrorCount++, "Correct number of window.onerror events");
52 setTimeout(function() { testGenerator.next(); }, 0);
53 };
54
55 function errorEventCounter(event) {
56 ok(event.type == "error", "Got an error event");
57 ok(event.target instanceof window[eventChain[0]],
58 "Correct event.target");
59
60 let constructor;
61 if (event.eventPhase == event.AT_TARGET) {
62 atTargetCount++;
63 constructor = eventChain[0];
64 }
65 else if (event.eventPhase == event.CAPTURING_PHASE) {
66 constructor = eventChain[eventChain.length - 1 - captureCount++];
67 }
68 else if (event.eventPhase == event.BUBBLING_PHASE) {
69 constructor = eventChain[++bubbleCount];
70 if (windowErrorCount && bubbleCount == eventChain.length - 1) {
71 event.preventDefault();
72 }
73 }
74 ok(event.currentTarget instanceof window[constructor],
75 "Correct event.currentTarget");
76
77 if (bubbleCount == eventChain.length - 1) {
78 ok(bubbleCount == captureCount,
79 "Got same number of calls for both phases");
80 ok(atTargetCount == 1, "Got one atTarget event");
81
82 captureCount = bubbleCount = atTargetCount = 0;
83 if (windowErrorCount) {
84 finishTest();
85 }
86 }
87 }
88
89 function testSteps() {
90 let request = indexedDB.open(window.location.pathname, 1);
91 request.onerror = errorHandler;
92 request.onupgradeneeded = grabEventAndContinueHandler;
93 let event = yield undefined;
94
95 let db = event.target.result;
96 db.onerror = errorEventCounter;
97 db.addEventListener("error", errorEventCounter, true);
98
99 event.target.onsuccess = grabEventAndContinueHandler;
100
101 db.createObjectStore("foo", { autoIncrement: true });
102 yield undefined;
103
104 let transaction = db.transaction("foo", "readwrite");
105 transaction.addEventListener("error", errorEventCounter, false);
106 transaction.addEventListener("error", errorEventCounter, true);
107
108 let objectStore = transaction.objectStore("foo");
109
110 request = objectStore.add({}, 1);
111 request.onsuccess = grabEventAndContinueHandler;
112 request.onerror = errorHandler;
113 event = yield undefined;
114
115 request = objectStore.add({}, 1);
116 request.onsuccess = function(event) {
117 ok(false, "Did not expect second add to succeed.");
118 };
119 request.onerror = errorEventCounter;
120 yield undefined;
121
122 transaction = db.transaction("foo", "readwrite");
123 transaction.addEventListener("error", errorEventCounter, false);
124 transaction.addEventListener("error", errorEventCounter, true);
125
126 objectStore = transaction.objectStore("foo");
127
128 request = objectStore.add({}, 1);
129 request.onsuccess = grabEventAndContinueHandler;
130 request.onerror = errorHandler;
131 event = yield undefined;
132
133 request = objectStore.add({}, 1);
134 request.onsuccess = function(event) {
135 ok(false, "Did not expect second add to succeed.");
136 };
137 request.onerror = errorEventCounter;
138 yield undefined;
139 }
140 </script>
141
142 </head>
143
144 <body onload="testGenerator.next();"></body>
145
146 </html>

mercurial