tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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