blob: ab03083b3ece0cd018b46b80d24fbff62239368d [file] [log] [blame]
<?php
header("Cache-Control: no-store");
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="/js-test-resources/js-test.js"></script>
<script src="resources/util.js"></script>
</head>
<body onload="runTest()">
<script>
description("Tests that the session is switched upon top frame navigation to a prevalent resource with user interaction.");
jsTestIsAsync = true;
const prevalentOrigin = "http://127.0.0.1:8000";
const nonPrevalentOrigin = "http://localhost:8000";
const sessionCookieName = "sessionCookie";
const persistentCookieName = "persistentCookie";
const twoMinutesInSeconds = 120;
function setSessionCookie() {
document.cookie = sessionCookieName + "=1; path=/";
}
function setPersistentCookie() {
document.cookie = persistentCookieName + "=1; path=/; Max-Age=" + twoMinutesInSeconds + ";";
}
function checkCookies(shouldHaveSessionCookie, shouldHavePersistentCookie) {
let hasSessionCookie = (document.cookie + "").includes(sessionCookieName),
hasPersistentCookie = (document.cookie + "").includes(persistentCookieName);
if (shouldHaveSessionCookie && hasSessionCookie)
testPassed("Should have and has the session cookie.");
else if (shouldHaveSessionCookie && !hasSessionCookie) {
testFailed("Should have but doesn't have the session cookie.");
setEnableFeature(false, finishJSTest);
} else if (!shouldHaveSessionCookie && hasSessionCookie) {
testFailed("Shouldn't have but has the session cookie.");
setEnableFeature(false, finishJSTest);
} else
testPassed("Shouldn't have and doesn't have the session cookie.");
if (shouldHavePersistentCookie && hasPersistentCookie)
testPassed("Should have and has the persistent cookie.");
else if (shouldHavePersistentCookie && !hasPersistentCookie) {
testFailed("Should have but doesn't have the persistent cookie.");
setEnableFeature(false, finishJSTest);
} else if (!shouldHavePersistentCookie && hasPersistentCookie) {
testFailed("Shouldn't have but has the persistent cookie.");
setEnableFeature(false, finishJSTest);
} else
testPassed("Shouldn't have and doesn't have the persistent cookie.");
}
function runTest() {
switch (document.location.hash) {
case "#step1":
testRunner.setStatisticsHasHadUserInteraction(prevalentOrigin, true, function() {
setSessionCookie();
setPersistentCookie();
checkCookies(true, true);
if (testRunner.hasStatisticsIsolatedSession(prevalentOrigin)) {
testFailed("Origin has isolated session.");
setEnableFeature(false, finishJSTest);
} else
testPassed("Origin has no isolated session.");
document.location.href = nonPrevalentOrigin + "/resourceLoadStatistics/switch-session-on-navigation-to-prevalent-with-interaction.php#step2";
});
break;
case "#step2":
document.location.hash = "step3";
if (document.location.origin !== nonPrevalentOrigin)
testFailed("Step 2 is not on " + nonPrevalentOrigin + ".");
testRunner.setStatisticsPrevalentResource(prevalentOrigin, true, function() {
if (!testRunner.isStatisticsPrevalentResource(prevalentOrigin)) {
testFailed(prevalentOrigin + " did not get set as prevalent resource.");
setEnableFeature(false, finishJSTest);
}
testRunner.statisticsUpdateCookieBlocking(runTest);
});
break;
case "#step3":
document.location.href = prevalentOrigin + "/resourceLoadStatistics/switch-session-on-navigation-to-prevalent-with-interaction.php#step4";
break;
case "#step4":
checkCookies(true, true);
if (testRunner.hasStatisticsIsolatedSession(prevalentOrigin))
testPassed("Origin has isolated session.");
else
testFailed("Origin has no isolated session.");
setEnableFeature(false, finishJSTest);
break;
default:
testFailed("Unknown hash.");
setEnableFeature(false, finishJSTest);
}
}
if (document.location.hash === "") {
if (document.location.origin !== prevalentOrigin)
testFailed("Test is not starting out on " + prevalentOrigin + ".");
setEnableFeature(true, function () {
if (testRunner.isStatisticsPrevalentResource(prevalentOrigin))
testFailed(prevalentOrigin + " was classified as prevalent resource before the test starts.");
document.location.hash = "step1";
});
}
</script>
</body>
</html>