Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add nested-context resource-timing tests #13823

Merged
merged 13 commits into from
Mar 13, 2019
1 change: 1 addition & 0 deletions lint.whitelist
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
16 changes: 16 additions & 0 deletions resource-timing/embed-navigate-back.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing embed navigate - back button navigation</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
async_test(t => {
window.open("resources/embed-navigate-back.html");
yoavweiss marked this conversation as resolved.
Show resolved Hide resolved
addEventListener("message", t.step_func_done(e => {
assert_equals(e.data, "PASS");
}));
}, "Test that embed navigates are not observable by the parent, even after history navigations");
</script>

16 changes: 16 additions & 0 deletions resource-timing/embed-navigate.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing embed navigate</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/nested-contexts.js"></script>
yoavweiss marked this conversation as resolved.
Show resolved Hide resolved
<script>
let t = async_test("Test that HTML embed navigates are not observable by the parent");
setup_navigate_test(t);
</script>
<embed type="text/html">
<script>
document.getElementsByTagName("embed")[0].src = pre_navigate_url;
</script>
16 changes: 16 additions & 0 deletions resource-timing/embed-refresh.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing embed refresh</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/nested-contexts.js"></script>
yoavweiss marked this conversation as resolved.
Show resolved Hide resolved
<script>
let t = async_test("Test that an HTML embed refreshes are not observable by the parent");
setup_refresh_test(t);
</script>
<embed type="text/html">
<script>
document.getElementsByTagName("embed")[0].src = pre_refresh_url;
</script>
16 changes: 16 additions & 0 deletions resource-timing/iframe-navigate-back.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing iframe navigate - back button navigation</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
async_test(t => {
window.open("resources/iframe-navigate-back.html");
addEventListener("message", t.step_func_done(e => {
assert_equals(e.data, "PASS");
}));
}, "Test that iframe navigations are not observable by the parent, even after history navigations");
</script>

16 changes: 16 additions & 0 deletions resource-timing/iframe-navigate.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing iframe navigate</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/nested-contexts.js"></script>
<script>
let t = async_test("Test that iframe navigates are not observable by the parent");
setup_navigate_test(t);
</script>
<iframe></iframe>
<script>
document.getElementsByTagName("iframe")[0].src = pre_navigate_url;
</script>
16 changes: 16 additions & 0 deletions resource-timing/iframe-refresh.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing iframe refresh</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/nested-contexts.js"></script>
<script>
let t = async_test("Test that iframe refreshes are not observable by the parent");
setup_refresh_test(t);
</script>
<iframe></iframe>
<script>
document.getElementsByTagName("iframe")[0].src = pre_refresh_url;
</script>
16 changes: 16 additions & 0 deletions resource-timing/object-navigate-back.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing object navigate - back button navigation</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
async_test(t => {
window.open("resources/object-navigate-back.html");
addEventListener("message", t.step_func_done(e => {
assert_equals(e.data, "PASS");
}));
}, "Test that object navigations are not observable by the parent, even after history navigations");
</script>

16 changes: 16 additions & 0 deletions resource-timing/object-navigate.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing object navigate</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/nested-contexts.js"></script>
<script>
let t = async_test("Test that object navigates are not observable by the parent");
setup_navigate_test(t);
</script>
<object></object>
<script>
document.getElementsByTagName("object")[0].data = pre_navigate_url;
</script>
16 changes: 16 additions & 0 deletions resource-timing/object-refresh.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing object refresh</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/nested-contexts.js"></script>
<script>
let t = async_test("Test that object refreshes are not observable by the parent");
setup_refresh_test(t);
</script>
<object></object>
<script>
document.getElementsByTagName("object")[0].data = pre_refresh_url;
</script>
12 changes: 12 additions & 0 deletions resource-timing/resources/document-navigated.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
navigated document!
<script>
top.postMessage("navigated", "*");
</script>
</body>
</html>
12 changes: 12 additions & 0 deletions resource-timing/resources/document-refreshed.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
Refreshed document!
<script>
top.postMessage("refreshed", "*");
</script>
</body>
</html>
11 changes: 11 additions & 0 deletions resource-timing/resources/document-that-navigates.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<script>
location.href="document-navigated.html";
</script>
</body>
</html>
8 changes: 8 additions & 0 deletions resource-timing/resources/document-that-refreshes.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="refresh" content="0;document-refreshed.html">
</head>
<body></body>
</html>
13 changes: 13 additions & 0 deletions resource-timing/resources/embed-navigate-back.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing embed navigate - back button navigation</title>
<script src="nested-contexts.js"></script>
<script>
setup_back_navigation("embed-navigate-back.html");
</script>
<embed type="text/html">
<script>
document.getElementsByTagName("embed")[0].src = pre_navigate_url;
</script>
13 changes: 13 additions & 0 deletions resource-timing/resources/iframe-navigate-back.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing iframe navigate - back button navigation</title>
<script src="nested-contexts.js"></script>
<script>
setup_back_navigation("iframe-navigate-back.html");
</script>
<iframe></iframe>
<script>
document.getElementsByTagName("iframe")[0].src = pre_navigate_url;
</script>
7 changes: 7 additions & 0 deletions resource-timing/resources/navigate_back.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script>
window.onload = function() {history.back();}
</script>
68 changes: 68 additions & 0 deletions resource-timing/resources/nested-contexts.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
const pre_navigate_url = new URL("/resource-timing/resources/document-that-navigates.html", location).href;
const post_navigate_url = new URL("/resource-timing/resources/document-navigated.html", location).href;
const pre_refresh_url = new URL("/resource-timing/resources/document-that-refreshes.html", location).href;
const post_refresh_url = new URL("/resource-timing/resources/document-refreshed.html", location).href;

function setup_navigate_or_refresh(t, 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;
}
assert_not_equals(entry.name, post, type + " document should not be observable");
}
assert_true(found_first_document, "Initial document should be observable");
t.done();
}
window.addEventListener("message", t.step_func(e=>{
if (e.data == type) {
verify_document_navigate_not_observable();
}
}));

}

function setup_navigate_test(t) {
setup_navigate_or_refresh(t, "navigated", pre_navigate_url, post_navigate_url);
}

function setup_refresh_test(t) {
setup_navigate_or_refresh(t, "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) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might have been good to document somewhere the tight coupling between this and the exact test-serialization behavior we get from using promise_test for everything, thus ensuring that we never touch sessionStorage from two different tests in a racy way.

delete sessionStorage.navigated;
verify_document_navigate_not_observable();
} else {
sessionStorage.navigated = true;
setTimeout(() => {
history.pushState({}, "", pushed_url);
location.href="navigate_back.html";
}, 0);
}
}
});
}
13 changes: 13 additions & 0 deletions resource-timing/resources/object-navigate-back.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Resource Timing object navigate - back button navigation</title>
<script src="nested-contexts.js"></script>
<script>
setup_back_navigation("object-navigate-back.html");
</script>
<object></object>
<script>
document.getElementsByTagName("object")[0].data = pre_navigate_url;
</script>