idbfactory-open-request-error.any.js (2005B)
1 // META: title=IDBFactory open(): request properties on error 2 // META: global=window,worker 3 // META: script=resources/support.js 4 5 // Spec: https://w3c.github.io/IndexedDB/#dom-idbfactory-open 6 7 'use strict'; 8 9 let saw_abort = false; 10 11 indexeddb_test( 12 (t, db, tx, rq) => { 13 const store = db.createObjectStore('store'); 14 store.put({name: 'a'}, 1); 15 store.put({name: 'a'}, 2); 16 store.createIndex('index', 'name', {unique: true}); 17 18 assert_equals( 19 rq.readyState, 'done', 20 'request done flag should be set during upgradeneeded'); 21 assert_equals( 22 rq.result, db, 23 'request result should be set (to connection) during upgradeneeded'); 24 assert_equals( 25 rq.error, null, 'request result should be null during upgradeneeded'); 26 27 tx.oncomplete = t.unreached_func('transaction should abort'); 28 tx.onabort = t.step_func(() => { 29 saw_abort = true; 30 31 assert_equals( 32 rq.readyState, 'done', 33 'request done flag should still be set during abort'); 34 35 // Chrome is flaky here. See: https://crbug.com/723846 36 /* 37 assert_equals( 38 rq.result, db, 39 'request result should still be set (to connection) during abort'); 40 assert_equals( 41 rq.error, null, 42 'request result should still be null during abort'); 43 */ 44 }); 45 46 rq.onerror = t.step_func(() => { 47 assert_true(saw_abort, 'abort event should fire before error'); 48 assert_equals( 49 rq.readyState, 'done', 'request done flag should be set on error'); 50 assert_equals( 51 rq.result, undefined, 52 'request result should be undefined on error'); 53 assert_equals( 54 rq.error.name, 'AbortError', 55 'request error should be AbortError on error'); 56 t.done(); 57 }); 58 }, 59 (t, db) => {}, 60 'Properties of IDBOpenDBRequest during failed IDBFactory open()', 61 {upgrade_will_abort: true});