blob: 0a10f32beaf58f222d046d12fe452a5c4f1135c7 [file] [log] [blame]
<!DOCTYPE html>
<html>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/fetch/metadata/resources/helper.js></script>
<script>
// Test that correct `Sec-Fetch-Site` (and other `Sec-Fetch-...` request
/// headers) are used in navigations triggered by |history.back()|.
function add_test(description, report_host, go_back_host, expectations) {
async_test(t => {
// STEP1: Navigate a new window to report_host/post-to-owner.py
const url_suffix = '/fetch/metadata/resources/post-to-owner.py';
const url = `https://${report_host}${url_suffix}`;
const w = window.open(url, '_blank');
var msg_counter = 0;
window.addEventListener('message', t.step_func(e => {
if (e.source != w)
return;
msg_counter = msg_counter + 1;
if (msg_counter == 1) {
// STEP2: Verify the headers (this is a sanity check that the same
// headers are used here and in STEP5).
assert_header_equals(e.data, expectations, description + " 1");
// STEP3: Go to go_back_host/go-back.html (postponing this via
// step_timeout ensures that go-back.html will get a separate
// history entry - otherwise it might be treated as a client-side
// redirect and we might end up with nowhere to go back to).
t.step_timeout(() => {
const url_suffix = '/fetch/metadata/resources/go-back.html';
const url = `https://${go_back_host}${url_suffix}`;
w.location = url;
});
// STEP4 (elsewhere - inside go-back.html): Call history.back().
} else if (msg_counter == 2) {
// STEP5: Verify the headers (this is the main verification and focus
// of the test).
assert_header_equals(e.data, expectations, description + " 2");
// STEP6: Finish the test.
t.done();
}
}));
}, description);
}
const same_origin_host = "{{host}}:{{ports[https][0]}}";
const same_site_host = "{{hosts[][www]}}:{{ports[https][0]}}";
const cross_site_host = "{{hosts[alt][www]}}:{{ports[https][0]}}";
add_test(
"back to same-origin-initiated navigation",
same_origin_host, // report_host
cross_site_host, // go_back_host
{ "site": "same-origin",
"user": "",
"mode": "navigate",
"dest": "document"
});
add_test(
"back to same-site-initiated navigation",
same_site_host, // report_host
cross_site_host, // go_back_host
{ "site": "same-site",
"user": "",
"mode": "navigate",
"dest": "document"
});
add_test(
"back to cross-site-initiated navigation",
cross_site_host, // report_host
cross_site_host, // go_back_host
{ "site": "cross-site",
"user": "",
"mode": "navigate",
"dest": "document"
});
</script>