blob: 379d5646b89e02924dbba524e7d2c31f0f47ac1d [file] [log] [blame]
<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/cookies/resources/testharness-helpers.js"></script>
<script>
// Set cookies on ORIGINAL_HOST, then move ourselves to TEST_ROOT so
// we can verify registrable domain and cross-origin behavior.
// Note: We are using https here because SameSite=None cookies must be Secure.
if (window.location.hostname == "127.0.0.1") {
window.location.hostname = ORIGINAL_HOST;
} else if (window.location.hostname == ORIGINAL_HOST) {
clearKnownCookies();
document.cookie = STRICT_DOM + "=1; SameSite=Strict; Max-Age=100; path=/";
document.cookie = LAX_DOM + "=1; SameSite=Lax; Max-Age=100; path=/";
document.cookie = UNSPECIFIED_DOM + "=1; Max-Age=100; path=/";
// SameSite=None cookies must be Secure.
document.cookie = NONE_DOM + "=1; SameSite=None; Secure; Max-Age=100; path=/";
window.location.hostname = TEST_HOST;
} else {
test(_ => {
clearKnownCookies();
assert_equals(document.cookie, "");
document.cookie = STRICT_DOM + "=2; SameSite=Strict; domain=" + TEST_HOST + "; path=/";
document.cookie = LAX_DOM + "=2; SameSite=Lax; domain=" + TEST_HOST + "; path=/";
document.cookie = UNSPECIFIED_DOM + "=2; domain=" + TEST_HOST + "; path=/";
document.cookie = NONE_DOM + "=2; SameSite=None; Secure; domain=" + TEST_HOST + "; path=/";
assert_equals(document.cookie, STRICT_DOM + "=2; " + LAX_DOM + "=2; " + UNSPECIFIED_DOM + "=2; " + NONE_DOM + "=2");
}, "Cookies can be set from DOM.");
promise_test(_ => {
return fetch("/cookies/resources/echo-json.php", {"credentials": "include"})
.then(r => r.json())
.then(j => {
assert_equals(j[STRICT_DOM], "2", "strict");
assert_equals(j[LAX_DOM], "2", "lax");
assert_equals(j[UNSPECIFIED_DOM], "2", "unspecified");
assert_equals(j[NONE_DOM], "2", "none");
});
}, "SameSite set from DOM are sent via HTTPS.");
promise_test(_ => {
return fetch("https://subdomain." + TEST_HOST + ":8443/cookies/resources/echo-json.php", {"credentials": "include"})
.then(r => r.json())
.then(j => {
assert_equals(j[STRICT_DOM], "2", "strict");
assert_equals(j[LAX_DOM], "2", "lax");
assert_equals(j[UNSPECIFIED_DOM], "2", "unspecified");
assert_equals(j[NONE_DOM], "2", "none");
});
}, "Subdomains are same-site.");
promise_test(_ => {
return fetch("https://" + TEST_ROOT + ":8443/cookies/resources/echo-json.php", {"credentials": "include"})
.then(r => r.json())
.then(j => {
assert_equals(j[STRICT_DOM], undefined, "strict");
assert_equals(j[LAX_DOM], undefined, "lax");
assert_equals(j[UNSPECIFIED_DOM], undefined, "unspecified");
assert_equals(j[NONE_DOM], undefined, "none");
});
}, "`" + TEST_ROOT + "` is same-site but the cookies don't match it: 'samesite' doesn't override matching rules.");
promise_test(_ => {
return fetch("https://" + ORIGINAL_HOST + ":8443/cookies/resources/echo-json.php", {"credentials": "include"})
.then(r => r.json())
.then(j => {
assert_equals(j[STRICT_DOM], undefined, "strict");
assert_equals(j[LAX_DOM], undefined, "lax");
assert_equals(j[UNSPECIFIED_DOM], undefined, "unspecified");
assert_equals(j[NONE_DOM], "1", "none");
});
}, "'" + ORIGINAL_HOST + "' is not same-site with '" + TEST_HOST + "', so samesite cookies are not sent.");
}
</script>