Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Side by Side Diff: third_party/WebKit/LayoutTests/external/wpt/IndexedDB/fire-error-event-exception.html

Issue 2734533002: IndexedDB: Align abort behavior on uncaught exception with Gecko (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <meta charset=utf-8>
3 <title>Fire error event - Exception thrown</title>
4 <script src=/resources/testharness.js></script>
pwnall 2017/03/04 00:27:33 Do you think it's worth adding help links, like be
jsbell 2017/03/06 18:25:02 Done.
5 <script src=/resources/testharnessreport.js></script>
6 <script src=support.js></script>
7 <script>
8 setup({allow_uncaught_exception:true});
9
10 // Listeners on the request.
11
12 indexeddb_test(
13 (t, db) => {
14 db.createObjectStore('s');
15 },
16 (t, db) => {
17 const tx = db.transaction('s', 'readwrite');
pwnall 2017/03/04 00:27:33 It seems to me that lines 17-21 and 25-28 repeat i
jsbell 2017/03/06 18:25:02 Factored out wrapper functions here and in the oth
18 const store = tx.objectStore('s');
19 store.put(0, 0);
20 const request = store.add(0, 0);
21 request.onsuccess = t.unreached_func('request should fail');
22 request.onerror = () => {
23 throw Error();
24 };
25 tx.oncomplete = t.unreached_func('transaction should abort');
26 tx.onabort = t.step_func_done(() => {
27 assert_equals(tx.error.name, 'AbortError');
28 });
29 },
30 'Exception in error event handler on request');
31
32 indexeddb_test(
33 (t, db) => {
34 db.createObjectStore('s');
35 },
36 (t, db) => {
37 const tx = db.transaction('s', 'readwrite');
38 const store = tx.objectStore('s');
39 store.put(0, 0);
40 const request = store.add(0, 0);
41 request.onsuccess = t.unreached_func('request should fail');
42 request.onerror = e => {
43 e.preventDefault();
44 throw Error();
45 };
46 tx.oncomplete = t.unreached_func('transaction should abort');
47 tx.onabort = t.step_func_done(() => {
48 assert_equals(tx.error.name, 'AbortError');
49 });
50 },
51 'Exception in error event handler on request, with preventDefault');
52
53 indexeddb_test(
54 (t, db) => {
55 db.createObjectStore('s');
56 },
57 (t, db) => {
58 const tx = db.transaction('s', 'readwrite');
59 const store = tx.objectStore('s');
60 store.put(0, 0);
61 const request = store.add(0, 0);
62 request.onsuccess = t.unreached_func('request should fail');
63 request.addEventListener('error', () => {
64 throw Error();
65 });
66 tx.oncomplete = t.unreached_func('transaction should abort');
67 tx.onabort = t.step_func_done(() => {
68 assert_equals(tx.error.name, 'AbortError');
69 });
70 },
71 'Exception in error event listener on request');
72
73 indexeddb_test(
74 (t, db) => {
75 db.createObjectStore('s');
76 },
77 (t, db) => {
78 const tx = db.transaction('s', 'readwrite');
79 const store = tx.objectStore('s');
80 store.put(0, 0);
81 const request = store.add(0, 0);
82 request.onsuccess = t.unreached_func('request should fail');
83 request.addEventListener('error', () => {
84 // no-op
85 });
86 request.addEventListener('error', () => {
87 throw Error();
88 });
89 tx.oncomplete = t.unreached_func('transaction should abort');
90 tx.onabort = t.step_func_done(() => {
91 assert_equals(tx.error.name, 'AbortError');
92 });
93 },
94 'Exception in second error event listener on request');
95
96 indexeddb_test(
97 (t, db) => {
98 db.createObjectStore('s');
99 },
100 (t, db) => {
101 const tx = db.transaction('s', 'readwrite');
102 const store = tx.objectStore('s');
103 store.put(0, 0);
104 const request = store.add(0, 0);
105 request.onsuccess = t.unreached_func('request should fail');
106 let second_listener_called = false;
107 request.addEventListener('error', () => {
108 throw Error();
109 });
110 request.addEventListener('error', t.step_func(() => {
111 second_listener_called = true;
112 assert_true(is_transaction_active(tx, 's'),
113 'Transaction should be active until dispatch completes');
114 }));
115 tx.oncomplete = t.unreached_func('transaction should abort');
116 tx.onabort = t.step_func_done(() => {
117 assert_true(second_listener_called);
pwnall 2017/03/04 00:27:33 This shows up in a few places. I imagine you could
jsbell 2017/03/06 18:25:02 I kept the onabort handler explicit in each test.
118 assert_equals(tx.error.name, 'AbortError');
119 });
120 },
121 'Exception in first error event listener on request, ' +
122 'transaction active in second');
123
124 // Listeners on the transaction.
125
126 indexeddb_test(
127 (t, db) => {
128 db.createObjectStore('s');
129 },
130 (t, db) => {
131 const tx = db.transaction('s', 'readwrite');
132 const store = tx.objectStore('s');
133 store.put(0, 0);
134 const request = store.add(0, 0);
135 request.onsuccess = t.unreached_func('request should fail');
136 tx.onerror = () => {
137 throw Error();
138 };
139 tx.oncomplete = t.unreached_func('transaction should abort');
140 tx.onabort = t.step_func_done(() => {
141 assert_equals(tx.error.name, 'AbortError');
142 });
143 },
144 'Exception in error event handler on transaction');
145
146 indexeddb_test(
147 (t, db) => {
148 db.createObjectStore('s');
149 },
150 (t, db) => {
151 const tx = db.transaction('s', 'readwrite');
152 const store = tx.objectStore('s');
153 store.put(0, 0);
154 const request = store.add(0, 0);
155 request.onsuccess = t.unreached_func('request should fail');
156 tx.onerror = e => {
157 e.preventDefault();
158 throw Error();
159 };
160 tx.oncomplete = t.unreached_func('transaction should abort');
161 tx.onabort = t.step_func_done(() => {
162 assert_equals(tx.error.name, 'AbortError');
163 });
164 },
165 'Exception in error event handler on transaction, with preventDefault');
166
167 indexeddb_test(
168 (t, db) => {
169 db.createObjectStore('s');
170 },
171 (t, db) => {
172 const tx = db.transaction('s', 'readwrite');
173 const store = tx.objectStore('s');
174 store.put(0, 0);
175 const request = store.add(0, 0);
176 request.onsuccess = t.unreached_func('request should fail');
177 tx.addEventListener('error', () => {
178 throw Error();
179 });
180 tx.oncomplete = t.unreached_func('transaction should abort');
181 tx.onabort = t.step_func_done(() => {
182 assert_equals(tx.error.name, 'AbortError');
183 });
184 },
185 'Exception in error event listener on transaction');
186
187 indexeddb_test(
188 (t, db) => {
189 db.createObjectStore('s');
190 },
191 (t, db) => {
192 const tx = db.transaction('s', 'readwrite');
193 const store = tx.objectStore('s');
194 store.put(0, 0);
195 const request = store.add(0, 0);
196 request.onsuccess = t.unreached_func('request should fail');
197 tx.addEventListener('error', () => {
198 // no-op
199 });
200 tx.addEventListener('error', () => {
201 throw Error();
202 });
203 tx.oncomplete = t.unreached_func('transaction should abort');
204 tx.onabort = t.step_func_done(() => {
205 assert_equals(tx.error.name, 'AbortError');
206 });
207 },
208 'Exception in second error event listener on transaction');
209
210 indexeddb_test(
211 (t, db) => {
212 db.createObjectStore('s');
213 },
214 (t, db) => {
215 const tx = db.transaction('s', 'readwrite');
216 const store = tx.objectStore('s');
217 store.put(0, 0);
218 const request = store.add(0, 0);
219 request.onsuccess = t.unreached_func('request should fail');
220 let second_listener_called = false;
221 tx.addEventListener('error', () => {
222 throw Error();
223 });
224 tx.addEventListener('error', t.step_func(() => {
225 second_listener_called = true;
226 assert_true(is_transaction_active(tx, 's'),
227 'Transaction should be active until dispatch completes');
228 }));
229 tx.oncomplete = t.unreached_func('transaction should abort');
230 tx.onabort = t.step_func_done(() => {
231 assert_true(second_listener_called);
232 assert_equals(tx.error.name, 'AbortError');
233 });
234 },
235 'Exception in first error event listener on transaction, ' +
236 'transaction active in second');
237
238 // Listeners on the connection.
239
240 indexeddb_test(
241 (t, db) => {
242 db.createObjectStore('s');
243 },
244 (t, db) => {
245 const tx = db.transaction('s', 'readwrite');
246 const store = tx.objectStore('s');
247 store.put(0, 0);
248 const request = store.add(0, 0);
249 request.onsuccess = t.unreached_func('request should fail');
250 db.onerror = () => {
251 throw Error();
252 };
253 tx.oncomplete = t.unreached_func('transaction should abort');
254 tx.onabort = t.step_func_done(() => {
255 assert_equals(tx.error.name, 'AbortError');
256 });
257 },
258 'Exception in error event handler on connection');
259
260 indexeddb_test(
261 (t, db) => {
262 db.createObjectStore('s');
263 },
264 (t, db) => {
265 const tx = db.transaction('s', 'readwrite');
266 const store = tx.objectStore('s');
267 store.put(0, 0);
268 const request = store.add(0, 0);
269 request.onsuccess = t.unreached_func('request should fail');
270 db.onerror = e => {
271 e.preventDefault()
272 throw Error();
273 };
274 tx.oncomplete = t.unreached_func('transaction should abort');
275 tx.onabort = t.step_func_done(() => {
276 assert_equals(tx.error.name, 'AbortError');
277 });
278 },
279 'Exception in error event handler on connection, with preventDefault');
280
281 indexeddb_test(
282 (t, db) => {
283 db.createObjectStore('s');
284 },
285 (t, db) => {
286 const tx = db.transaction('s', 'readwrite');
287 const store = tx.objectStore('s');
288 store.put(0, 0);
289 const request = store.add(0, 0);
290 request.onsuccess = t.unreached_func('request should fail');
291 db.addEventListener('error', () => {
292 throw Error();
293 });
294 tx.oncomplete = t.unreached_func('transaction should abort');
295 tx.onabort = t.step_func_done(() => {
296 assert_equals(tx.error.name, 'AbortError');
297 });
298 },
299 'Exception in error event listener on connection');
300
301 indexeddb_test(
302 (t, db) => {
303 db.createObjectStore('s');
304 },
305 (t, db) => {
306 const tx = db.transaction('s', 'readwrite');
307 const store = tx.objectStore('s');
308 store.put(0, 0);
309 const request = store.add(0, 0);
310 request.onsuccess = t.unreached_func('request should fail');
311 db.addEventListener('error', () => {
312 // no-op
313 });
314 db.addEventListener('error', () => {
315 throw Error();
316 });
317 tx.oncomplete = t.unreached_func('transaction should abort');
318 tx.onabort = t.step_func_done(() => {
319 assert_equals(tx.error.name, 'AbortError');
320 });
321 },
322 'Exception in second error event listener on connection');
323
324 indexeddb_test(
325 (t, db) => {
326 db.createObjectStore('s');
327 },
328 (t, db) => {
329 const tx = db.transaction('s', 'readwrite');
330 const store = tx.objectStore('s');
331 store.put(0, 0);
332 const request = store.add(0, 0);
333 request.onsuccess = t.unreached_func('request should fail');
334 let second_listener_called = false;
335 db.addEventListener('error', () => {
336 throw Error('hi there');
pwnall 2017/03/04 00:27:33 It's slightly odd that this error has a message, w
jsbell 2017/03/06 18:25:02 Oops, I left that in from some debugging. Will rem
337 });
338 db.addEventListener('error', t.step_func(() => {
339 second_listener_called = true;
340 assert_true(is_transaction_active(tx, 's'),
341 'Transaction should be active until dispatch completes');
342 }));
343 tx.oncomplete = t.unreached_func('transaction should abort');
344 tx.onabort = t.step_func_done(() => {
345 assert_true(second_listener_called);
346 assert_equals(tx.error.name, 'AbortError');
347 });
348 },
349 'Exception in first error event listener on connection, ' +
350 'transaction active in second');
351
352 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698