| // META: title=IndexedDB Transaction Creation During Version Change |
| // META: global=window,worker |
| // META: script=resources/support.js |
| |
| 'use strict'; |
| |
| async_test(t => { |
| let db; |
| let events = []; |
| let open_rq = createdb(t); |
| |
| open_rq.onupgradeneeded = function(e) { |
| db = e.target.result |
| |
| db.createObjectStore('store') |
| .add('versionchange1', 1) |
| .addEventListener('success', log('versionchange_add.success')) |
| |
| assert_throws_dom('InvalidStateError', function() { |
| db.transaction('store', 'readonly') |
| }) |
| |
| e.target.transaction.objectStore('store').count(2).addEventListener( |
| 'success', log('versionchange_count.success')) |
| |
| assert_throws_dom('InvalidStateError', function() { |
| db.transaction('store', 'readwrite') |
| }) |
| |
| open_rq.transaction.objectStore('store') |
| .add('versionchange2', 2) |
| .addEventListener('success', log('versionchange_add2.success')) |
| |
| open_rq.transaction.oncomplete = function(e) { |
| log('versionchange_txn.complete')(e) |
| |
| db.transaction('store', 'readonly') |
| .objectStore('store') |
| .count() |
| .addEventListener('success', log('complete_count.success')) |
| } |
| }; |
| |
| open_rq.onsuccess = function(e) { |
| log('open_rq.success')(e) |
| |
| let txn = db.transaction('store', 'readwrite') |
| txn.objectStore('store').put('woo', 1).addEventListener( |
| 'success', log('complete2_get.success')) |
| |
| txn.oncomplete = t.step_func(function(e) { |
| assert_array_equals( |
| events, |
| [ |
| 'versionchange_add.success: 1', |
| 'versionchange_count.success: 0', |
| 'versionchange_add2.success: 2', |
| 'versionchange_txn.complete', |
| 'open_rq.success: [object IDBDatabase]', |
| 'complete_count.success: 2', |
| 'complete2_get.success: 1', |
| ], |
| 'events') |
| t.done() |
| }) |
| }; |
| |
| |
| function log(msg) { |
| return function(e) { |
| if (e && e.target && e.target.error) |
| events.push(msg + ': ' + e.target.error.name) |
| else if (e && e.target && e.target.result !== undefined) |
| events.push(msg + ': ' + e.target.result) |
| else events.push(msg) |
| }; |
| } |
| }, 'Attempt to create new transactions inside a versionchange transaction'); |