371 lines
12 KiB
JavaScript
371 lines
12 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
https://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
let cps2 = Cc["@mozilla.org/content-pref/service;1"].getService(
|
|
Ci.nsIContentPrefService2
|
|
);
|
|
|
|
// Async wrappers around content pref service setter / getter. Would be nice if
|
|
// the service provided that itself.
|
|
|
|
async function setContentPref(domain, name, value, isPBM) {
|
|
return new Promise((resolve, reject) => {
|
|
let loadContext = isPBM
|
|
? Cu.createPrivateLoadContext()
|
|
: Cu.createLoadContext();
|
|
cps2.set(domain, name, value, loadContext, {
|
|
handleCompletion: aReason => {
|
|
if (aReason === cps2.COMPLETE_ERROR) {
|
|
reject(new Error("Failed to set content pref"));
|
|
} else {
|
|
resolve();
|
|
}
|
|
},
|
|
});
|
|
});
|
|
}
|
|
|
|
async function getContentPref(domain, name, isPBM) {
|
|
return new Promise((resolve, reject) => {
|
|
let loadContext = isPBM
|
|
? Cu.createPrivateLoadContext()
|
|
: Cu.createLoadContext();
|
|
let result;
|
|
cps2.getByDomainAndName(domain, name, loadContext, {
|
|
handleResult({ value }) {
|
|
result = value;
|
|
},
|
|
handleCompletion(aReason) {
|
|
if (aReason === cps2.COMPLETE_ERROR) {
|
|
reject(new Error("Failed to get content pref"));
|
|
} else {
|
|
resolve(result);
|
|
}
|
|
},
|
|
});
|
|
});
|
|
}
|
|
|
|
add_task(async function test_deleteByHost() {
|
|
info("Set content prefs");
|
|
await setContentPref("example.com", "foo", "foo", false);
|
|
await setContentPref("example.org", "bar", "bar", false);
|
|
await setContentPref("example.org", "bar", "bar", true);
|
|
await setContentPref("foo.example.org", "bar", "bar", false);
|
|
await setContentPref("foo.example.org", "bar", "bar", true);
|
|
await setContentPref("bar.foo.example.org", "subsub", "subsub", false);
|
|
|
|
info("Verify content prefs have been set");
|
|
Assert.equal(await getContentPref("example.com", "foo", false), "foo");
|
|
Assert.equal(await getContentPref("example.org", "bar", false), "bar");
|
|
Assert.equal(await getContentPref("example.org", "bar", true), "bar");
|
|
Assert.equal(await getContentPref("foo.example.org", "bar", false), "bar");
|
|
Assert.equal(await getContentPref("foo.example.org", "bar", true), "bar");
|
|
Assert.equal(
|
|
await getContentPref("bar.foo.example.org", "subsub", false),
|
|
"subsub"
|
|
);
|
|
|
|
await new Promise(aResolve => {
|
|
Services.clearData.deleteDataFromHost(
|
|
"foo.example.org",
|
|
true,
|
|
Ci.nsIClearDataService.CLEAR_CONTENT_PREFERENCES,
|
|
value => {
|
|
Assert.equal(value, 0);
|
|
aResolve();
|
|
}
|
|
);
|
|
});
|
|
|
|
info(
|
|
"Verify content prefs matching host 'foo.example.org' have been cleared"
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("example.com", "foo", false),
|
|
"foo",
|
|
"Unrelated domain entry should still exist."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("example.org", "bar", false),
|
|
"bar",
|
|
"Base domain entry should still exist."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("example.org", "bar", true),
|
|
"bar",
|
|
"Base domain PBM entry should still exist."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("foo.example.org", "bar", false),
|
|
undefined,
|
|
"Exact domain match should have been cleared in normal browsing."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("foo.example.org", "bar", true),
|
|
"bar",
|
|
"Exact domain match should not have been cleared in private browsing."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("bar.foo.example.org", "subsub", false),
|
|
undefined,
|
|
"Subdomain should have been cleared"
|
|
);
|
|
|
|
await SiteDataTestUtils.clear();
|
|
});
|
|
|
|
add_task(async function test_deleteByPrincipal() {
|
|
info("Set content prefs");
|
|
await setContentPref("example.com", "foo", "foo", false);
|
|
await setContentPref("example.org", "bar", "bar", false);
|
|
await setContentPref("example.org", "bar", "bar", true);
|
|
await setContentPref("foo.example.org", "bar", "bar", false);
|
|
await setContentPref("foo.example.org", "bar", "bar", true);
|
|
await setContentPref("bar.foo.example.org", "subsub", "subsub", false);
|
|
|
|
info("Verify content prefs have been set");
|
|
Assert.equal(await getContentPref("example.com", "foo", false), "foo");
|
|
Assert.equal(await getContentPref("example.org", "bar", false), "bar");
|
|
Assert.equal(await getContentPref("example.org", "bar", true), "bar");
|
|
Assert.equal(await getContentPref("foo.example.org", "bar", false), "bar");
|
|
Assert.equal(await getContentPref("foo.example.org", "bar", true), "bar");
|
|
Assert.equal(
|
|
await getContentPref("bar.foo.example.org", "subsub", false),
|
|
"subsub"
|
|
);
|
|
|
|
await new Promise(aResolve => {
|
|
Services.clearData.deleteDataFromPrincipal(
|
|
Services.scriptSecurityManager.createContentPrincipalFromOrigin(
|
|
"https://foo.example.org"
|
|
),
|
|
true,
|
|
Ci.nsIClearDataService.CLEAR_CONTENT_PREFERENCES,
|
|
value => {
|
|
Assert.equal(value, 0);
|
|
aResolve();
|
|
}
|
|
);
|
|
});
|
|
|
|
info(
|
|
"Verify content prefs matching principal 'https://foo.example.org' have been cleared"
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("example.com", "foo", false),
|
|
"foo",
|
|
"Unrelated domain entry should still exist."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("example.org", "bar", false),
|
|
"bar",
|
|
"Base domain entry should still exist."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("example.org", "bar", true),
|
|
"bar",
|
|
"Base domain PBM entry should still exist."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("foo.example.org", "bar", false),
|
|
undefined,
|
|
"Exact domain match should have been cleared in normal browsing."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("foo.example.org", "bar", true),
|
|
"bar",
|
|
"Exact domain match should NOT have been cleared in private browsing."
|
|
);
|
|
// TODO: PreferencesCleaner does not clear by exact principal but includes
|
|
// subdomains of the given principal.
|
|
Assert.equal(
|
|
await getContentPref("bar.foo.example.org", "subsub", false),
|
|
undefined,
|
|
"TODO: Subdomain entry should still exist."
|
|
);
|
|
|
|
await SiteDataTestUtils.clear();
|
|
});
|
|
|
|
add_task(async function test_deleteBySite() {
|
|
info("Set content prefs");
|
|
await setContentPref("example.com", "foo", "foo", false);
|
|
await setContentPref("example.org", "bar", "bar", false);
|
|
await setContentPref("example.org", "bar", "bar", true);
|
|
await setContentPref("foo.example.org", "bar", "bar", false);
|
|
|
|
info("Verify content prefs have been set");
|
|
Assert.equal(await getContentPref("example.com", "foo", false), "foo");
|
|
Assert.equal(await getContentPref("example.org", "bar", false), "bar");
|
|
Assert.equal(await getContentPref("example.org", "bar", true), "bar");
|
|
Assert.equal(await getContentPref("foo.example.org", "bar", false), "bar");
|
|
|
|
await new Promise(aResolve => {
|
|
Services.clearData.deleteDataFromSite(
|
|
"example.org",
|
|
{},
|
|
true,
|
|
Ci.nsIClearDataService.CLEAR_CONTENT_PREFERENCES,
|
|
value => {
|
|
Assert.equal(value, 0);
|
|
aResolve();
|
|
}
|
|
);
|
|
});
|
|
|
|
info(
|
|
"Verify content prefs for 'example.org' have been cleared, including PBM."
|
|
);
|
|
Assert.equal(await getContentPref("example.com", "foo", false), "foo");
|
|
Assert.equal(await getContentPref("example.org", "bar", false), undefined);
|
|
Assert.equal(await getContentPref("example.org", "bar", true), undefined);
|
|
Assert.equal(
|
|
await getContentPref("foo.example.org", "bar", false),
|
|
undefined
|
|
);
|
|
|
|
await SiteDataTestUtils.clear();
|
|
});
|
|
|
|
add_task(async function test_deleteBySite_pattern() {
|
|
info("Set content prefs");
|
|
await setContentPref("example.com", "foo", "foo", false);
|
|
await setContentPref("example.org", "bar", "bar", false);
|
|
await setContentPref("example.org", "barPBM", "barPBM", true);
|
|
await setContentPref("foo.example.org", "bar", "bar", false);
|
|
await setContentPref("foo.example.org", "subPBM", "subPBM", true);
|
|
|
|
info("Verify content prefs have been set");
|
|
Assert.equal(await getContentPref("example.com", "foo", false), "foo");
|
|
Assert.equal(await getContentPref("example.org", "bar", false), "bar");
|
|
Assert.equal(await getContentPref("example.org", "barPBM", true), "barPBM");
|
|
Assert.equal(await getContentPref("foo.example.org", "bar", false), "bar");
|
|
Assert.equal(
|
|
await getContentPref("foo.example.org", "subPBM", true),
|
|
"subPBM"
|
|
);
|
|
|
|
await new Promise(aResolve => {
|
|
Services.clearData.deleteDataFromSite(
|
|
"example.org",
|
|
{ privateBrowsingId: 1 },
|
|
true,
|
|
Ci.nsIClearDataService.CLEAR_CONTENT_PREFERENCES,
|
|
value => {
|
|
Assert.equal(value, 0);
|
|
aResolve();
|
|
}
|
|
);
|
|
});
|
|
|
|
info(
|
|
"Verify content prefs for 'example.org' have been cleared, but only for PBM."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("example.com", "foo", false),
|
|
"foo",
|
|
"Unrelated domain should have not been cleared."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("example.org", "bar", false),
|
|
"bar",
|
|
"Base domain entry should NOT have been cleared for normal browsing."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("example.org", "barPBM", true),
|
|
undefined,
|
|
"Base domain entry should have been cleared for private browsing."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("foo.example.org", "bar", false),
|
|
"bar",
|
|
"Subdomain entry should not have been cleared for normal browsing."
|
|
);
|
|
Assert.equal(
|
|
await getContentPref("foo.example.org", "subPBM", true),
|
|
undefined,
|
|
"Subdomain entry should have been cleared for private browsing."
|
|
);
|
|
|
|
await SiteDataTestUtils.clear();
|
|
});
|
|
|
|
// TODO: implement a proper range clearing test. We're currently lacking the
|
|
// capability to set content prefs with a specific creation timestamp. This
|
|
// tests only clearing everything if the entire time range is passed.
|
|
add_task(async function test_deleteByRange() {
|
|
info("Set content prefs");
|
|
await setContentPref("example.com", "foo", "foo", false);
|
|
await setContentPref("example.org", "bar", "bar", false);
|
|
await setContentPref("example.org", "bar", "bar", true);
|
|
await setContentPref("foo.example.org", "bar", "bar", false);
|
|
|
|
info("Verify content prefs have been set");
|
|
Assert.equal(await getContentPref("example.com", "foo", false), "foo");
|
|
Assert.equal(await getContentPref("example.org", "bar", false), "bar");
|
|
Assert.equal(await getContentPref("example.org", "bar", true), "bar");
|
|
Assert.equal(await getContentPref("foo.example.org", "bar", false), "bar");
|
|
|
|
info("Delete entire time range.");
|
|
await new Promise(aResolve => {
|
|
Services.clearData.deleteDataInTimeRange(
|
|
0,
|
|
Date.now() * 1000,
|
|
true,
|
|
Ci.nsIClearDataService.CLEAR_CONTENT_PREFERENCES,
|
|
value => {
|
|
Assert.equal(value, 0);
|
|
aResolve();
|
|
}
|
|
);
|
|
});
|
|
|
|
info("Verify all content prefs have been cleared");
|
|
Assert.equal(await getContentPref("example.com", "foo", false), undefined);
|
|
Assert.equal(await getContentPref("example.org", "bar", false), undefined);
|
|
Assert.equal(await getContentPref("example.org", "bar", true), undefined);
|
|
Assert.equal(
|
|
await getContentPref("foo.example.org", "bar", false),
|
|
undefined
|
|
);
|
|
|
|
await SiteDataTestUtils.clear();
|
|
});
|
|
|
|
add_task(async function test_deleteAll() {
|
|
info("Set content prefs");
|
|
await setContentPref("example.com", "foo", "foo", false);
|
|
await setContentPref("example.org", "bar", "bar", false);
|
|
await setContentPref("example.org", "bar", "bar", true);
|
|
await setContentPref("foo.example.org", "bar", "bar", false);
|
|
|
|
info("Verify content prefs have been set");
|
|
Assert.equal(await getContentPref("example.com", "foo", false), "foo");
|
|
Assert.equal(await getContentPref("example.org", "bar", false), "bar");
|
|
Assert.equal(await getContentPref("example.org", "bar", true), "bar");
|
|
Assert.equal(await getContentPref("foo.example.org", "bar", false), "bar");
|
|
|
|
await new Promise(aResolve => {
|
|
Services.clearData.deleteData(
|
|
Ci.nsIClearDataService.CLEAR_CONTENT_PREFERENCES,
|
|
value => {
|
|
Assert.equal(value, 0);
|
|
aResolve();
|
|
}
|
|
);
|
|
});
|
|
|
|
info("Verify all content prefs have been cleared");
|
|
Assert.equal(await getContentPref("example.com", "foo", false), undefined);
|
|
Assert.equal(await getContentPref("example.org", "bar", false), undefined);
|
|
Assert.equal(await getContentPref("example.org", "bar", true), undefined);
|
|
Assert.equal(
|
|
await getContentPref("foo.example.org", "bar", false),
|
|
undefined
|
|
);
|
|
|
|
await SiteDataTestUtils.clear();
|
|
});
|