From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../test/xpcshell/test_install_cancel.js | 92 ++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 toolkit/mozapps/extensions/test/xpcshell/test_install_cancel.js (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_install_cancel.js') diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_install_cancel.js b/toolkit/mozapps/extensions/test/xpcshell/test_install_cancel.js new file mode 100644 index 0000000000..0be6ec0359 --- /dev/null +++ b/toolkit/mozapps/extensions/test/xpcshell/test_install_cancel.js @@ -0,0 +1,92 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ +"use strict"; + +var testserver = createHttpServer({ hosts: ["example.com"] }); + +AddonTestUtils.createAppInfo( + "xpcshell@tests.mozilla.org", + "XPCShell", + "1", + "1.9.2" +); + +class TestListener { + constructor(listener) { + this.listener = listener; + } + + onDataAvailable(...args) { + this.origListener.onDataAvailable(...args); + } + + onStartRequest(request) { + this.origListener.onStartRequest(request); + } + + onStopRequest(request, status) { + if (this.listener.onStopRequest) { + this.listener.onStopRequest(request, status); + } + this.origListener.onStopRequest(request, status); + } +} + +function startListener(listener) { + let observer = { + observe(subject, topic, data) { + let channel = subject.QueryInterface(Ci.nsIHttpChannel); + if (channel.URI.spec === "http://example.com/addons/test.xpi") { + let channelListener = new TestListener(listener); + channelListener.origListener = subject + .QueryInterface(Ci.nsITraceableChannel) + .setNewListener(channelListener); + Services.obs.removeObserver(observer, "http-on-modify-request"); + } + }, + }; + Services.obs.addObserver(observer, "http-on-modify-request"); +} + +add_task(async function setup() { + let xpi = AddonTestUtils.createTempWebExtensionFile({ + manifest: { + name: "Test", + version: "1.0", + browser_specific_settings: { gecko: { id: "cancel@test" } }, + }, + }); + testserver.registerFile(`/addons/test.xpi`, xpi); + await AddonTestUtils.promiseStartupManager(); +}); + +// This test checks that canceling an install after the download is completed fails +// and throws an exception as expected +add_task(async function test_install_cancelled() { + let url = "http://example.com/addons/test.xpi"; + let install = await AddonManager.getInstallForURL(url, { + name: "Test", + version: "1.0", + }); + + let cancelInstall = new Promise(resolve => { + startListener({ + onStopRequest() { + resolve(Promise.resolve().then(() => install.cancel())); + }, + }); + }); + + await install.install().then(() => { + ok(true, "install succeeded"); + }); + + await cancelInstall + .then(() => { + ok(false, "cancel should not succeed"); + }) + .catch(e => { + ok(!!e, "cancel threw an exception"); + }); +}); -- cgit v1.2.3