/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; add_task(async function () { // Bug 1617611: Fix all the tests broken by "cookies SameSite=lax by default" await SpecialPowers.pushPrefEnv({ set: [["network.cookie.sameSite.laxByDefault", false]], }); const URL1 = buildURLWithContent( "example.com", `

example.com

` + `` ); const URL2 = buildURLWithContent( "example.net", `

example.net

` + `` + `` ); const URL_IFRAME = buildURLWithContent( "example.org", `

example.org

` + `` ); // open tab await openTabAndSetupStorage(URL1); const doc = gPanelWindow.document; // Check first domain // check that both host appear in the storage tree checkTree(doc, ["cookies", "https://example.com"]); // check the table for values await selectTreeItem(["cookies", "https://example.com"]); checkCookieData("lorem", "ipsum"); // NOTE: No need to clean up cookies since Services.cookies.removeAll() from // the registered clean up function will remove all of them. // Check second domain await navigateTo(URL2); // wait for storage tree refresh, and check host info("Waiting for storage tree to refresh and show correct host…"); await waitUntil( () => isInTree(doc, ["cookies", "https://example.net"]) && !isInTree(doc, ["cookies", "https://example.com"]) ); ok( !isInTree(doc, ["cookies", "https://example.com"]), "example.com item is not in the tree anymore" ); // check the table for values // NOTE: there's an issue with the TreeWidget in which `selectedItem` is set // but we have nothing selected in the UI. See Bug 1712706. // Here we are forcing selecting a different item first. await selectTreeItem(["cookies"]); await selectTreeItem(["cookies", "https://example.net"]); info("Waiting for table data to update and show correct values"); await waitUntil(() => hasCookieData("foo", "bar")); // reload the current page, and check again await reloadBrowser(); // wait for storage tree refresh, and check host info("Waiting for storage tree to refresh and show correct host…"); await waitUntil(() => isInTree(doc, ["cookies", "https://example.net"])); // check the table for values // NOTE: there's an issue with the TreeWidget in which `selectedItem` is set // but we have nothing selected in the UI. See Bug 1712706. // Here we are forcing selecting a different item first. await selectTreeItem(["cookies"]); await selectTreeItem(["cookies", "https://example.net"]); info("Waiting for table data to update and show correct values"); await waitUntil(() => hasCookieData("foo", "bar")); // make the iframe navigate to a different domain const onStorageTreeUpdated = gUI.once("store-objects-edit"); await SpecialPowers.spawn( gBrowser.selectedBrowser, [URL_IFRAME], async function (url) { const iframe = content.document.querySelector("iframe"); const onIframeLoaded = new Promise(loaded => iframe.addEventListener("load", loaded, { once: true }) ); iframe.src = url; await onIframeLoaded; } ); info("Waiting for storage tree to update"); await onStorageTreeUpdated; info("Waiting for storage tree to refresh and show correct host…"); await waitUntil(() => isInTree(doc, ["cookies", "https://example.org"])); info("Checking cookie data"); await selectTreeItem(["cookies", "https://example.org"]); checkCookieData("hello", "world"); info( "Navigate to the first URL to check that the multiple hosts in the current document are all removed" ); await navigateTo(URL1); ok(true, "navigated"); await waitUntil(() => isInTree(doc, ["cookies", "https://example.com"])); ok( !isInTree(doc, ["cookies", "https://example.net"]), "host of previous document (example.net) is not in the tree anymore" ); ok( !isInTree(doc, ["cookies", "https://example.org"]), "host of iframe in previous document (example.org) is not in the tree anymore" ); // indexedDB is slightly more asynchronously fetched than the others // and is emitted as a Resource to the frontend late. navigateTo isn't waiting for // the full initialization of the storage panel on reload. // To avoid exception when navigating back wait for indexed DB to be updated. await waitUntil(() => isInTree(doc, ["indexedDB", "https://example.com"])); info("Navigate backward to test bfcache navigation"); gBrowser.goBack(); await waitUntil( () => isInTree(doc, ["cookies", "https://example.net"]) && isInTree(doc, ["cookies", "https://example.org"]) ); ok( !isInTree(doc, ["cookies", "https://example.com"]), "host of previous document (example.com) is not in the tree anymore" ); info("Check that the Cookies node still has the expected label"); is( getTreeNodeLabel(doc, ["cookies"]), "Cookies", "Cookies item is properly displayed" ); SpecialPowers.clearUserPref("network.cookie.sameSite.laxByDefault"); });