Bug 1307015 - Use addEventListener(..., { once: true }). r=felipe
I didn't realize this existed! This lets us simplify some things.
MozReview-Commit-ID: 8KwFLaHqi3v
--- a/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm
+++ b/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm
@@ -606,32 +606,26 @@ this.BrowserTestUtils = {
* will cause the returned promise to be rejected instead of waiting for
* the next event, since this is probably a bug in the test.
*
* @returns {Promise}
* @resolves The Event object.
*/
waitForEvent(subject, eventName, capture, checkFn, wantsUntrusted) {
return new Promise((resolve, reject) => {
- subject.addEventListener(eventName, function listener(event) {
+ subject.addEventListener(eventName, (event) => {
try {
if (checkFn && !checkFn(event)) {
return;
}
- subject.removeEventListener(eventName, listener, capture);
resolve(event);
} catch (ex) {
- try {
- subject.removeEventListener(eventName, listener, capture);
- } catch (ex2) {
- // Maybe the provided object does not support removeEventListener.
- }
reject(ex);
}
- }, capture, wantsUntrusted);
+ }, { capture, once: true }, wantsUntrusted);
});
},
/**
* Like waitForEvent, but adds the event listener to the message manager
* global for browser.
*
* @param {string} eventName
@@ -670,19 +664,18 @@ this.BrowserTestUtils = {
let completion = resolve;
try {
if (checkFn && !checkFn(event)) {
return;
}
} catch (e) {
completion = () => reject(e);
}
- removeEventListener(eventName, listener, capture);
completion();
- }, capture, wantsUntrusted);
+ }, { capture, once: true }, wantsUntrusted);
});
});
},
/**
* Like browserLoaded, but waits for an error page to appear.
* This explicitly deals with cases where the browser is not currently remote and a
* remoteness switch will occur before the error page is loaded, which is tricky