/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; const TEST_ORIGIN1 = getRootDirectory(gTestPath).replace("chrome://mochitests/content", "http://example.com"); const TEST_ORIGIN2 = getRootDirectory(gTestPath).replace("chrome://mochitests/content", "http://example.org"); async function clickLink(browser) { info("Waiting for the page to load after clicking the link..."); let pageLoaded = BrowserTestUtils.waitForContentEvent(browser, "DOMContentLoaded"); await ContentTask.spawn(browser, null, async function() { let link = content.document.getElementById("link"); ok(link, "The link element was found."); link.click(); }); await pageLoaded; } async function checkCookiePresent(browser) { await ContentTask.spawn(browser, null, async function() { let cookieSpan = content.document.getElementById("cookieSpan"); ok(cookieSpan, "cookieSpan element should be in document"); is(cookieSpan.textContent, "foo=bar", "The SameSite cookie was sent correctly."); }); } async function checkCookie(sameSiteEnabled, browser) { if (sameSiteEnabled) { info("Check that the SameSite cookie was not sent."); await ContentTask.spawn(browser, null, async function() { let cookieSpan = content.document.getElementById("cookieSpan"); ok(cookieSpan, "cookieSpan element should be in document"); is(cookieSpan.textContent, "", "The SameSite cookie was blocked correctly."); }); } else { info("Check that the SameSite cookie was sent."); await checkCookiePresent(browser); } } async function runTest(sameSiteEnabled) { await SpecialPowers.pushPrefEnv({ set: [["network.cookie.same-site.enabled", sameSiteEnabled], ["reader.parse-on-load.enabled", true]], }); info("Set a SameSite=strict cookie."); await BrowserTestUtils.withNewTab(TEST_ORIGIN1 + "setSameSiteCookie.html", () => {}); info("Check that the cookie has been correctly set."); await BrowserTestUtils.withNewTab(TEST_ORIGIN1 + "getCookies.html", async function(browser) { await checkCookiePresent(browser); }); info("Open a cross-origin page with a link to the domain that set the cookie."); { let browser; let pageLoaded; let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, () => { let t = BrowserTestUtils.addTab(gBrowser, TEST_ORIGIN2 + "linkToGetCookies.html"); gBrowser.selectedTab = t; browser = gBrowser.selectedBrowser; pageLoaded = BrowserTestUtils.waitForContentEvent(browser, "DOMContentLoaded"); return t; }, false); info("Waiting for the page to load in normal mode..."); await pageLoaded; await clickLink(browser); await checkCookie(sameSiteEnabled, browser); await BrowserTestUtils.removeTab(tab); } info("Open the cross-origin page again."); await BrowserTestUtils.withNewTab(TEST_ORIGIN2 + "linkToGetCookies.html", async function(browser) { let pageShown = BrowserTestUtils.waitForContentEvent(browser, "AboutReaderContentReady"); let readerButton = document.getElementById("reader-mode-button"); ok(readerButton, "readerButton should be available"); readerButton.click(); info("Waiting for the page to be displayed in reader mode..."); await pageShown; await clickLink(browser); await checkCookie(sameSiteEnabled, browser); }); } add_task(async function() { await runTest(true); }); add_task(async function() { await runTest(false); });