summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/storage/partitioned-estimate-usage-details-indexeddb.tentative.https.sub.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/storage/partitioned-estimate-usage-details-indexeddb.tentative.https.sub.html')
-rw-r--r--testing/web-platform/tests/storage/partitioned-estimate-usage-details-indexeddb.tentative.https.sub.html84
1 files changed, 84 insertions, 0 deletions
diff --git a/testing/web-platform/tests/storage/partitioned-estimate-usage-details-indexeddb.tentative.https.sub.html b/testing/web-platform/tests/storage/partitioned-estimate-usage-details-indexeddb.tentative.https.sub.html
new file mode 100644
index 0000000000..98a1ed8da2
--- /dev/null
+++ b/testing/web-platform/tests/storage/partitioned-estimate-usage-details-indexeddb.tentative.https.sub.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<meta name=help href="https://privacycg.github.io/storage-partitioning/">
+<title>Partitioned estimate() usage details for indexeddb test</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/utils.js"></script>
+<script src="./helpers.js"></script>
+<script src="../IndexedDB/resources/support-promises.js"></script>
+
+<body>
+ <script>
+ const usageDetails = async () =>
+ (await navigator.storage.estimate()).usageDetails.indexedDB || 0;
+
+ const createSomeUsage = async (test) => {
+ // We use 100KB here because db compaction usually happens every few MB
+ // 100KB is large enough to avoid a false positive (small amounts of
+ // metadata getting written for some random reason), and small enough to
+ // avoid compaction with a reasonably high probability.
+ const write_size = 1024 * 100;
+ const object_store_name = token();
+ const db_name = self.location.pathname;
+
+ await indexedDB.deleteDatabase(db_name);
+ const db = await createDB(db_name, object_store_name, test);
+ const transaction = db.transaction(object_store_name, 'readwrite');
+ const value_to_store = largeValue(write_size, Math.random() * 255);
+ transaction.objectStore(object_store_name).add(value_to_store, 1);
+
+ await transactionPromise(transaction);
+ return db;
+ }
+
+ const testPath = () => location.pathname.split("/").slice(0, -1).join("/");
+
+ let alt_origin = "https://{{hosts[alt][]}}:{{ports[https][0]}}";
+ let details = {};
+
+ const iframe = document.createElement("iframe");
+ iframe.src = `https://{{host}}:{{ports[https][0]}}${testPath()}/resources` +
+ `/partitioned-estimate-usage-details-indexeddb-helper-frame.html`;
+ document.body.appendChild(iframe);
+
+ async_test(test => {
+ if (location.origin === alt_origin)
+ return;
+
+ let db;
+ window.addEventListener("message", test.step_func(async event => {
+ if (event.data === "iframe-is-ready") {
+ details.init = await usageDetails();
+ db = await createSomeUsage(test);
+ details.after = await usageDetails();
+ assert_greater_than(details.after, details.init);
+
+ iframe.contentWindow.postMessage("get-details", iframe.origin);
+ }
+ }));
+
+ window.addEventListener("message", test.step_func(event => {
+ if (event.data.source === "same-site") {
+ details.same_site = event.data;
+
+ const cross_site_window = window
+ .open(`${alt_origin}${location.pathname}`, "", "noopener=false");
+ test.add_cleanup(() => cross_site_window.close());
+ }
+ if (event.data.source === "cross-site") {
+ details.cross_site = event.data;
+
+ // Some cleanup
+ test.step(async () => await db.close());
+
+ test.step(() => {
+ assert_true(details.cross_site.init == 0, "Usage should be 0.");
+ assert_equals(details.same_site.init, details.after);
+ });
+
+ test.done();
+ }
+ }));
+ }, "Partitioned estimate() usage details for indexeddb test.");
+ </script>
+</body>