diff options
Diffstat (limited to 'toolkit/components/reader/test/browser_bug1453818_samesite_cookie.js')
-rw-r--r-- | toolkit/components/reader/test/browser_bug1453818_samesite_cookie.js | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/toolkit/components/reader/test/browser_bug1453818_samesite_cookie.js b/toolkit/components/reader/test/browser_bug1453818_samesite_cookie.js new file mode 100644 index 0000000000..f757a18edd --- /dev/null +++ b/toolkit/components/reader/test/browser_bug1453818_samesite_cookie.js @@ -0,0 +1,132 @@ +/* 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 SpecialPowers.spawn(browser, [], async function() { + let link = content.document.getElementById("link"); + ok(link, "The link element was found."); + link.click(); + }); + await pageLoaded; +} + +async function checkCookiePresent(browser) { + await SpecialPowers.spawn(browser, [], 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(browser) { + info("Check that the SameSite cookie was not sent."); + await SpecialPowers.spawn(browser, [], 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." + ); + }); +} + +async function runTest() { + await SpecialPowers.pushPrefEnv({ + set: [["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.sjs", + 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(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(browser); + } + ); +} + +add_task(async function() { + await runTest(true); +}); + +add_task(async function() { + await runTest(false); +}); |