storage-buckets.https.any.js (3832B)
1 // META: title=Buckets API: Tests for indexedDB API. 2 // META: global=window,worker 3 // META: script=resources/support-promises.js 4 // META: script=/storage/buckets/resources/util.js 5 'use strict'; 6 7 promise_test(async testCase => { 8 await prepareForBucketTest(testCase); 9 const inboxBucket = await navigator.storageBuckets.open('inbox_bucket'); 10 const outboxBucket = await navigator.storageBuckets.open('outbox_bucket'); 11 12 // Set up similar databases in two buckets. 13 const inboxDb = await new Promise((resolve, reject) => { 14 const request = inboxBucket.indexedDB.open('messages'); 15 request.onupgradeneeded = (event) => { 16 const inboxStore = 17 event.target.result.createObjectStore('primary', {keyPath: 'id'}); 18 event.target.transaction.commit(); 19 }; 20 request.onsuccess = () => resolve(request.result); 21 request.onerror = () => reject(request.error); 22 }); 23 24 const txn = inboxDb.transaction(['primary'], 'readwrite'); 25 const inboxStore = txn.objectStore('primary'); 26 inboxStore.put({ subject: 'Bonjour', id: '42'}); 27 txn.commit(); 28 await promiseForTransaction(testCase, txn); 29 30 const outboxDb = await new Promise((resolve, reject) => { 31 const request = outboxBucket.indexedDB.open('messages'); 32 request.onupgradeneeded = (event) => { 33 const outboxStore = 34 event.target.result.createObjectStore('primary', {keyPath: 'id'}); 35 event.target.transaction.commit(); 36 }; 37 request.onsuccess = () => resolve(request.result); 38 request.onerror = () => reject(request.error); 39 }); 40 41 const txn2 = outboxDb.transaction(['primary'], 'readwrite'); 42 const outboxStore = txn2.objectStore('primary'); 43 outboxStore.put({ subject: 're: Bonjour', id: '47'}); 44 txn2.commit(); 45 await promiseForTransaction(testCase, txn2); 46 47 // Make sure it's possible to read from the bucket database. 48 const inboxMessage = await new Promise((resolve, reject) => { 49 const txn3 = inboxDb.transaction(['primary'], 'readonly'); 50 const inboxLookup = txn3.objectStore('primary').get('42'); 51 inboxLookup.onsuccess = (e) => resolve(inboxLookup.result); 52 inboxLookup.onerror = (e) => reject(inboxLookup.error); 53 }); 54 assert_equals(inboxMessage.subject, 'Bonjour'); 55 56 // Make sure it's possible to read from the other bucket database. 57 const outboxMessage = await new Promise((resolve, reject) => { 58 const txn4 = outboxDb.transaction(['primary'], 'readonly'); 59 const outboxLookup = txn4.objectStore('primary').get('47'); 60 outboxLookup.onsuccess = (e) => resolve(outboxLookup.result); 61 outboxLookup.onerror = (e) => reject(outboxLookup.error); 62 }); 63 assert_equals(outboxMessage.subject, 're: Bonjour'); 64 65 // Make sure they are different databases (looking up the data keyed on `47` 66 // fails in the first database). 67 const nonexistentInboxMessage = await new Promise((resolve, reject) => { 68 const txn5 = inboxDb.transaction(['primary'], 'readonly'); 69 const nonexistentInboxLookup = txn5.objectStore('primary').get('47'); 70 nonexistentInboxLookup.onsuccess = (e) => 71 resolve(nonexistentInboxLookup.result); 72 nonexistentInboxLookup.onerror = (e) => 73 reject(nonexistentInboxLookup.error); 74 }); 75 assert_equals(nonexistentInboxMessage, undefined); 76 }, 'Basic test that buckets create independent databases.'); 77 78 promise_test(async testCase => { 79 await prepareForBucketTest(testCase); 80 const inboxBucket = await navigator.storageBuckets.open('inbox'); 81 await navigator.storageBuckets.delete('inbox'); 82 83 return promise_rejects_dom( 84 testCase, 'UnknownError', new Promise((resolve, reject) => { 85 const request = inboxBucket.indexedDB.open('messages'); 86 request.onsuccess = () => resolve(request.result); 87 request.onerror = () => reject(request.error); 88 })); 89 }, 'Tests trying to use indexedDB in a deleted bucket.');