tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

browser_cleanup.js (6991B)


      1 /* eslint-disable mozilla/no-arbitrary-setTimeout */
      2 
      3 const TEST_HOST = "example.org";
      4 const TEST_DOMAIN = "https://" + TEST_HOST;
      5 const TEST_PATH = "/browser/dom/reporting/tests/";
      6 const TEST_TOP_PAGE = TEST_DOMAIN + TEST_PATH + "empty.html";
      7 const TEST_SJS = TEST_DOMAIN + TEST_PATH + "delivering.sjs";
      8 
      9 async function storeReportingHeader(browser, extraParams = "") {
     10  await SpecialPowers.spawn(
     11    browser,
     12    [{ url: TEST_SJS, extraParams }],
     13    async obj => {
     14      await content
     15        .fetch(
     16          obj.url +
     17            "?task=header" +
     18            (obj.extraParams.length ? "&" + obj.extraParams : "")
     19        )
     20        .then(r => r.text())
     21        .then(text => {
     22          is(text, "OK", "Report-to header sent");
     23        });
     24    }
     25  );
     26 }
     27 
     28 add_task(async function () {
     29  await SpecialPowers.flushPrefEnv();
     30  await SpecialPowers.pushPrefEnv({
     31    set: [
     32      ["dom.reporting.enabled", true],
     33      ["dom.reporting.header.enabled", true],
     34      ["dom.reporting.testing.enabled", true],
     35      ["dom.reporting.delivering.timeout", 1],
     36      ["dom.reporting.cleanup.timeout", 1],
     37      ["privacy.userContext.enabled", true],
     38    ],
     39  });
     40 });
     41 
     42 add_task(async function () {
     43  info("Testing a total cleanup");
     44 
     45  let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE);
     46  gBrowser.selectedTab = tab;
     47 
     48  let browser = gBrowser.getBrowserForTab(tab);
     49  await BrowserTestUtils.browserLoaded(browser);
     50 
     51  ok(
     52    !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
     53    "No data before the test"
     54  );
     55 
     56  await storeReportingHeader(browser);
     57  ok(ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "We have data");
     58 
     59  await new Promise(resolve => {
     60    Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, () =>
     61      resolve()
     62    );
     63  });
     64 
     65  ok(
     66    !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
     67    "No data before a full cleanup"
     68  );
     69 
     70  info("Removing the tab");
     71  BrowserTestUtils.removeTab(tab);
     72 });
     73 
     74 add_task(async function () {
     75  info("Testing a total QuotaManager cleanup");
     76 
     77  let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE);
     78  gBrowser.selectedTab = tab;
     79 
     80  let browser = gBrowser.getBrowserForTab(tab);
     81  await BrowserTestUtils.browserLoaded(browser);
     82 
     83  ok(
     84    !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
     85    "No data before the test"
     86  );
     87 
     88  await storeReportingHeader(browser);
     89  ok(ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "We have data");
     90 
     91  await new Promise(resolve => {
     92    Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_REPORTS, () =>
     93      resolve()
     94    );
     95  });
     96 
     97  ok(
     98    !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
     99    "No data before a reports cleanup"
    100  );
    101 
    102  info("Removing the tab");
    103  BrowserTestUtils.removeTab(tab);
    104 });
    105 
    106 add_task(async function () {
    107  info("Testing a QuotaManager host cleanup");
    108 
    109  let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE);
    110  gBrowser.selectedTab = tab;
    111 
    112  let browser = gBrowser.getBrowserForTab(tab);
    113  await BrowserTestUtils.browserLoaded(browser);
    114 
    115  ok(
    116    !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
    117    "No data before the test"
    118  );
    119 
    120  await storeReportingHeader(browser);
    121  ok(ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "We have data");
    122 
    123  await new Promise(resolve => {
    124    Services.clearData.deleteDataFromHost(
    125      TEST_HOST,
    126      true,
    127      Ci.nsIClearDataService.CLEAR_REPORTS,
    128      () => resolve()
    129    );
    130  });
    131 
    132  ok(
    133    !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
    134    "No data before a reports cleanup"
    135  );
    136 
    137  info("Removing the tab");
    138  BrowserTestUtils.removeTab(tab);
    139 });
    140 
    141 add_task(async function () {
    142  info("Testing a 410 endpoint status");
    143 
    144  let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE);
    145  gBrowser.selectedTab = tab;
    146 
    147  let browser = gBrowser.getBrowserForTab(tab);
    148  await BrowserTestUtils.browserLoaded(browser);
    149 
    150  ok(
    151    !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
    152    "No data before the test"
    153  );
    154 
    155  await storeReportingHeader(browser, "410=true");
    156  ok(ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "We have data");
    157 
    158  await SpecialPowers.spawn(browser, [], async _ => {
    159    let testingInterface = new content.TestingDeprecatedInterface();
    160    ok(!!testingInterface, "Created a deprecated interface");
    161  });
    162 
    163  await new Promise((resolve, reject) => {
    164    let count = 0;
    165    let id = setInterval(_ => {
    166      ++count;
    167      if (count > 10) {
    168        ok(false, "Something went wrong.");
    169        clearInterval(id);
    170        reject();
    171      }
    172 
    173      if (!ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN)) {
    174        ok(true, "No data after a 410!");
    175        clearInterval(id);
    176        resolve();
    177      }
    178    }, 1000);
    179  });
    180 
    181  info("Removing the tab");
    182  BrowserTestUtils.removeTab(tab);
    183 });
    184 
    185 add_task(async function () {
    186  info("Creating a new container");
    187 
    188  let identity = ContextualIdentityService.create(
    189    "Report-To-Test",
    190    "fingerprint",
    191    "orange"
    192  );
    193 
    194  info("Creating a new container tab");
    195  let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE, {
    196    userContextId: identity.userContextId,
    197  });
    198  is(
    199    tab.getAttribute("usercontextid"),
    200    "" + identity.userContextId,
    201    "New tab has the right UCI"
    202  );
    203  gBrowser.selectedTab = tab;
    204 
    205  let browser = gBrowser.getBrowserForTab(tab);
    206  await BrowserTestUtils.browserLoaded(browser);
    207 
    208  ok(
    209    !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
    210    "No data before the test"
    211  );
    212 
    213  await storeReportingHeader(browser);
    214  ok(
    215    !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
    216    "We don't have data for the origin"
    217  );
    218  ok(
    219    ChromeUtils.hasReportingHeaderForOrigin(
    220      TEST_DOMAIN + "^userContextId=" + identity.userContextId
    221    ),
    222    "We have data for the origin + userContextId"
    223  );
    224 
    225  info("Removing the tab");
    226  BrowserTestUtils.removeTab(tab);
    227 
    228  ContextualIdentityService.remove(identity.userContextId);
    229 
    230  ok(
    231    !ChromeUtils.hasReportingHeaderForOrigin(
    232      TEST_DOMAIN + "^userContextId=" + identity.userContextId
    233    ),
    234    "No more data after a container removal"
    235  );
    236 });
    237 
    238 add_task(async function () {
    239  info("TTL cleanup");
    240 
    241  let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE);
    242  gBrowser.selectedTab = tab;
    243 
    244  let browser = gBrowser.getBrowserForTab(tab);
    245  await BrowserTestUtils.browserLoaded(browser);
    246 
    247  ok(
    248    !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
    249    "No data before the test"
    250  );
    251 
    252  await storeReportingHeader(browser);
    253  ok(
    254    ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN),
    255    "We have data for the origin"
    256  );
    257 
    258  // Let's wait a bit.
    259  await new Promise(resolve => {
    260    setTimeout(resolve, 5000);
    261  });
    262 
    263  ok(!ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "No data anymore");
    264 
    265  info("Removing the tab");
    266  BrowserTestUtils.removeTab(tab);
    267 });
    268 
    269 add_task(async function () {
    270  info("Cleaning up.");
    271  await new Promise(resolve => {
    272    Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, () =>
    273      resolve()
    274    );
    275  });
    276 });