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 --- .../extensions/test/xpcshell/test_XPIcancel.js | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 toolkit/mozapps/extensions/test/xpcshell/test_XPIcancel.js (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_XPIcancel.js') diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_XPIcancel.js b/toolkit/mozapps/extensions/test/xpcshell/test_XPIcancel.js new file mode 100644 index 0000000000..8910d959f0 --- /dev/null +++ b/toolkit/mozapps/extensions/test/xpcshell/test_XPIcancel.js @@ -0,0 +1,70 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// Test the cancellable doing/done/cancelAll API in XPIProvider + +const { XPIInstall } = ChromeUtils.import( + "resource://gre/modules/addons/XPIInstall.jsm" +); + +function run_test() { + // Check that cancelling with nothing in progress doesn't blow up + XPIInstall.cancelAll(); + + // Check that a basic object gets cancelled + let getsCancelled = { + isCancelled: false, + cancel() { + if (this.isCancelled) { + do_throw("Already cancelled"); + } + this.isCancelled = true; + }, + }; + XPIInstall.doing(getsCancelled); + XPIInstall.cancelAll(); + Assert.ok(getsCancelled.isCancelled); + + // Check that if we complete a cancellable, it doesn't get cancelled + let doesntGetCancelled = { + cancel: () => do_throw("This should not have been cancelled"), + }; + XPIInstall.doing(doesntGetCancelled); + Assert.ok(XPIInstall.done(doesntGetCancelled)); + XPIInstall.cancelAll(); + + // A cancellable that adds a cancellable + getsCancelled.isCancelled = false; + let addsAnother = { + isCancelled: false, + cancel() { + if (this.isCancelled) { + do_throw("Already cancelled"); + } + this.isCancelled = true; + XPIInstall.doing(getsCancelled); + }, + }; + XPIInstall.doing(addsAnother); + XPIInstall.cancelAll(); + Assert.ok(addsAnother.isCancelled); + Assert.ok(getsCancelled.isCancelled); + + // A cancellable that removes another. This assumes that Set() iterates in the + // order that members were added + let removesAnother = { + isCancelled: false, + cancel() { + if (this.isCancelled) { + do_throw("Already cancelled"); + } + this.isCancelled = true; + XPIInstall.done(doesntGetCancelled); + }, + }; + XPIInstall.doing(removesAnother); + XPIInstall.doing(doesntGetCancelled); + XPIInstall.cancelAll(); + Assert.ok(removesAnother.isCancelled); +} -- cgit v1.2.3