Bug 1665622 [wpt PR 25596] - [COOP] Access reporting with 2 reporters., a=testonly

Automatic update from web-platform-tests
[COOP] Access reporting with 2 reporters.

A regression has been introduced by [1]:
```
[COOP] access reporting: Clear old CoopAccessMonitor.
https://chromium-review.googlesource.com/c/chromium/src/+/2408752
```

Instead of accumulating the CoopAccessMonitor for the same pair of
(accessing, accessed) window, it limited it to one and kept only the
most recent one.

This is an issue, because both the accessing and the accessed window
might have a reporter defined. We must keep both for supporting sending
reports toward both.

This patch adds regressions tests.

Bug: 1090273
Change-Id: I2a3aa7f26458db820d3383245c60c5f3f917acd3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2414308
Reviewed-by: Camille Lamy <clamy@chromium.org>
Commit-Queue: Arthur Sonzogni <arthursonzogni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#808323}

--

wpt-commits: 9d8250c9da13564b98a7d13a6ec5ca48bd11ec30
wpt-pr: 25596
This commit is contained in:
arthursonzogni 2020-09-22 09:17:39 +00:00 коммит произвёл moz-wptsync-bot
Родитель 1e5a67d6f3
Коммит f759dd6e8f
1 изменённых файлов: 124 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,124 @@
<title>
Both the openee and the opener have a COOP reporter. The report are sent to
both side.
</title>
<meta name=timeout content=long>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/common/get-host-info.sub.js></script>
<script src="/common/utils.js"></script>
<script src="../resources/dispatcher.js"></script>
<script src="../resources/try-access.js"></script>
<script>
const directory = "/html/cross-origin-opener-policy/reporting";
const executor_path = directory + "/resources/executor.html?pipe=";
const origin_opener = get_host_info().HTTPS_ORIGIN;
const origin_openee = get_host_info().HTTPS_REMOTE_ORIGIN;
const coep_header = '|header(Cross-Origin-Embedder-Policy,require-corp)';
let escapeComma = url => url.replace(/,/g, '\\,');
let genericSetup = async function(test) {
// The test window.
const this_window_token = token();
// The "opener" window. This has COOP and a reporter.
const opener_report_token= token();
const opener_token = token();
const opener_reportTo = reportToHeaders(opener_report_token);
const opener_url = origin_opener+ executor_path + opener_reportTo.header +
opener_reportTo.coopReportOnlySameOriginHeader + coep_header +
`&uuid=${opener_token}`;
// The "openee" window. This has COOP and a reporter.
const openee_report_token= token();
const openee_token = token();
const openee_reportTo = reportToHeaders(openee_report_token);
const openee_url = origin_openee + executor_path + openee_reportTo.header +
openee_reportTo.coopReportOnlySameOriginHeader + coep_header +
`&uuid=${openee_token}`;
// Cleanup at the end of the test.
test.add_cleanup(() => {
send(openee_token, 'window.close()');
send(opener_token, 'window.close()');
});
// 1. Spawn the opener and the openee windows.
window.open(opener_url);
send(opener_token, `
openee = window.open('${escapeComma(openee_url)}');
`);
// 2. Wait for both to be loaded.
send(openee_token, `send('${this_window_token}', 'ACK');`);
assert_equals(await receive(this_window_token), 'ACK');
return [
this_window_token,
opener_token, opener_report_token, opener_url,
openee_token, openee_report_token, openee_url,
];
}
let assert_generic_coop_report = function(report) {
assert_equals(report.type, "coop");
assert_equals(report.body.disposition, "reporting");
assert_equals(report.body.effectivePolicy, "same-origin-plus-coep");
assert_equals(report.body.property, "blur");
}
promise_test(async test => {
let [
this_window_token,
opener_token, opener_report_token, opener_url,
openee_token, openee_report_token, openee_url,
] = await genericSetup(test);
send(opener_token, `tryAccess(openee);`);
let report_opener =
await receiveReport(opener_report_token, "access-from-coop-page-to-openee")
let report_openee =
await receiveReport(openee_report_token, "access-to-coop-page-from-opener")
assert_not_equals(report_openee, "timeout", "Report openee not received");
assert_not_equals(report_opener, "timeout", "Report opener not received");
assert_generic_coop_report(report_openee);
assert_generic_coop_report(report_opener);
assert_equals(report_opener.url, opener_url.replace(/"/g, '%22'));
assert_equals(report_openee.url, openee_url.replace(/"/g, '%22'));
assert_source_location_found(report_opener);
assert_source_location_missing(report_openee);
}, "Access from opener")
promise_test(async test => {
let [
this_window_token,
opener_token, opener_report_token, opener_url,
openee_token, openee_report_token, openee_url,
] = await genericSetup(test);
send(openee_token, `tryAccess(opener);`);
let report_opener =
await receiveReport(opener_report_token, "access-to-coop-page-from-openee")
let report_openee =
await receiveReport(openee_report_token, "access-from-coop-page-to-opener")
assert_not_equals(report_openee, "timeout", "Report openee not received");
assert_not_equals(report_opener, "timeout", "Report opener not received");
assert_generic_coop_report(report_openee);
assert_generic_coop_report(report_opener);
assert_equals(report_opener.url, opener_url.replace(/"/g, '%22'));
assert_equals(report_openee.url, openee_url.replace(/"/g, '%22'));
assert_source_location_missing(report_opener);
assert_source_location_found(report_openee);
}, "Access from openee")
</script>