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 });