summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_downloads_eventpage.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /toolkit/components/extensions/test/xpcshell/test_ext_downloads_eventpage.js
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_downloads_eventpage.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_downloads_eventpage.js162
1 files changed, 162 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_downloads_eventpage.js b/toolkit/components/extensions/test/xpcshell/test_ext_downloads_eventpage.js
new file mode 100644
index 0000000000..9c71c63e96
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_downloads_eventpage.js
@@ -0,0 +1,162 @@
+"use strict";
+
+AddonTestUtils.init(this);
+AddonTestUtils.overrideCertDB();
+AddonTestUtils.createAppInfo(
+ "xpcshell@tests.mozilla.org",
+ "XPCShell",
+ "42",
+ "42"
+);
+
+const server = createHttpServer();
+server.registerDirectory("/data/", do_get_file("data"));
+
+const BASE = `http://localhost:${server.identity.primaryPort}/data`;
+const TXT_FILE = "file_download.txt";
+const TXT_URL = BASE + "/" + TXT_FILE;
+
+add_task(function setup() {
+ let downloadDir = FileUtils.getDir("TmpD", ["downloads"]);
+ downloadDir.createUnique(
+ Ci.nsIFile.DIRECTORY_TYPE,
+ FileUtils.PERMS_DIRECTORY
+ );
+ info(`Using download directory ${downloadDir.path}`);
+
+ Services.prefs.setIntPref("browser.download.folderList", 2);
+ Services.prefs.setComplexValue(
+ "browser.download.dir",
+ Ci.nsIFile,
+ downloadDir
+ );
+
+ registerCleanupFunction(() => {
+ Services.prefs.clearUserPref("browser.download.folderList");
+ Services.prefs.clearUserPref("browser.download.dir");
+
+ let entries = downloadDir.directoryEntries;
+ while (entries.hasMoreElements()) {
+ let entry = entries.nextFile;
+ ok(false, `Leftover file ${entry.path} in download directory`);
+ entry.remove(false);
+ }
+
+ downloadDir.remove(false);
+ });
+});
+
+add_task(
+ { pref_set: [["extensions.eventPages.enabled", true]] },
+ async function test_downloads_event_page() {
+ await AddonTestUtils.promiseStartupManager();
+
+ // A simple download driving extension
+ let dl_extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ browser_specific_settings: { gecko: { id: "downloader@mochitest" } },
+ permissions: ["downloads"],
+ background: { persistent: false },
+ },
+ background() {
+ let downloadId;
+ browser.downloads.onChanged.addListener(async info => {
+ if (info.state && info.state.current === "complete") {
+ browser.test.sendMessage("downloadComplete");
+ }
+ });
+ browser.test.onMessage.addListener(async (msg, opts) => {
+ if (msg == "download") {
+ downloadId = await browser.downloads.download(opts);
+ }
+ if (msg == "erase") {
+ await browser.downloads.removeFile(downloadId);
+ await browser.downloads.erase({ id: downloadId });
+ }
+ });
+ },
+ });
+ await dl_extension.startup();
+
+ let extension = ExtensionTestUtils.loadExtension({
+ useAddonManager: "permanent",
+ manifest: {
+ permissions: ["downloads"],
+ background: { persistent: false },
+ },
+ background() {
+ browser.downloads.onChanged.addListener(() => {
+ browser.test.sendMessage("onChanged");
+ });
+ browser.downloads.onCreated.addListener(() => {
+ browser.test.sendMessage("onCreated");
+ });
+ browser.downloads.onErased.addListener(() => {
+ browser.test.sendMessage("onErased");
+ });
+ browser.test.sendMessage("ready");
+ },
+ });
+
+ // onDeterminingFilename is never persisted, it is an empty event handler.
+ const EVENTS = ["onChanged", "onCreated", "onErased"];
+
+ await extension.startup();
+ await extension.awaitMessage("ready");
+ for (let event of EVENTS) {
+ assertPersistentListeners(extension, "downloads", event, {
+ primed: false,
+ });
+ }
+
+ await extension.terminateBackground({ disableResetIdleForTest: true });
+ ok(
+ !extension.extension.backgroundContext,
+ "Background Extension context should have been destroyed"
+ );
+
+ for (let event of EVENTS) {
+ assertPersistentListeners(extension, "downloads", event, {
+ primed: true,
+ });
+ }
+
+ // test download events waken background
+ dl_extension.sendMessage("download", {
+ url: TXT_URL,
+ filename: TXT_FILE,
+ });
+ await extension.awaitMessage("ready");
+ await extension.awaitMessage("onCreated");
+ for (let event of EVENTS) {
+ assertPersistentListeners(extension, "downloads", event, {
+ primed: false,
+ });
+ }
+ await extension.awaitMessage("onChanged");
+
+ await extension.terminateBackground({ disableResetIdleForTest: true });
+ ok(
+ !extension.extension.backgroundContext,
+ "Background Extension context should have been destroyed"
+ );
+
+ await dl_extension.awaitMessage("downloadComplete");
+ dl_extension.sendMessage("erase");
+ await extension.awaitMessage("ready");
+ await extension.awaitMessage("onErased");
+ await dl_extension.unload();
+
+ // check primed listeners after startup
+ await AddonTestUtils.promiseRestartManager();
+ await extension.awaitStartup();
+
+ for (let event of EVENTS) {
+ assertPersistentListeners(extension, "downloads", event, {
+ primed: true,
+ });
+ }
+
+ await extension.unload();
+ }
+);