diff options
Diffstat (limited to 'test/wpt/tests/storage/partitioned-estimate-usage-details-service-workers.tentative.https.sub.html')
-rw-r--r-- | test/wpt/tests/storage/partitioned-estimate-usage-details-service-workers.tentative.https.sub.html | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/test/wpt/tests/storage/partitioned-estimate-usage-details-service-workers.tentative.https.sub.html b/test/wpt/tests/storage/partitioned-estimate-usage-details-service-workers.tentative.https.sub.html new file mode 100644 index 0000000..c52ca34 --- /dev/null +++ b/test/wpt/tests/storage/partitioned-estimate-usage-details-service-workers.tentative.https.sub.html @@ -0,0 +1,88 @@ +<!DOCTYPE html> +<meta name=help href="https://privacycg.github.io/storage-partitioning/"> +<title>Partitioned estimate() usage details for service workers test</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<body> + <script> + const usageDetails = async () => { + return (await navigator.storage.estimate()) + .usageDetails.serviceWorkerRegistrations || 0; + } + + const createSomeUsage = async () => { + const wait_for_active = worker => new Promise(resolve => { + if (worker.active) { resolve(worker.active); } + + const listen_for_active = worker => e => { + if (e.target.state === 'activated') { resolve(worker.active); } + } + + if (worker.waiting) { + worker.waiting + .addEventListener('statechange', listen_for_active(worker.waiting)); + } + if (worker.installing) { + worker.installing.addEventListener('statechange', + listen_for_active(worker.installing)); + } + }); + + const service_worker_registration = + await navigator.serviceWorker.register('resources/worker.js'); + await wait_for_active(service_worker_registration); + return service_worker_registration; + } + + 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-service-workers-helper-frame.html` + document.body.appendChild(iframe); + + async_test(test => { + if (location.origin === alt_origin) + return; + + let service_worker_registration; + window.addEventListener("message", test.step_func(async event => { + if (event.data === "iframe-is-ready") { + details.init = await usageDetails(); + service_worker_registration = await createSomeUsage(); + 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; + + // More cleanup. + test.step(() => service_worker_registration.unregister()); + + 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 service workers test."); + </script> +</body> |