88 lines
3.7 KiB
JavaScript
88 lines
3.7 KiB
JavaScript
// META: title=Buckets API: Tests for indexedDB API.
|
|
// META: global=window,worker
|
|
// META: script=resources/support-promises.js
|
|
// META: script=/storage/buckets/resources/util.js
|
|
|
|
promise_test(async testCase => {
|
|
await prepareForBucketTest(testCase);
|
|
const inboxBucket = await navigator.storageBuckets.open('inbox_bucket');
|
|
const outboxBucket = await navigator.storageBuckets.open('outbox_bucket');
|
|
|
|
// Set up similar databases in two buckets.
|
|
const inboxDb = await new Promise((resolve, reject) => {
|
|
const request = inboxBucket.indexedDB.open('messages');
|
|
request.onupgradeneeded = (event) => {
|
|
const inboxStore =
|
|
event.target.result.createObjectStore('primary', {keyPath: 'id'});
|
|
event.target.transaction.commit();
|
|
};
|
|
request.onsuccess = () => resolve(request.result);
|
|
request.onerror = () => reject(request.error);
|
|
});
|
|
|
|
const txn = inboxDb.transaction(['primary'], 'readwrite');
|
|
const inboxStore = txn.objectStore('primary');
|
|
inboxStore.put({ subject: 'Bonjour', id: '42'});
|
|
txn.commit();
|
|
await promiseForTransaction(testCase, txn);
|
|
|
|
const outboxDb = await new Promise((resolve, reject) => {
|
|
const request = outboxBucket.indexedDB.open('messages');
|
|
request.onupgradeneeded = (event) => {
|
|
const outboxStore =
|
|
event.target.result.createObjectStore('primary', {keyPath: 'id'});
|
|
event.target.transaction.commit();
|
|
};
|
|
request.onsuccess = () => resolve(request.result);
|
|
request.onerror = () => reject(request.error);
|
|
});
|
|
|
|
const txn2 = outboxDb.transaction(['primary'], 'readwrite');
|
|
const outboxStore = txn2.objectStore('primary');
|
|
outboxStore.put({ subject: 're: Bonjour', id: '47'});
|
|
txn2.commit();
|
|
await promiseForTransaction(testCase, txn2);
|
|
|
|
// Make sure it's possible to read from the bucket database.
|
|
const inboxMessage = await new Promise((resolve, reject) => {
|
|
const txn3 = inboxDb.transaction(['primary'], 'readonly');
|
|
const inboxLookup = txn3.objectStore('primary').get('42');
|
|
inboxLookup.onsuccess = (e) => resolve(inboxLookup.result);
|
|
inboxLookup.onerror = (e) => reject(inboxLookup.error);
|
|
});
|
|
assert_equals(inboxMessage.subject, 'Bonjour');
|
|
|
|
// Make sure it's possible to read from the other bucket database.
|
|
const outboxMessage = await new Promise((resolve, reject) => {
|
|
const txn4 = outboxDb.transaction(['primary'], 'readonly');
|
|
const outboxLookup = txn4.objectStore('primary').get('47');
|
|
outboxLookup.onsuccess = (e) => resolve(outboxLookup.result);
|
|
outboxLookup.onerror = (e) => reject(outboxLookup.error);
|
|
});
|
|
assert_equals(outboxMessage.subject, 're: Bonjour');
|
|
|
|
// Make sure they are different databases (looking up the data keyed on `47`
|
|
// fails in the first database).
|
|
const nonexistentInboxMessage = await new Promise((resolve, reject) => {
|
|
const txn5 = inboxDb.transaction(['primary'], 'readonly');
|
|
const nonexistentInboxLookup = txn5.objectStore('primary').get('47');
|
|
nonexistentInboxLookup.onsuccess = (e) =>
|
|
resolve(nonexistentInboxLookup.result);
|
|
nonexistentInboxLookup.onerror = (e) =>
|
|
reject(nonexistentInboxLookup.error);
|
|
});
|
|
assert_equals(nonexistentInboxMessage, undefined);
|
|
}, 'Basic test that buckets create independent databases.');
|
|
|
|
promise_test(async testCase => {
|
|
await prepareForBucketTest(testCase);
|
|
const inboxBucket = await navigator.storageBuckets.open('inbox');
|
|
await navigator.storageBuckets.delete('inbox');
|
|
|
|
return promise_rejects_dom(
|
|
testCase, 'UnknownError', new Promise((resolve, reject) => {
|
|
const request = inboxBucket.indexedDB.open('messages');
|
|
request.onsuccess = () => resolve(request.result);
|
|
request.onerror = () => reject(request.error);
|
|
}));
|
|
}, 'Tests trying to use indexedDB in a deleted bucket.');
|