transaction_bubble-and-capture.any.js (1983B)
1 // META: title=IndexedDB Transaction Event Bubbling and Capturing 2 // META: global=window,worker 3 // META: script=resources/support.js 4 5 'use strict'; 6 7 async_test(t => { 8 let events = []; 9 let open_rq = createdb(t); 10 open_rq.onupgradeneeded = function(e) { 11 let db = e.target.result; 12 let txn = e.target.transaction; 13 let store = db.createObjectStore('store'); 14 let rq1 = store.add('', 1); 15 let rq2 = store.add('', 1); 16 17 // We will run db.error, but don't let that fail the test 18 db.onerror = undefined; 19 20 log_events('db', db, 'success'); 21 log_events('db', db, 'error'); 22 23 log_events('txn', txn, 'success'); 24 log_events('txn', txn, 'error'); 25 26 log_events('rq1', rq1, 'success'); 27 log_events('rq1', rq1, 'error'); 28 29 log_events('rq2', rq2, 'success'); 30 log_events('rq2', rq2, 'error'); 31 32 // Don't let it get to abort 33 db.addEventListener('error', function(e) { 34 e.preventDefault(); 35 }, false); 36 }; 37 38 open_rq.onsuccess = function(e) { 39 log('open_rq.success')(e); 40 assert_array_equals( 41 events, 42 [ 43 'capture db.success', 44 'capture txn.success', 45 'capture rq1.success', 46 'bubble rq1.success', 47 48 'capture db.error: ConstraintError', 49 'capture txn.error: ConstraintError', 50 'capture rq2.error: ConstraintError', 51 'bubble rq2.error: ConstraintError', 52 'bubble txn.error: ConstraintError', 53 'bubble db.error: ConstraintError', 54 55 'open_rq.success', 56 ], 57 'events'); 58 t.done(); 59 }; 60 function log_events(type, obj, evt) { 61 obj.addEventListener(evt, log('capture ' + type + '.' + evt), true); 62 obj.addEventListener(evt, log('bubble ' + type + '.' + evt), false); 63 } 64 65 function log(msg) { 66 return function(e) { 67 if (e && e.target && e.target.error) 68 events.push(msg + ': ' + e.target.error.name); 69 else 70 events.push(msg); 71 }; 72 } 73 }, 'Capture and bubble');