upgrade-transaction-lifecycle-committed.any.js (3411B)
1 // META: title=IndexedDB: committed versionchange transaction lifecycle 2 // META: global=window,worker 3 // META: script=resources/support.js 4 // META: script=resources/support-promises.js 5 6 // Spec: "https://w3c.github.io/IndexedDB/#upgrade-transaction-steps" 7 // "https://w3c.github.io/IndexedDB/#dom-idbdatabase-createobjectstore" 8 // "https://w3c.github.io/IndexedDB/#dom-idbdatabase-deleteobjectstore" 9 10 'use strict'; 11 12 promise_test(t => { 13 return createDatabase(t, database => { 14 createBooksStore(t, database); 15 }).then(database => { 16 database.close(); 17 }).then(() => migrateDatabase(t, 2, (database, transaction, request) => { 18 return new Promise((resolve, reject) => { 19 transaction.addEventListener('complete', () => { 20 resolve(new Promise((resolve, reject) => { 21 assert_equals( 22 request.transaction, transaction, 23 "The open request's transaction should be reset after " + 24 'oncomplete'); 25 assert_throws_dom( 26 'InvalidStateError', 27 () => { database.createObjectStore('books2'); }, 28 'createObjectStore exception should reflect that the ' + 29 'transaction is no longer running'); 30 assert_throws_dom( 31 'InvalidStateError', 32 () => { database.deleteObjectStore('books'); }, 33 'deleteObjectStore exception should reflect that the ' + 34 'transaction is no longer running'); 35 resolve(); 36 })); 37 }, false); 38 }); 39 })).then(database => { database.close(); }); 40 }, 'in the complete event handler for a committed transaction'); 41 42 promise_test(t => { 43 return createDatabase(t, database => { 44 createBooksStore(t, database); 45 }).then(database => { 46 database.close(); 47 }).then(() => migrateDatabase(t, 2, (database, transaction, request) => { 48 return new Promise((resolve, reject) => { 49 transaction.addEventListener('complete', () => { 50 setTimeout(() => { 51 resolve(new Promise((resolve, reject) => { 52 assert_equals( 53 request.transaction, null, 54 "The open request's transaction should be reset after " + 55 'oncomplete microtasks'); 56 assert_throws_dom( 57 'InvalidStateError', 58 () => { database.createObjectStore('books2'); }, 59 'createObjectStore exception should reflect that the ' + 60 'transaction is no longer running'); 61 assert_throws_dom( 62 'InvalidStateError', 63 () => { database.deleteObjectStore('books'); }, 64 'deleteObjectStore exception should reflect that the ' + 65 'transaction is no longer running'); 66 resolve(); 67 })); 68 }, 0); 69 }, false); 70 }); 71 })).then(database => { database.close(); }); 72 }, 'in a setTimeout(0) callback after the complete event is fired for a ' + 73 'committed transaction');