| // 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'); |