diff --git a/lint.whitelist b/lint.whitelist index 31a001c9f6490c..7f267f918460fb 100644 --- a/lint.whitelist +++ b/lint.whitelist @@ -187,6 +187,7 @@ SET TIMEOUT: payment-request/allowpaymentrequest/setting-allowpaymentrequest-tim SET TIMEOUT: preload/single-download-preload.html SET TIMEOUT: resize-observer/resources/iframe.html SET TIMEOUT: resource-timing/resources/iframe-TAO* +SET TIMEOUT: resource-timing/resources/nested-contexts.js SET TIMEOUT: screen-orientation/onchange-event.html SET TIMEOUT: secure-contexts/basic-popup-and-iframe-tests.https.js SET TIMEOUT: service-workers/cache-storage/script-tests/cache-abort.js diff --git a/resource-timing/nested-context-navigations.html b/resource-timing/nested-context-navigations.html new file mode 100644 index 00000000000000..483cc5b82d5deb --- /dev/null +++ b/resource-timing/nested-context-navigations.html @@ -0,0 +1,31 @@ + + + + + +Resource Timing embed navigate - back button navigation + + + + + + diff --git a/resource-timing/resources/document-navigated.html b/resource-timing/resources/document-navigated.html new file mode 100644 index 00000000000000..fa87355c3ed18f --- /dev/null +++ b/resource-timing/resources/document-navigated.html @@ -0,0 +1,12 @@ + + + + + + + navigated document! + + + diff --git a/resource-timing/resources/document-refreshed.html b/resource-timing/resources/document-refreshed.html new file mode 100644 index 00000000000000..7e4ca09891ed35 --- /dev/null +++ b/resource-timing/resources/document-refreshed.html @@ -0,0 +1,12 @@ + + + + + + + Refreshed document! + + + diff --git a/resource-timing/resources/document-that-navigates.html b/resource-timing/resources/document-that-navigates.html new file mode 100644 index 00000000000000..cb567bf3d2ad12 --- /dev/null +++ b/resource-timing/resources/document-that-navigates.html @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/resource-timing/resources/document-that-refreshes.html b/resource-timing/resources/document-that-refreshes.html new file mode 100644 index 00000000000000..75522782a62dbe --- /dev/null +++ b/resource-timing/resources/document-that-refreshes.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resource-timing/resources/embed-navigate-back.html b/resource-timing/resources/embed-navigate-back.html new file mode 100644 index 00000000000000..3c3def1d1a1d04 --- /dev/null +++ b/resource-timing/resources/embed-navigate-back.html @@ -0,0 +1,14 @@ + + + + +Resource Timing embed navigate - back button navigation + + + + + diff --git a/resource-timing/resources/embed-navigate.html b/resource-timing/resources/embed-navigate.html new file mode 100644 index 00000000000000..20a73c662b4f7b --- /dev/null +++ b/resource-timing/resources/embed-navigate.html @@ -0,0 +1,15 @@ + + + + +Resource Timing embed navigate + + + +
+ + diff --git a/resource-timing/resources/embed-refresh.html b/resource-timing/resources/embed-refresh.html new file mode 100644 index 00000000000000..4a49fd0b4c1b54 --- /dev/null +++ b/resource-timing/resources/embed-refresh.html @@ -0,0 +1,15 @@ + + + + +Resource Timing embed refresh + + + +
+ + diff --git a/resource-timing/resources/iframe-navigate-back.html b/resource-timing/resources/iframe-navigate-back.html new file mode 100644 index 00000000000000..c5c1fc1ad4dfaa --- /dev/null +++ b/resource-timing/resources/iframe-navigate-back.html @@ -0,0 +1,14 @@ + + + + +Resource Timing iframe navigate - back button navigation + + + + + diff --git a/resource-timing/resources/iframe-navigate.html b/resource-timing/resources/iframe-navigate.html new file mode 100644 index 00000000000000..2a1a7e063619fe --- /dev/null +++ b/resource-timing/resources/iframe-navigate.html @@ -0,0 +1,15 @@ + + + + +Resource Timing iframe navigate + + + +
+ + diff --git a/resource-timing/resources/iframe-refresh.html b/resource-timing/resources/iframe-refresh.html new file mode 100644 index 00000000000000..4ce3ea0424297a --- /dev/null +++ b/resource-timing/resources/iframe-refresh.html @@ -0,0 +1,15 @@ + + + + +Resource Timing iframe refresh + + + +
+ + diff --git a/resource-timing/resources/navigate_back.html b/resource-timing/resources/navigate_back.html new file mode 100644 index 00000000000000..345eee1fccca5c --- /dev/null +++ b/resource-timing/resources/navigate_back.html @@ -0,0 +1,7 @@ + + + + + diff --git a/resource-timing/resources/nested-contexts.js b/resource-timing/resources/nested-contexts.js new file mode 100644 index 00000000000000..0c202243702aec --- /dev/null +++ b/resource-timing/resources/nested-contexts.js @@ -0,0 +1,95 @@ +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() { + 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", "*"); + return; + } + opener.postMessage("PASS", "*"); + } + window.addEventListener("message", e=>{ + if (e.data == "navigated") { + if (sessionStorage.navigated) { + delete sessionStorage.navigated; + verify_document_navigate_not_observable(); + } 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); +} diff --git a/resource-timing/resources/object-navigate-back.html b/resource-timing/resources/object-navigate-back.html new file mode 100644 index 00000000000000..64e5f584731fdf --- /dev/null +++ b/resource-timing/resources/object-navigate-back.html @@ -0,0 +1,14 @@ + + + + +Resource Timing object navigate - back button navigation + + + + + diff --git a/resource-timing/resources/object-navigate.html b/resource-timing/resources/object-navigate.html new file mode 100644 index 00000000000000..cbb862e7e00fcb --- /dev/null +++ b/resource-timing/resources/object-navigate.html @@ -0,0 +1,15 @@ + + + + +Resource Timing object navigate + + + +
+ + diff --git a/resource-timing/resources/object-refresh.html b/resource-timing/resources/object-refresh.html new file mode 100644 index 00000000000000..b14cf7f17c9d80 --- /dev/null +++ b/resource-timing/resources/object-refresh.html @@ -0,0 +1,15 @@ + + + + +Resource Timing object refresh + + + +
+ +