tor-browser

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

test_ext_browsingData_downloads.js (3808B)


      1 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* vim: set sts=2 sw=2 et tw=80: */
      3 "use strict";
      4 
      5 ChromeUtils.defineESModuleGetters(this, {
      6  Downloads: "resource://gre/modules/Downloads.sys.mjs",
      7 });
      8 
      9 const OLD_NAMES = {
     10  [Downloads.PUBLIC]: "old-public",
     11  [Downloads.PRIVATE]: "old-private",
     12 };
     13 const RECENT_NAMES = {
     14  [Downloads.PUBLIC]: "recent-public",
     15  [Downloads.PRIVATE]: "recent-private",
     16 };
     17 const REFERENCE_DATE = new Date();
     18 const OLD_DATE = new Date(Number(REFERENCE_DATE) - 10000);
     19 
     20 async function downloadExists(list, path) {
     21  let listArray = await list.getAll();
     22  return listArray.some(i => i.target.path == path);
     23 }
     24 
     25 async function checkDownloads(
     26  expectOldExists = true,
     27  expectRecentExists = true
     28 ) {
     29  for (let listType of [Downloads.PUBLIC, Downloads.PRIVATE]) {
     30    let downloadsList = await Downloads.getList(listType);
     31    equal(
     32      await downloadExists(downloadsList, OLD_NAMES[listType]),
     33      expectOldExists,
     34      `Fake old download ${expectOldExists ? "was found" : "was removed"}.`
     35    );
     36    equal(
     37      await downloadExists(downloadsList, RECENT_NAMES[listType]),
     38      expectRecentExists,
     39      `Fake recent download ${
     40        expectRecentExists ? "was found" : "was removed"
     41      }.`
     42    );
     43  }
     44 }
     45 
     46 async function setupDownloads() {
     47  let downloadsList = await Downloads.getList(Downloads.ALL);
     48  await downloadsList.removeFinished();
     49 
     50  for (let listType of [Downloads.PUBLIC, Downloads.PRIVATE]) {
     51    downloadsList = await Downloads.getList(listType);
     52    let download = await Downloads.createDownload({
     53      source: {
     54        url: "https://bugzilla.mozilla.org/show_bug.cgi?id=1321303",
     55        isPrivate: listType == Downloads.PRIVATE,
     56      },
     57      target: OLD_NAMES[listType],
     58    });
     59    download.startTime = OLD_DATE;
     60    download.canceled = true;
     61    await downloadsList.add(download);
     62 
     63    download = await Downloads.createDownload({
     64      source: {
     65        url: "https://bugzilla.mozilla.org/show_bug.cgi?id=1321303",
     66        isPrivate: listType == Downloads.PRIVATE,
     67      },
     68      target: RECENT_NAMES[listType],
     69    });
     70    download.startTime = REFERENCE_DATE;
     71    download.canceled = true;
     72    await downloadsList.add(download);
     73  }
     74 
     75  // Confirm everything worked.
     76  downloadsList = await Downloads.getList(Downloads.ALL);
     77  equal((await downloadsList.getAll()).length, 4, "4 fake downloads added.");
     78  checkDownloads();
     79 }
     80 
     81 add_task(async function testDownloads() {
     82  function background() {
     83    browser.test.onMessage.addListener(async (msg, options) => {
     84      if (msg == "removeDownloads") {
     85        await browser.browsingData.removeDownloads(options);
     86      } else {
     87        await browser.browsingData.remove(options, { downloads: true });
     88      }
     89      browser.test.sendMessage("downloadsRemoved");
     90    });
     91  }
     92 
     93  let extension = ExtensionTestUtils.loadExtension({
     94    background,
     95    manifest: {
     96      permissions: ["browsingData"],
     97    },
     98  });
     99 
    100  async function testRemovalMethod(method) {
    101    // Clear downloads with no since value.
    102    await setupDownloads();
    103    extension.sendMessage(method, {});
    104    await extension.awaitMessage("downloadsRemoved");
    105    await checkDownloads(false, false);
    106 
    107    // Clear downloads with recent since value.
    108    await setupDownloads();
    109    extension.sendMessage(method, { since: REFERENCE_DATE });
    110    await extension.awaitMessage("downloadsRemoved");
    111    await checkDownloads(true, false);
    112 
    113    // Clear downloads with old since value.
    114    await setupDownloads();
    115    extension.sendMessage(method, { since: REFERENCE_DATE - 100000 });
    116    await extension.awaitMessage("downloadsRemoved");
    117    await checkDownloads(false, false);
    118  }
    119 
    120  await extension.startup();
    121 
    122  await testRemovalMethod("removeDownloads");
    123  await testRemovalMethod("remove");
    124 
    125  await extension.unload();
    126 });