summaryrefslogtreecommitdiffstats
path: root/test/wpt/tests/service-workers/service-worker/resource-timing-bodySize.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'test/wpt/tests/service-workers/service-worker/resource-timing-bodySize.https.html')
-rw-r--r--test/wpt/tests/service-workers/service-worker/resource-timing-bodySize.https.html55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/wpt/tests/service-workers/service-worker/resource-timing-bodySize.https.html b/test/wpt/tests/service-workers/service-worker/resource-timing-bodySize.https.html
new file mode 100644
index 0000000..5c2b1eb
--- /dev/null
+++ b/test/wpt/tests/service-workers/service-worker/resource-timing-bodySize.https.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<meta name="timeout" content="long">
+<script src="/common/utils.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/test-helpers.sub.js"></script>
+<script>
+const {REMOTE_ORIGIN} = get_host_info();
+
+/*
+ This test does the following:
+ - Loads a service worker
+ - Loads an iframe in the service worker's scope
+ - The service worker tries to fetch a resource which is either:
+ - constructed inside the service worker
+ - fetched from a different URL ny the service worker
+ - Streamed from a differend URL by the service worker
+ - Passes through
+ - By default the RT entry should have encoded/decoded body size. except for
+ the case where the response is an opaque pass-through.
+*/
+function test_scenario({tao, mode, name}) {
+ promise_test(async (t) => {
+ const uid = token();
+ const worker_url = `resources/fetch-response.js?uid=${uid}`;
+ const scope = `resources/fetch-response.html?uid=${uid}`;
+ const iframe = document.createElement('iframe');
+ const path = name === "passthrough" ? `element-timing/resources/TAOImage.py?origin=*&tao=${
+ tao === "pass" ? "wildcard" : "none"})}` : name;
+
+ iframe.src = `${scope}&path=${encodeURIComponent(
+ `${mode === "same-origin" ? "" : REMOTE_ORIGIN}/${path}`)}&mode=${mode}`;
+ const registration = await service_worker_unregister_and_register(t, worker_url, scope);
+ t.add_cleanup(() => registration.unregister());
+ t.add_cleanup(() => iframe.remove());
+ await wait_for_state(t, registration.installing, 'activated');
+ const waitForMessage = new Promise(resolve =>
+ window.addEventListener('message', ({data}) => resolve(data)));
+ document.body.appendChild(iframe);
+ const {buffer, entry} = await waitForMessage;
+ const expectPass = name !== "passthrough" || mode !== "no-cors";
+ assert_equals(buffer.byteLength, expectPass ? entry.decodedBodySize : 0);
+ assert_equals(buffer.byteLength, expectPass ? entry.encodedBodySize : 0);
+ }, `Response body size: ${name}, ${mode}, TAO ${tao}`);
+}
+for (const mode of ["cors", "no-cors", "same-origin"]) {
+ for (const tao of ["pass", "fail"])
+ for (const name of ['constructed', 'forward', 'stream', 'passthrough']) {
+ test_scenario({tao, mode, name});
+ }
+}
+
+</script>