blob: 53afc13259ed654f6db345ecfa78c898f56db821 [file] [log] [blame]
Victor Costanc1d40be2017-01-09 05:28:261<!doctype html>
2<meta charset="utf8">
3<title>IndexedDB: committed versionchange transaction lifecycle</title>
4<link rel="help"
5 href="https://w3c.github.io/IndexedDB/#upgrade-transaction-steps">
6<link rel="help"
7 href="https://w3c.github.io/IndexedDB/#dom-idbdatabase-createobjectstore">
8<link rel="help"
9 href="https://w3c.github.io/IndexedDB/#dom-idbdatabase-deleteobjectstore">
10<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
11<script src="/resources/testharness.js"></script>
12<script src="/resources/testharnessreport.js"></script>
13<script src="support-promises.js"></script>
14<script>
15'use strict';
16
17promise_test(t => {
18 return createDatabase(t, database => {
19 createBooksStore(t, database);
20 }).then(database => {
21 database.close();
22 }).then(() => migrateDatabase(t, 2, (database, transaction, request) => {
23 return new Promise((resolve, reject) => {
24 transaction.addEventListener('complete', () => {
25 resolve(new Promise((resolve, reject) => {
26 assert_equals(
27 request.transaction, transaction,
28 "The open request's transaction should be reset after " +
29 'oncomplete');
Stephen McGruerd5103042020-01-23 21:45:4530 assert_throws_dom(
Victor Costanc1d40be2017-01-09 05:28:2631 'InvalidStateError',
32 () => { database.createObjectStore('books2'); },
33 'createObjectStore exception should reflect that the ' +
34 'transaction is no longer running');
Stephen McGruerd5103042020-01-23 21:45:4535 assert_throws_dom(
Victor Costanc1d40be2017-01-09 05:28:2636 'InvalidStateError',
37 () => { database.deleteObjectStore('books'); },
38 'deleteObjectStore exception should reflect that the ' +
39 'transaction is no longer running');
40 resolve();
41 }));
42 }, false);
43 });
44 })).then(database => { database.close(); });
45}, 'in the complete event handler for a committed transaction');
46
47promise_test(t => {
48 return createDatabase(t, database => {
49 createBooksStore(t, database);
50 }).then(database => {
51 database.close();
52 }).then(() => migrateDatabase(t, 2, (database, transaction, request) => {
53 return new Promise((resolve, reject) => {
54 transaction.addEventListener('complete', () => {
55 setTimeout(() => {
56 resolve(new Promise((resolve, reject) => {
57 assert_equals(
58 request.transaction, null,
59 "The open request's transaction should be reset after " +
60 'oncomplete microtasks');
Stephen McGruerd5103042020-01-23 21:45:4561 assert_throws_dom(
Victor Costanc1d40be2017-01-09 05:28:2662 'InvalidStateError',
63 () => { database.createObjectStore('books2'); },
64 'createObjectStore exception should reflect that the ' +
65 'transaction is no longer running');
Stephen McGruerd5103042020-01-23 21:45:4566 assert_throws_dom(
Victor Costanc1d40be2017-01-09 05:28:2667 'InvalidStateError',
68 () => { database.deleteObjectStore('books'); },
69 'deleteObjectStore exception should reflect that the ' +
70 'transaction is no longer running');
71 resolve();
72 }));
73 }, 0);
74 }, false);
75 });
76 })).then(database => { database.close(); });
77}, 'in a setTimeout(0) callback after the complete event is fired for a ' +
78 'committed transaction');
79
80</script>