summaryrefslogtreecommitdiffstats
path: root/dom/reporting/tests/browser_cleanup.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/reporting/tests/browser_cleanup.js')
-rw-r--r--dom/reporting/tests/browser_cleanup.js276
1 files changed, 276 insertions, 0 deletions
diff --git a/dom/reporting/tests/browser_cleanup.js b/dom/reporting/tests/browser_cleanup.js
new file mode 100644
index 0000000000..e50b8db1da
--- /dev/null
+++ b/dom/reporting/tests/browser_cleanup.js
@@ -0,0 +1,276 @@
+/* eslint-disable mozilla/no-arbitrary-setTimeout */
+
+const TEST_HOST = "example.org";
+const TEST_DOMAIN = "https://" + TEST_HOST;
+const TEST_PATH = "/browser/dom/reporting/tests/";
+const TEST_TOP_PAGE = TEST_DOMAIN + TEST_PATH + "empty.html";
+const TEST_SJS = TEST_DOMAIN + TEST_PATH + "delivering.sjs";
+
+async function storeReportingHeader(browser, extraParams = "") {
+ await SpecialPowers.spawn(
+ browser,
+ [{ url: TEST_SJS, extraParams }],
+ async obj => {
+ await content
+ .fetch(
+ obj.url +
+ "?task=header" +
+ (obj.extraParams.length ? "&" + obj.extraParams : "")
+ )
+ .then(r => r.text())
+ .then(text => {
+ is(text, "OK", "Report-to header sent");
+ });
+ }
+ );
+}
+
+add_task(async function () {
+ await SpecialPowers.flushPrefEnv();
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["dom.reporting.enabled", true],
+ ["dom.reporting.header.enabled", true],
+ ["dom.reporting.testing.enabled", true],
+ ["dom.reporting.delivering.timeout", 1],
+ ["dom.reporting.cleanup.timeout", 1],
+ ["privacy.userContext.enabled", true],
+ ],
+ });
+});
+
+add_task(async function () {
+ info("Testing a total cleanup");
+
+ let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE);
+ gBrowser.selectedTab = tab;
+
+ let browser = gBrowser.getBrowserForTab(tab);
+ await BrowserTestUtils.browserLoaded(browser);
+
+ ok(
+ !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
+ "No data before the test"
+ );
+
+ await storeReportingHeader(browser);
+ ok(ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "We have data");
+
+ await new Promise(resolve => {
+ Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, value =>
+ resolve()
+ );
+ });
+
+ ok(
+ !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
+ "No data before a full cleanup"
+ );
+
+ info("Removing the tab");
+ BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function () {
+ info("Testing a total QuotaManager cleanup");
+
+ let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE);
+ gBrowser.selectedTab = tab;
+
+ let browser = gBrowser.getBrowserForTab(tab);
+ await BrowserTestUtils.browserLoaded(browser);
+
+ ok(
+ !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
+ "No data before the test"
+ );
+
+ await storeReportingHeader(browser);
+ ok(ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "We have data");
+
+ await new Promise(resolve => {
+ Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_REPORTS, value =>
+ resolve()
+ );
+ });
+
+ ok(
+ !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
+ "No data before a reports cleanup"
+ );
+
+ info("Removing the tab");
+ BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function () {
+ info("Testing a QuotaManager host cleanup");
+
+ let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE);
+ gBrowser.selectedTab = tab;
+
+ let browser = gBrowser.getBrowserForTab(tab);
+ await BrowserTestUtils.browserLoaded(browser);
+
+ ok(
+ !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
+ "No data before the test"
+ );
+
+ await storeReportingHeader(browser);
+ ok(ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "We have data");
+
+ await new Promise(resolve => {
+ Services.clearData.deleteDataFromHost(
+ TEST_HOST,
+ true,
+ Ci.nsIClearDataService.CLEAR_REPORTS,
+ value => resolve()
+ );
+ });
+
+ ok(
+ !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
+ "No data before a reports cleanup"
+ );
+
+ info("Removing the tab");
+ BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function () {
+ info("Testing a 410 endpoint status");
+
+ let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE);
+ gBrowser.selectedTab = tab;
+
+ let browser = gBrowser.getBrowserForTab(tab);
+ await BrowserTestUtils.browserLoaded(browser);
+
+ ok(
+ !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
+ "No data before the test"
+ );
+
+ await storeReportingHeader(browser, "410=true");
+ ok(ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "We have data");
+
+ await SpecialPowers.spawn(browser, [], async _ => {
+ let testingInterface = new content.TestingDeprecatedInterface();
+ ok(!!testingInterface, "Created a deprecated interface");
+ });
+
+ await new Promise((resolve, reject) => {
+ let count = 0;
+ let id = setInterval(_ => {
+ ++count;
+ if (count > 10) {
+ ok(false, "Something went wrong.");
+ clearInterval(id);
+ reject();
+ }
+
+ if (!ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN)) {
+ ok(true, "No data after a 410!");
+ clearInterval(id);
+ resolve();
+ }
+ }, 1000);
+ });
+
+ info("Removing the tab");
+ BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function () {
+ info("Creating a new container");
+
+ let identity = ContextualIdentityService.create(
+ "Report-To-Test",
+ "fingerprint",
+ "orange"
+ );
+
+ info("Creating a new container tab");
+ let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE, {
+ userContextId: identity.userContextId,
+ });
+ is(
+ tab.getAttribute("usercontextid"),
+ "" + identity.userContextId,
+ "New tab has the right UCI"
+ );
+ gBrowser.selectedTab = tab;
+
+ let browser = gBrowser.getBrowserForTab(tab);
+ await BrowserTestUtils.browserLoaded(browser);
+
+ ok(
+ !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
+ "No data before the test"
+ );
+
+ await storeReportingHeader(browser);
+ ok(
+ !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
+ "We don't have data for the origin"
+ );
+ ok(
+ ChromeUtils.hasReportingHeaderForOrigin(
+ TEST_DOMAIN + "^userContextId=" + identity.userContextId
+ ),
+ "We have data for the origin + userContextId"
+ );
+
+ info("Removing the tab");
+ BrowserTestUtils.removeTab(tab);
+
+ ContextualIdentityService.remove(identity.userContextId);
+
+ ok(
+ !ChromeUtils.hasReportingHeaderForOrigin(
+ TEST_DOMAIN + "^userContextId=" + identity.userContextId
+ ),
+ "No more data after a container removal"
+ );
+});
+
+add_task(async function () {
+ info("TTL cleanup");
+
+ let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE);
+ gBrowser.selectedTab = tab;
+
+ let browser = gBrowser.getBrowserForTab(tab);
+ await BrowserTestUtils.browserLoaded(browser);
+
+ ok(
+ !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
+ "No data before the test"
+ );
+
+ await storeReportingHeader(browser);
+ ok(
+ ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
+ "We have data for the origin"
+ );
+
+ // Let's wait a bit.
+ await new Promise(resolve => {
+ setTimeout(resolve, 5000);
+ });
+
+ ok(!ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "No data anymore");
+
+ info("Removing the tab");
+ BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function () {
+ info("Cleaning up.");
+ await new Promise(resolve => {
+ Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, value =>
+ resolve()
+ );
+ });
+});