blob: 07ef33851b012599f2a0103636b3f7db669af881 [file] [log] [blame]
let destination = location;
if (location.search == "?crossorigin") {
const host_info = get_host_info()
destination = location.protocol + "//" + host_info["REMOTE_HOST"] + ":" + location.port;
}
const pre_navigate_url = new URL("/resource-timing/resources/document-that-navigates.html", destination).href;
const post_navigate_url = new URL("/resource-timing/resources/document-navigated.html", destination).href;
const pre_refresh_url = new URL("/resource-timing/resources/document-that-refreshes.html", destination).href;
const post_refresh_url = new URL("/resource-timing/resources/document-refreshed.html", destination).href;
function setup_navigate_or_refresh(type, pre, post) {
function verify_document_navigate_not_observable() {
let entries = performance.getEntriesByType("resource");
let found_first_document = false;
for (entry of entries) {
if (entry.name == pre) {
found_first_document = true;
}
if (entry.name == post) {
opener.postMessage("FAIL - " + type + " document should not be observable", "*");
return;
}
}
if (!found_first_document) {
opener.postMessage("FAIL - initial document should be observable", "*");
return;
}
opener.postMessage("PASS", "*");
}
window.addEventListener("message", e=>{
if (e.data == type) {
verify_document_navigate_not_observable();
}
});
}
function setup_navigate_test() {
setup_navigate_or_refresh("navigated", pre_navigate_url, post_navigate_url);
}
function setup_refresh_test() {
setup_navigate_or_refresh("refreshed", pre_refresh_url, post_refresh_url);
}
function setup_back_navigation(pushed_url) {
function verify_document_navigate_not_observable(navigated_back) {
let entries = performance.getEntriesByType("resource");
let found_first_document = false;
for (entry of entries) {
if (entry.name == pre_navigate_url) {
found_first_document = true;
}
if (entry.name == post_navigate_url) {
opener.postMessage("FAIL - navigated document exposed", "*");
return;
}
}
if (!found_first_document) {
opener.postMessage("FAIL - first document not exposed. navigated_back is " + navigated_back, "*");
return;
}
if (navigated_back) {
opener.postMessage("PASS", "*");
}
}
window.addEventListener("message", e=>{
if (e.data == "navigated") {
verify_document_navigate_not_observable(sessionStorage.navigated);
if (sessionStorage.navigated) {
delete sessionStorage.navigated;
} else {
sessionStorage.navigated = true;
setTimeout(() => {
history.pushState({}, "", pushed_url);
location.href="navigate_back.html";
}, 0);
}
}
});
}
function open_test_window(url, message) {
promise_test(() => {
return new Promise((resolve, reject) => {
let openee = window.open(url);
addEventListener("message", e => {
openee.close();
if (e.data == "PASS") {
resolve();
} else {
reject(e.data);
}
});
});
}, message);
}