summaryrefslogtreecommitdiffstats
path: root/browser/components/originattributes/test/browser/browser_sanitize.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/originattributes/test/browser/browser_sanitize.js')
-rw-r--r--browser/components/originattributes/test/browser/browser_sanitize.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/browser/components/originattributes/test/browser/browser_sanitize.js b/browser/components/originattributes/test/browser/browser_sanitize.js
new file mode 100644
index 0000000000..61d236f249
--- /dev/null
+++ b/browser/components/originattributes/test/browser/browser_sanitize.js
@@ -0,0 +1,92 @@
+/**
+ * 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);