| Index: third_party/WebKit/LayoutTests/storage/indexeddb/transaction-abort-generator-revert.html
|
| diff --git a/third_party/WebKit/LayoutTests/storage/indexeddb/transaction-abort-generator-revert.html b/third_party/WebKit/LayoutTests/storage/indexeddb/transaction-abort-generator-revert.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4fde8c0a39bbad166475c63567143ab3e6fd2bab
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/storage/indexeddb/transaction-abort-generator-revert.html
|
| @@ -0,0 +1,108 @@
|
| +<!DOCTYPE html>
|
| +<title>IndexedDB: aborting transactions reverts an object store's key generator state</title>
|
| +<script src='../../resources/testharness.js'></script>
|
| +<link rel="help" href="https://w3c.github.io/IndexedDB/#abort-transaction">
|
| +<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
|
| +<script src='../../resources/testharnessreport.js'></script>
|
| +<script src='resources/rename-common.js'></script>
|
| +<script>
|
| +
|
| +promise_test(testCase => {
|
| + return createDatabase(testCase, (database, transaction) => {
|
| + createBooksStore(testCase, database);
|
| + }).then(database => {
|
| + database.close();
|
| + }).then(() => {
|
| + return new Promise((resolve, reject) => {
|
| + const request = indexedDB.open(databaseName(testCase), 2);
|
| + request.onupgradeneeded = testCase.step_func(event => {
|
| + const database = event.target.result;
|
| + const transaction = event.target.transaction;
|
| + const store = transaction.objectStore('books');
|
| + const request2 = store.put(
|
| + { title: 'Bedrock Nights II', author: 'Barney' });
|
| + request2.onerror = testCase.unreached_func(
|
| + 'IDBObjectStore.put() should not receive an error request');
|
| + request2.onsuccess = testCase.step_func(event => {
|
| + assert_equals(
|
| + event.target.result, 345679,
|
| + "The key generator's current number should be set by " +
|
| + 'the last put operation in the database creation ' +
|
| + 'transaction');
|
| +
|
| + request.onerror = event => {
|
| + event.preventDefault();
|
| + resolve(event);
|
| + };
|
| + request.onsuccess = () => reject(new Error(
|
| + 'indexedDB.open should not succeed after the ' +
|
| + 'versionchange transaction is aborted'));
|
| +
|
| + transaction.abort();
|
| + });
|
| + });
|
| + request.onerror = event => reject(event.target.error);
|
| + request.onsuccess = () => reject(new Error(
|
| + 'indexedDB.open should not succeed without creating a ' +
|
| + 'versionchange transaction'));
|
| + });
|
| + }).then(() => {
|
| + return openDatabase(testCase, 1);
|
| + }).then(database => {
|
| + const transaction = database.transaction(['books'], 'readwrite');
|
| + const store = transaction.objectStore('books');
|
| +
|
| + return checkStoreGenerator(
|
| + testCase, store, 345679,
|
| + "The key generator's current number should be reverted after the " +
|
| + 'transaction modifying it is aborted').then(() => database.close());
|
| + });
|
| +}, 'The current number of a key generator is reverted when a versionchange ' +
|
| + 'transaction aborts');
|
| +
|
| +promise_test(testCase => {
|
| + return createDatabase(testCase, (database, transaction) => {
|
| + createBooksStore(testCase, database);
|
| + }).then(database => {
|
| + return new Promise((resolve, reject) => {
|
| + const transaction = database.transaction(['books'], 'readwrite');
|
| + const store = transaction.objectStore('books');
|
| + const request = store.put(
|
| + { title: 'Bedrock Nights II', author: 'Barney' });
|
| + request.onerror = testCase.unreached_func(
|
| + 'IDBObjectStore.put() should not receive an error request');
|
| + request.onsuccess = testCase.step_func(event => {
|
| + assert_equals(
|
| + event.target.result, 345679,
|
| + "The key generator's current number should be set by the " +
|
| + 'last put operation in the database creation transaction');
|
| +
|
| + transaction.onabort = event => {
|
| + event.preventDefault();
|
| + resolve(event);
|
| + }
|
| + transaction.abort();
|
| + });
|
| + transaction.onabort = () => reject(new Error(
|
| + 'The aborted readwrite transaction should not receive an ' +
|
| + 'abort event before IDBTransaction.abort() is called'));
|
| + transaction.oncomplete = () => reject(new Error(
|
| + 'The aborted readwrite transaction should not receive a ' +
|
| + 'completed event'));
|
| + transaction.onerror = () => reject(new Error(
|
| + 'The aborted readwrite transaction should not receive an ' +
|
| + 'error event'));
|
| + }).then(() => database);
|
| + }).then(database => {
|
| + const transaction = database.transaction(['books'], 'readwrite');
|
| + const store = transaction.objectStore('books');
|
| +
|
| + return checkStoreGenerator(
|
| + testCase, store, 345679,
|
| + "The key generator's current number should be reverted after the " +
|
| + 'transaction modifying it is aborted').then(() => database.close());
|
| + });
|
| +}, 'The current number of a key generator is reverted when a readwrite ' +
|
| + 'transaction aborts');
|
| +
|
| +</script>
|
|
|