// META: title=Bucket quota enforcement for indexeddb // META: script=/storage/buckets/resources/util.js promise_test(async t => { prepareForBucketTest(t); const arraySize = 1e6; const objectStoreName = "storageManager"; const dbname = this.window ? window.location.pathname : 'estimate-worker.https.html'; let quota = arraySize * 1.5; const bucket = await navigator.storageBuckets.open('idb', {quota}); await indexedDbDeleteRequest(bucket.indexedDB, dbname); const db = await indexedDbOpenRequest(t, bucket.indexedDB, dbname, (db_to_upgrade) => { db_to_upgrade.createObjectStore(objectStoreName); }); t.add_cleanup(() => { db.close(); }); const txn = db.transaction(objectStoreName, 'readwrite'); const buffer = new ArrayBuffer(arraySize); const view = new Uint8Array(buffer); for (let i = 0; i < arraySize; i++) { view[i] = Math.floor(Math.random() * 255); } // Two puts in one transaction to ensure that both are counted towards quota. txn.objectStore(objectStoreName).add(new Blob([buffer], { type: 'binary/random' }), 1); txn.objectStore(objectStoreName).add(new Blob([buffer], { type: 'binary/random' }), 2); await promise_rejects_quotaexceedederror(t, transactionPromise(txn), null, null); }, 'IDB respects bucket quota');