Reland "[COEPForSharedWorker] Add reporter to shared worker host."
This is a reland of 0d08f846ca52f20d37d398ae4f73f40a48e5ebb4
Original change's description:
> [COEPForSharedWorker] Add reporter to shared worker host.
>
> Add reporter to shared worker, which doesn't change the
> behaviour as COEP is not currently handed to the
> URLLoaderFactory.
>
> Bug: 1060832
> Change-Id: I4a4b55acd2bcdebef3ab20d741acdc1d188ac719
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2944788
> Commit-Queue: Yifan Luo <lyf@chromium.org>
> Reviewed-by: Camille Lamy <clamy@chromium.org>
> Reviewed-by: Yutaka Hirano <yhirano@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#903576}
Bug: 1060832
Change-Id: Ibbc9635a174de3a6059779dcf4e497c91a589924
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3043581
Reviewed-by: Yifan Luo <lyf@chromium.org>
Reviewed-by: Yutaka Hirano <yhirano@chromium.org>
Reviewed-by: Camille Lamy <clamy@chromium.org>
Commit-Queue: Yifan Luo <lyf@chromium.org>
Cr-Commit-Position: refs/heads/master@{#903879}
diff --git a/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html b/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html
index ad1f18c..56dccfe 100644
--- a/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html
+++ b/html/cross-origin-embedder-policy/reporting-to-endpoint.https.html
@@ -24,6 +24,9 @@
const FRAME_URL = `resources/reporting-empty-frame.html` +
`?pipe=header(cross-origin-embedder-policy,require-corp;report-to="endpoint")` +
`|header(cross-origin-embedder-policy-report-only,require-corp;report-to="report-only-endpoint")`;
+const WORKER_URL = `resources/shared-worker.js` +
+ '?pipe=header(cross-origin-embedder-policy,require-corp;report-to="endpoint")' +
+ `|header(cross-origin-embedder-policy-report-only,require-corp;report-to="report-only-endpoint")`;
function wait(ms) {
return new Promise(resolve => step_timeout(resolve, ms));
@@ -58,7 +61,7 @@
}
await wait(retryDelay);
}
- assert_unreached(`A report whose blockedURL is ${blockedUrl} and url is ${contextUrl} is not found.`);
+ assert_unreached(`A report whose blockedURL is ${blockedUrl.split("?")[0]} and url is ${contextUrl} is not found.`);
}
async function checkNavigationReportExistence(endpoint, blockedUrl, contextUrl, disposition) {
@@ -80,7 +83,7 @@
}
await wait(retryDelay);
}
- assert_unreached(`A report whose blockedURL is ${blockedUrl} and url is ${contextUrl} is not found.`);
+ assert_unreached(`A report whose blockedURL is ${blockedUrl.split("?")[0]} and url is ${contextUrl} is not found.`);
}
promise_test(async t => {
@@ -177,4 +180,27 @@
}, 'Two COEP headers, split inside report-to value');
+// Shared worker do not support observer currently, so add test for endpoint
+// here.
+promise_test(async (t) => {
+ const iframe = document.createElement('iframe');
+ t.add_cleanup(() => iframe.remove());
+
+ iframe.src = FRAME_URL;
+ const targetUrl = `${REMOTE_ORIGIN}/common/blank.html?${token()}`;
+ document.body.appendChild(iframe);
+
+ const worker = new iframe.contentWindow.SharedWorker(WORKER_URL);
+ worker.port.start();
+ const script =
+ `fetch('${targetUrl}', {mode: 'no-cors', cache: 'no-store'}).catch(e => {});`;
+ worker.addEventListener('error', t.unreached_func('Worker.onerror'));
+ worker.port.postMessage(script);
+
+ await checkCorpReportExistence(
+ 'endpoint', targetUrl, WORKER_URL, 'iframe', 'enforce');
+ await checkCorpReportExistence(
+ 'report-only-endpoint', targetUrl, WORKER_URL, 'iframe', 'reporting');
+}, 'Shared worker fetch');
+
</script>
diff --git a/html/cross-origin-embedder-policy/resources/shared-worker.js b/html/cross-origin-embedder-policy/resources/shared-worker.js
new file mode 100644
index 0000000..c5f2c3c
--- /dev/null
+++ b/html/cross-origin-embedder-policy/resources/shared-worker.js
@@ -0,0 +1,7 @@
+onconnect = (event) => {
+ const port = event.ports[0];
+ port.onmessage = (event) => {
+ eval(event.data);
+ };
+ port.postMessage('ready');
+};