70 lines
2 KiB
JavaScript
70 lines
2 KiB
JavaScript
/* 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 { XPIExports } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/addons/XPIExports.sys.mjs"
|
|
);
|
|
|
|
function run_test() {
|
|
// Check that cancelling with nothing in progress doesn't blow up
|
|
XPIExports.XPIInstall.cancelAll();
|
|
|
|
// Check that a basic object gets cancelled
|
|
let getsCancelled = {
|
|
isCancelled: false,
|
|
cancel() {
|
|
if (this.isCancelled) {
|
|
do_throw("Already cancelled");
|
|
}
|
|
this.isCancelled = true;
|
|
},
|
|
};
|
|
XPIExports.XPIInstall.doing(getsCancelled);
|
|
XPIExports.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"),
|
|
};
|
|
XPIExports.XPIInstall.doing(doesntGetCancelled);
|
|
Assert.ok(XPIExports.XPIInstall.done(doesntGetCancelled));
|
|
XPIExports.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;
|
|
XPIExports.XPIInstall.doing(getsCancelled);
|
|
},
|
|
};
|
|
XPIExports.XPIInstall.doing(addsAnother);
|
|
XPIExports.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;
|
|
XPIExports.XPIInstall.done(doesntGetCancelled);
|
|
},
|
|
};
|
|
XPIExports.XPIInstall.doing(removesAnother);
|
|
XPIExports.XPIInstall.doing(doesntGetCancelled);
|
|
XPIExports.XPIInstall.cancelAll();
|
|
Assert.ok(removesAnother.isCancelled);
|
|
}
|