Chromium Code Reviews| Index: third_party/WebKit/LayoutTests/webexposed/indexeddb-renames-should-not-be-exposed.html |
| diff --git a/third_party/WebKit/LayoutTests/webexposed/indexeddb-renames-should-not-be-exposed.html b/third_party/WebKit/LayoutTests/webexposed/indexeddb-renames-should-not-be-exposed.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..1342d30a3391139e12429e419d522f8f8d1fc785 |
| --- /dev/null |
| +++ b/third_party/WebKit/LayoutTests/webexposed/indexeddb-renames-should-not-be-exposed.html |
| @@ -0,0 +1,70 @@ |
| +<!DOCTYPE html> |
| +<script src='../resources/testharness.js'></script> |
| +<script src='../resources/testharnessreport.js'></script> |
| +<script> |
| +// Returns an IndexedDB database name likely to be unique to the test case. |
|
jsbell
2016/09/07 17:16:14
Since this test will be temporary (until we "ship"
pwnall
2016/09/07 22:43:52
Done.
|
| +const databaseName = function(testCase) { |
| + return 'db' + self.location.pathname + '-' + testCase.name; |
| +}; |
| + |
| +// Creates an EventWatcher covering all the events that can be issued by |
| +// IndexedDB requests and transactions. |
| +const requestWatcher = function(testCase, request) { |
| + return new EventWatcher(testCase, request, |
| + ['error', 'success', 'upgradeneeded']); |
| +}; |
| + |
| +// Migrates an IndexedDB database whose name is unique for the test case. |
| +// |
| +// setupCallback will be called during a versionchange transaction, and will be |
| +// given the created database and the versionchange transaction. |
| +// |
| +// Returns a promise that resolves to an IndexedDB database. The caller must |
| +// close the database. |
| +const migrateDatabase = function(testCase, newVersion, setupCallback) { |
| + // We cannot use eventWatcher.wait_for('upgradeneeded') here, because |
| + // the versionchange transaction auto-commits before the Promise's then |
| + // callback gets called. |
| + return new Promise((resolve, reject) => { |
| + const request = indexedDB.open(databaseName(testCase), newVersion); |
| + request.onupgradeneeded = event => { |
|
jsbell
2016/09/07 17:16:14
This needs to be testCase.step_func(event => { ...
pwnall
2016/09/07 22:43:52
Done.
Gah.... thanks!!
|
| + const eventWatcher = requestWatcher(testCase, request); |
| + const database = event.target.result; |
| + const transaction = event.target.transaction; |
| + setupCallback(database, transaction); |
| + resolve(eventWatcher.wait_for('success')); |
| + }; |
| + request.onerror = event => reject(event.target.error); |
| + }).then(event => event.target.result); |
| +}; |
| + |
| +// Creates an IndexedDB database whose name is unique for the test case. |
| +// |
| +// setupCallback will be called during a versionchange transaction, and will be |
| +// given the created database and the versionchange transaction. |
| +// |
| +// Returns a promise that resolves to an IndexedDB database. The caller must |
| +// close the database. |
| +const createDatabase = function(testCase, setupCallback) { |
| + const request = indexedDB.deleteDatabase(databaseName(testCase)); |
| + const eventWatcher = requestWatcher(testCase, request); |
| + |
| + return eventWatcher.wait_for('success').then(event => |
| + migrateDatabase(testCase, 1, setupCallback)); |
| +}; |
| + |
| +promise_test(testCase => { |
| + return createDatabase(testCase, (database, transaction) => { |
| + const store = database.createObjectStore('books'); |
| + store.name = 'renamed_books'; |
| + assert_equals( |
| + store.name, 'books', |
| + 'IndexedDB object store renaming should not be web-exposed'); |
| + const authorIndex = store.createIndex('by_author', 'author'); |
| + authorIndex.name = 'renamed_by_author'; |
| + assert_equals( |
| + authorIndex.name, 'by_author', |
| + 'IndexedDB object store renaming should not be web-exposed'); |
| + }).then(database => database.close()); |
| +}, 'IndexedDB object store and index renaming should not be web-exposed\nThis test is expected to fail in LayoutTests/webexposed'); |
| +</script> |