summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/storage/buckets
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:47:29 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:47:29 +0000
commit0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d (patch)
treea31f07c9bcca9d56ce61e9a1ffd30ef350d513aa /testing/web-platform/tests/storage/buckets
parentInitial commit. (diff)
downloadfirefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.tar.xz
firefox-esr-0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d.zip
Adding upstream version 115.8.0esr.upstream/115.8.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/storage/buckets')
-rw-r--r--testing/web-platform/tests/storage/buckets/META.yml5
-rw-r--r--testing/web-platform/tests/storage/buckets/bucket-quota-indexeddb.tentative.https.any.js35
-rw-r--r--testing/web-platform/tests/storage/buckets/bucket-storage-policy.tentative.https.any.js21
-rw-r--r--testing/web-platform/tests/storage/buckets/resources/cached-resource.txt1
-rw-r--r--testing/web-platform/tests/storage/buckets/resources/util.js57
5 files changed, 119 insertions, 0 deletions
diff --git a/testing/web-platform/tests/storage/buckets/META.yml b/testing/web-platform/tests/storage/buckets/META.yml
new file mode 100644
index 0000000000..4f215060f5
--- /dev/null
+++ b/testing/web-platform/tests/storage/buckets/META.yml
@@ -0,0 +1,5 @@
+spec: https://github.com/WICG/storage-buckets
+suggested_reviewers:
+ - ayui
+ - jsbell
+ - pwnall
diff --git a/testing/web-platform/tests/storage/buckets/bucket-quota-indexeddb.tentative.https.any.js b/testing/web-platform/tests/storage/buckets/bucket-quota-indexeddb.tentative.https.any.js
new file mode 100644
index 0000000000..ba82edb72e
--- /dev/null
+++ b/testing/web-platform/tests/storage/buckets/bucket-quota-indexeddb.tentative.https.any.js
@@ -0,0 +1,35 @@
+// META: title=Bucket quota enforcement for indexeddb
+// META: script=/storage/buckets/resources/util.js
+
+promise_test(async t => {
+ const arraySize = 1e6;
+ const objectStoreName = "storageManager";
+ const dbname =
+ this.window ? window.location.pathname : 'estimate-worker.https.html';
+
+ let quota = arraySize / 2;
+ 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);
+ });
+
+ 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);
+ }
+
+ const testBlob = new Blob([buffer], {type: 'binary/random'});
+ txn.objectStore(objectStoreName).add(testBlob, 1);
+
+ await promise_rejects_dom(
+ t, 'QuotaExceededError', transactionPromise(txn));
+
+ db.close();
+}, 'IDB respects bucket quota');
diff --git a/testing/web-platform/tests/storage/buckets/bucket-storage-policy.tentative.https.any.js b/testing/web-platform/tests/storage/buckets/bucket-storage-policy.tentative.https.any.js
new file mode 100644
index 0000000000..d6dce3675d
--- /dev/null
+++ b/testing/web-platform/tests/storage/buckets/bucket-storage-policy.tentative.https.any.js
@@ -0,0 +1,21 @@
+// META: title=Buckets API: Tests for bucket storage policies.
+// META: script=/storage/buckets/resources/util.js
+// META: global=window,worker
+
+'use strict';
+
+promise_test(async testCase => {
+ await prepareForBucketTest(testCase);
+
+ await promise_rejects_js(
+ testCase, TypeError,
+ navigator.storageBuckets.open('negative', {quota: -1}));
+
+ await promise_rejects_js(
+ testCase, TypeError, navigator.storageBuckets.open('zero', {quota: 0}));
+
+ await promise_rejects_js(
+ testCase, TypeError,
+ navigator.storageBuckets.open(
+ 'above_max', {quota: Number.MAX_SAFE_INTEGER + 1}));
+}, 'The open promise should reject with a TypeError when quota is requested outside the range of 1 to Number.MAX_SAFE_INTEGER.');
diff --git a/testing/web-platform/tests/storage/buckets/resources/cached-resource.txt b/testing/web-platform/tests/storage/buckets/resources/cached-resource.txt
new file mode 100644
index 0000000000..c57eff55eb
--- /dev/null
+++ b/testing/web-platform/tests/storage/buckets/resources/cached-resource.txt
@@ -0,0 +1 @@
+Hello World! \ No newline at end of file
diff --git a/testing/web-platform/tests/storage/buckets/resources/util.js b/testing/web-platform/tests/storage/buckets/resources/util.js
new file mode 100644
index 0000000000..425303ce2c
--- /dev/null
+++ b/testing/web-platform/tests/storage/buckets/resources/util.js
@@ -0,0 +1,57 @@
+'use strict';
+
+// Makes sure initial bucket state is as expected and to clean up after the test
+// is over (whether it passes or fails).
+async function prepareForBucketTest(test) {
+ // Verify initial state.
+ assert_equals('', (await navigator.storageBuckets.keys()).join());
+ // Clean up after test.
+ test.add_cleanup(async function() {
+ const keys = await navigator.storageBuckets.keys();
+ for (const key of keys) {
+ await navigator.storageBuckets.delete(key);
+ }
+ });
+}
+
+function indexedDbOpenRequest(t, idb, dbname, upgrade_func) {
+ return new Promise((resolve, reject) => {
+ const openRequest = idb.open(dbname);
+ t.add_cleanup(() => {
+ indexedDbDeleteRequest(idb, dbname);
+ });
+
+ openRequest.onerror = () => {
+ reject(openRequest.error);
+ };
+ openRequest.onsuccess = () => {
+ resolve(openRequest.result);
+ };
+ openRequest.onupgradeneeded = event => {
+ upgrade_func(openRequest.result);
+ };
+ });
+}
+
+function indexedDbDeleteRequest(idb, name) {
+ return new Promise((resolve, reject) => {
+ const deleteRequest = idb.deleteDatabase(name);
+ deleteRequest.onerror = () => {
+ reject(deleteRequest.error);
+ };
+ deleteRequest.onsuccess = () => {
+ resolve();
+ };
+ });
+}
+
+function transactionPromise(txn) {
+ return new Promise((resolve, reject) => {
+ txn.onabort = () => {
+ reject(txn.error);
+ };
+ txn.oncomplete = () => {
+ resolve();
+ };
+ });
+}