/** * Bug 1270338 - Add a mochitest to ensure Sanitizer clears data for all containers */ if (SpecialPowers.useRemoteSubframes) { requestLongerTimeout(4); } const CC = Components.Constructor; const TEST_DOMAIN = "https://example.net/"; async function setCookies(aBrowser) { await SpecialPowers.spawn(aBrowser, [], function () { content.document.cookie = "key=value"; }); } function cacheDataForContext(loadContextInfo) { return new Promise(resolve => { let cachedURIs = []; let cacheVisitor = { onCacheStorageInfo(num, consumption) {}, onCacheEntryInfo(uri, idEnhance) { cachedURIs.push(uri.asciiSpec); }, onCacheEntryVisitCompleted() { resolve(cachedURIs); }, QueryInterface: ChromeUtils.generateQI(["nsICacheStorageVisitor"]), }; // Visiting the disk cache also visits memory storage so we do not // need to use Services.cache2.memoryCacheStorage() here. let storage = Services.cache2.diskCacheStorage(loadContextInfo); storage.asyncVisitStorage(cacheVisitor, true); }); } async function checkCookiesSanitized(aBrowser) { await SpecialPowers.spawn(aBrowser, [], function () { Assert.equal( content.document.cookie, "", "Cookies of all origin attributes should be cleared." ); }); } function checkCacheExists(aShouldExist) { return async function () { let loadContextInfos = [ Services.loadContextInfo.default, Services.loadContextInfo.custom(false, { userContextId: 1 }), Services.loadContextInfo.custom(false, { userContextId: 2 }), Services.loadContextInfo.custom(false, { firstPartyDomain: "example.com", }), Services.loadContextInfo.custom(false, { firstPartyDomain: "example.org", }), ]; let i = 0; for (let loadContextInfo of loadContextInfos) { let cacheURIs = await cacheDataForContext(loadContextInfo); is( cacheURIs.includes(TEST_DOMAIN), aShouldExist, TEST_DOMAIN + " should " + (aShouldExist ? "not " : "") + "be cached for all origin attributes." + i++ ); } }; } add_setup(async function () { Services.cache2.clear(); }); // This will set the cookies and the cache. IsolationTestTools.runTests(TEST_DOMAIN, setCookies, () => true); add_task(checkCacheExists(true)); add_task(async function sanitize() { await Sanitizer.sanitize(["cookies", "cache"]); }); add_task(checkCacheExists(false)); IsolationTestTools.runTests(TEST_DOMAIN, checkCookiesSanitized, () => true);