Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /IndexedDB/transaction-create_in_versionchange.any.html - WPT Dashboard Interop Dashboard
- /IndexedDB/transaction-create_in_versionchange.any.serviceworker.html - WPT Dashboard Interop Dashboard
- /IndexedDB/transaction-create_in_versionchange.any.sharedworker.html - WPT Dashboard Interop Dashboard
- /IndexedDB/transaction-create_in_versionchange.any.worker.html - WPT Dashboard Interop Dashboard
// 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');