| // META: title=IndexedDB Transaction Event Bubbling and Capturing |
| // META: global=window,worker |
| // META: script=resources/support.js |
| |
| 'use strict'; |
| |
| async_test(t => { |
| let events = []; |
| let open_rq = createdb(t); |
| open_rq.onupgradeneeded = function(e) { |
| let db = e.target.result; |
| let txn = e.target.transaction; |
| let store = db.createObjectStore('store'); |
| let rq1 = store.add('', 1); |
| let rq2 = store.add('', 1); |
| |
| // We will run db.error, but don't let that fail the test |
| db.onerror = undefined; |
| |
| log_events('db', db, 'success'); |
| log_events('db', db, 'error'); |
| |
| log_events('txn', txn, 'success'); |
| log_events('txn', txn, 'error'); |
| |
| log_events('rq1', rq1, 'success'); |
| log_events('rq1', rq1, 'error'); |
| |
| log_events('rq2', rq2, 'success'); |
| log_events('rq2', rq2, 'error'); |
| |
| // Don't let it get to abort |
| db.addEventListener('error', function(e) { |
| e.preventDefault(); |
| }, false); |
| }; |
| |
| open_rq.onsuccess = function(e) { |
| log('open_rq.success')(e); |
| assert_array_equals( |
| events, |
| [ |
| 'capture db.success', |
| 'capture txn.success', |
| 'capture rq1.success', |
| 'bubble rq1.success', |
| |
| 'capture db.error: ConstraintError', |
| 'capture txn.error: ConstraintError', |
| 'capture rq2.error: ConstraintError', |
| 'bubble rq2.error: ConstraintError', |
| 'bubble txn.error: ConstraintError', |
| 'bubble db.error: ConstraintError', |
| |
| 'open_rq.success', |
| ], |
| 'events'); |
| t.done(); |
| }; |
| function log_events(type, obj, evt) { |
| obj.addEventListener(evt, log('capture ' + type + '.' + evt), true); |
| obj.addEventListener(evt, log('bubble ' + type + '.' + evt), false); |
| } |
| |
| function log(msg) { |
| return function(e) { |
| if (e && e.target && e.target.error) |
| events.push(msg + ': ' + e.target.error.name); |
| else |
| events.push(msg); |
| }; |
| } |
| }, 'Capture and bubble'); |