transaction-create_in_versionchange.any.js (2283B)
1 // META: title=IndexedDB Transaction Creation During Version Change 2 // META: global=window,worker 3 // META: script=resources/support.js 4 5 'use strict'; 6 7 async_test(t => { 8 let db; 9 let events = []; 10 let open_rq = createdb(t); 11 12 open_rq.onupgradeneeded = function(e) { 13 db = e.target.result 14 15 db.createObjectStore('store') 16 .add('versionchange1', 1) 17 .addEventListener('success', log('versionchange_add.success')) 18 19 assert_throws_dom('InvalidStateError', function() { 20 db.transaction('store', 'readonly') 21 }) 22 23 e.target.transaction.objectStore('store').count(2).addEventListener( 24 'success', log('versionchange_count.success')) 25 26 assert_throws_dom('InvalidStateError', function() { 27 db.transaction('store', 'readwrite') 28 }) 29 30 open_rq.transaction.objectStore('store') 31 .add('versionchange2', 2) 32 .addEventListener('success', log('versionchange_add2.success')) 33 34 open_rq.transaction.oncomplete = function(e) { 35 log('versionchange_txn.complete')(e) 36 37 db.transaction('store', 'readonly') 38 .objectStore('store') 39 .count() 40 .addEventListener('success', log('complete_count.success')) 41 } 42 }; 43 44 open_rq.onsuccess = function(e) { 45 log('open_rq.success')(e) 46 47 let txn = db.transaction('store', 'readwrite') 48 txn.objectStore('store').put('woo', 1).addEventListener( 49 'success', log('complete2_get.success')) 50 51 txn.oncomplete = t.step_func(function(e) { 52 assert_array_equals( 53 events, 54 [ 55 'versionchange_add.success: 1', 56 'versionchange_count.success: 0', 57 'versionchange_add2.success: 2', 58 'versionchange_txn.complete', 59 'open_rq.success: [object IDBDatabase]', 60 'complete_count.success: 2', 61 'complete2_get.success: 1', 62 ], 63 'events') 64 t.done() 65 }) 66 }; 67 68 69 function log(msg) { 70 return function(e) { 71 if (e && e.target && e.target.error) 72 events.push(msg + ': ' + e.target.error.name) 73 else if (e && e.target && e.target.result !== undefined) 74 events.push(msg + ': ' + e.target.result) 75 else events.push(msg) 76 }; 77 } 78 }, 'Attempt to create new transactions inside a versionchange transaction');