diff --git a/browser/components/extensions/ext-browserAction.js b/browser/components/extensions/ext-browserAction.js index b24678830c59..275941f3e47e 100644 --- a/browser/components/extensions/ext-browserAction.js +++ b/browser/components/extensions/ext-browserAction.js @@ -18,7 +18,7 @@ Cu.import("resource://gre/modules/ExtensionUtils.jsm"); Cu.import("resource://gre/modules/Task.jsm"); var { - EventManager, + SingletonEventManager, IconDetails, } = ExtensionUtils; @@ -446,10 +446,10 @@ extensions.registerSchemaAPI("browserAction", "addon_parent", context => { let {extension} = context; return { browserAction: { - onClicked: new EventManager(context, "browserAction.onClicked", fire => { + onClicked: new SingletonEventManager(context, "browserAction.onClicked", fire => { let listener = () => { let tab = TabManager.activeTab; - fire(TabManager.convert(extension, tab)); + fire.async(TabManager.convert(extension, tab)); }; BrowserAction.for(extension).on("click", listener); return () => { diff --git a/browser/components/extensions/ext-commands.js b/browser/components/extensions/ext-commands.js index 416544e860ca..08a5f6af06a2 100644 --- a/browser/components/extensions/ext-commands.js +++ b/browser/components/extensions/ext-commands.js @@ -6,7 +6,7 @@ Cu.import("resource://devtools/shared/event-emitter.js"); Cu.import("resource://gre/modules/ExtensionUtils.jsm"); var { - EventManager, + SingletonEventManager, PlatformInfo, } = ExtensionUtils; @@ -245,9 +245,9 @@ extensions.registerSchemaAPI("commands", "addon_parent", context => { }); })); }, - onCommand: new EventManager(context, "commands.onCommand", fire => { + onCommand: new SingletonEventManager(context, "commands.onCommand", fire => { let listener = (eventName, commandName) => { - fire(commandName); + fire.async(commandName); }; commandsMap.get(extension).on("command", listener); return () => { diff --git a/browser/components/extensions/ext-contextMenus.js b/browser/components/extensions/ext-contextMenus.js index 34a828f13de8..886f10fcf98a 100644 --- a/browser/components/extensions/ext-contextMenus.js +++ b/browser/components/extensions/ext-contextMenus.js @@ -8,9 +8,9 @@ Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); var { - EventManager, ExtensionError, IconDetails, + SingletonEventManager, } = ExtensionUtils; const ACTION_MENU_TOP_LEVEL_LIMIT = 6; @@ -625,9 +625,9 @@ extensions.registerSchemaAPI("contextMenus", "addon_parent", context => { } }, - onClicked: new EventManager(context, "contextMenus.onClicked", fire => { + onClicked: new SingletonEventManager(context, "contextMenus.onClicked", fire => { let listener = (event, info, tab) => { - fire(info, tab); + fire.async(info, tab); }; extension.on("webext-contextmenu-menuitem-click", listener); diff --git a/browser/components/extensions/ext-pageAction.js b/browser/components/extensions/ext-pageAction.js index 4e3299690c12..f4577e808f6e 100644 --- a/browser/components/extensions/ext-pageAction.js +++ b/browser/components/extensions/ext-pageAction.js @@ -5,7 +5,7 @@ Cu.import("resource://gre/modules/Task.jsm"); Cu.import("resource://gre/modules/ExtensionUtils.jsm"); var { - EventManager, + SingletonEventManager, IconDetails, } = ExtensionUtils; @@ -244,9 +244,9 @@ extensions.registerSchemaAPI("pageAction", "addon_parent", context => { let {extension} = context; return { pageAction: { - onClicked: new EventManager(context, "pageAction.onClicked", fire => { + onClicked: new SingletonEventManager(context, "pageAction.onClicked", fire => { let listener = (evt, tab) => { - fire(TabManager.convert(extension, tab)); + fire.async(TabManager.convert(extension, tab)); }; let pageAction = PageAction.for(extension); diff --git a/browser/components/extensions/ext-tabs.js b/browser/components/extensions/ext-tabs.js index c835aeb83f84..f6fff15a99cc 100644 --- a/browser/components/extensions/ext-tabs.js +++ b/browser/components/extensions/ext-tabs.js @@ -18,7 +18,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "Services", Cu.import("resource://gre/modules/ExtensionUtils.jsm"); var { - EventManager, + SingletonEventManager, ignoreEvent, } = ExtensionUtils; @@ -283,12 +283,12 @@ extensions.registerSchemaAPI("tabs", "addon_parent", context => { let tab = event.originalTarget; let tabId = TabManager.getId(tab); let windowId = WindowManager.getId(tab.ownerGlobal); - fire({tabId, windowId}); + fire.async({tabId, windowId}); }).api(), - onCreated: new EventManager(context, "tabs.onCreated", fire => { + onCreated: new SingletonEventManager(context, "tabs.onCreated", fire => { let listener = (eventName, event) => { - fire(TabManager.convert(extension, event.tab)); + fire.async(TabManager.convert(extension, event.tab)); }; tabListener.on("tab-created", listener); @@ -307,12 +307,12 @@ extensions.registerSchemaAPI("tabs", "addon_parent", context => { let tab = event.originalTarget; let tabIds = [TabManager.getId(tab)]; let windowId = WindowManager.getId(tab.ownerGlobal); - fire({tabIds, windowId}); + fire.async({tabIds, windowId}); }).api(), - onAttached: new EventManager(context, "tabs.onAttached", fire => { + onAttached: new SingletonEventManager(context, "tabs.onAttached", fire => { let listener = (eventName, event) => { - fire(event.tabId, {newWindowId: event.newWindowId, newPosition: event.newPosition}); + fire.async(event.tabId, {newWindowId: event.newWindowId, newPosition: event.newPosition}); }; tabListener.on("tab-attached", listener); @@ -321,9 +321,9 @@ extensions.registerSchemaAPI("tabs", "addon_parent", context => { }; }).api(), - onDetached: new EventManager(context, "tabs.onDetached", fire => { + onDetached: new SingletonEventManager(context, "tabs.onDetached", fire => { let listener = (eventName, event) => { - fire(event.tabId, {oldWindowId: event.oldWindowId, oldPosition: event.oldPosition}); + fire.async(event.tabId, {oldWindowId: event.oldWindowId, oldPosition: event.oldPosition}); }; tabListener.on("tab-detached", listener); @@ -332,9 +332,9 @@ extensions.registerSchemaAPI("tabs", "addon_parent", context => { }; }).api(), - onRemoved: new EventManager(context, "tabs.onRemoved", fire => { + onRemoved: new SingletonEventManager(context, "tabs.onRemoved", fire => { let listener = (eventName, event) => { - fire(event.tabId, {windowId: event.windowId, isWindowClosing: event.isWindowClosing}); + fire.async(event.tabId, {windowId: event.windowId, isWindowClosing: event.isWindowClosing}); }; tabListener.on("tab-removed", listener); @@ -345,7 +345,7 @@ extensions.registerSchemaAPI("tabs", "addon_parent", context => { onReplaced: ignoreEvent(context, "tabs.onReplaced"), - onMoved: new EventManager(context, "tabs.onMoved", fire => { + onMoved: new SingletonEventManager(context, "tabs.onMoved", fire => { // There are certain circumstances where we need to ignore a move event. // // Namely, the first time the tab is moved after it's created, we need @@ -373,7 +373,7 @@ extensions.registerSchemaAPI("tabs", "addon_parent", context => { return; } - fire(TabManager.getId(tab), { + fire.async(TabManager.getId(tab), { windowId: WindowManager.getId(tab.ownerGlobal), fromIndex: event.detail, toIndex: tab._tPos, @@ -388,7 +388,7 @@ extensions.registerSchemaAPI("tabs", "addon_parent", context => { }; }).api(), - onUpdated: new EventManager(context, "tabs.onUpdated", fire => { + onUpdated: new SingletonEventManager(context, "tabs.onUpdated", fire => { const restricted = ["url", "favIconUrl", "title"]; function sanitize(extension, changeInfo) { @@ -410,7 +410,7 @@ extensions.registerSchemaAPI("tabs", "addon_parent", context => { let tabElem = gBrowser.getTabForBrowser(browser); let tab = TabManager.convert(extension, tabElem); - fire(tab.id, changeInfo, tab); + fire.async(tab.id, changeInfo, tab); } }; @@ -447,7 +447,7 @@ extensions.registerSchemaAPI("tabs", "addon_parent", context => { for (let prop of needed) { changeInfo[prop] = tab[prop]; } - fire(tab.id, changeInfo, tab); + fire.async(tab.id, changeInfo, tab); } }; let progressListener = { @@ -1025,7 +1025,7 @@ extensions.registerSchemaAPI("tabs", "addon_parent", context => { return Promise.resolve(); }, - onZoomChange: new EventManager(context, "tabs.onZoomChange", fire => { + onZoomChange: new SingletonEventManager(context, "tabs.onZoomChange", fire => { let getZoomLevel = browser => { let {ZoomManager} = browser.ownerGlobal; @@ -1075,7 +1075,7 @@ extensions.registerSchemaAPI("tabs", "addon_parent", context => { zoomLevels.set(browser, newZoomFactor); let tabId = TabManager.getId(tab); - fire({ + fire.async({ tabId, oldZoomFactor, newZoomFactor, diff --git a/browser/components/extensions/ext-utils.js b/browser/components/extensions/ext-utils.js index c79eec9d4725..7a010382c378 100644 --- a/browser/components/extensions/ext-utils.js +++ b/browser/components/extensions/ext-utils.js @@ -28,8 +28,8 @@ const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; var { DefaultWeakMap, - EventManager, promiseEvent, + SingletonEventManager, } = ExtensionUtils; // This file provides some useful code for the |tabs| and |windows| @@ -1281,16 +1281,16 @@ global.AllWindowEvents = { AllWindowEvents.openListener = AllWindowEvents.openListener.bind(AllWindowEvents); -// Subclass of EventManager where we just need to call +// Subclass of SingletonEventManager where we just need to call // add/removeEventListener on each XUL window. -global.WindowEventManager = function(context, name, event, listener) { - EventManager.call(this, context, name, fire => { - let listener2 = (...args) => listener(fire, ...args); - AllWindowEvents.addListener(event, listener2); - return () => { - AllWindowEvents.removeListener(event, listener2); - }; - }); +global.WindowEventManager = class extends SingletonEventManager { + constructor(context, name, event, listener) { + super(context, name, fire => { + let listener2 = (...args) => listener(fire, ...args); + AllWindowEvents.addListener(event, listener2); + return () => { + AllWindowEvents.removeListener(event, listener2); + }; + }); + } }; - -WindowEventManager.prototype = Object.create(EventManager.prototype); diff --git a/browser/components/extensions/ext-windows.js b/browser/components/extensions/ext-windows.js index 8f898cb148bf..e76bb8df5f9b 100644 --- a/browser/components/extensions/ext-windows.js +++ b/browser/components/extensions/ext-windows.js @@ -12,7 +12,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils", Cu.import("resource://gre/modules/ExtensionUtils.jsm"); var { - EventManager, + SingletonEventManager, promiseObserved, } = ExtensionUtils; @@ -26,15 +26,15 @@ extensions.registerSchemaAPI("windows", "addon_parent", context => { windows: { onCreated: new WindowEventManager(context, "windows.onCreated", "domwindowopened", (fire, window) => { - fire(WindowManager.convert(extension, window)); + fire.async(WindowManager.convert(extension, window)); }).api(), onRemoved: new WindowEventManager(context, "windows.onRemoved", "domwindowclosed", (fire, window) => { - fire(WindowManager.getId(window)); + fire.async(WindowManager.getId(window)); }).api(), - onFocusChanged: new EventManager(context, "windows.onFocusChanged", fire => { + onFocusChanged: new SingletonEventManager(context, "windows.onFocusChanged", fire => { // Keep track of the last windowId used to fire an onFocusChanged event let lastOnFocusChangedWindowId; @@ -45,7 +45,7 @@ extensions.registerSchemaAPI("windows", "addon_parent", context => { let window = Services.focus.activeWindow; let windowId = window ? WindowManager.getId(window) : WindowManager.WINDOW_ID_NONE; if (windowId !== lastOnFocusChangedWindowId) { - fire(windowId); + fire.async(windowId); lastOnFocusChangedWindowId = windowId; } }); diff --git a/toolkit/components/extensions/ExtensionChild.jsm b/toolkit/components/extensions/ExtensionChild.jsm index cb30e32598e2..ddccd3c45b50 100644 --- a/toolkit/components/extensions/ExtensionChild.jsm +++ b/toolkit/components/extensions/ExtensionChild.jsm @@ -41,7 +41,6 @@ Cu.import("resource://gre/modules/ExtensionUtils.jsm"); const { DefaultMap, - EventManager, SingletonEventManager, SpreadArgs, defineLazyGetter, @@ -119,17 +118,17 @@ class Port { this.postMessage(json); }, - onDisconnect: new EventManager(this.context, "Port.onDisconnect", fire => { + onDisconnect: new SingletonEventManager(this.context, "Port.onDisconnect", fire => { return this.registerOnDisconnect(error => { portError = error && this.context.normalizeError(error); - fire.withoutClone(portObj); + fire.asyncWithoutClone(portObj); }); }).api(), - onMessage: new EventManager(this.context, "Port.onMessage", fire => { + onMessage: new SingletonEventManager(this.context, "Port.onMessage", fire => { return this.registerOnMessage(msg => { msg = Cu.cloneInto(msg, this.context.cloneScope); - fire.withoutClone(msg, portObj); + fire.asyncWithoutClone(msg, portObj); }); }).api(), diff --git a/toolkit/components/extensions/ext-alarms.js b/toolkit/components/extensions/ext-alarms.js index 2171e7dba6e9..b840d606ef01 100644 --- a/toolkit/components/extensions/ext-alarms.js +++ b/toolkit/components/extensions/ext-alarms.js @@ -4,7 +4,7 @@ var {classes: Cc, interfaces: Ci, utils: Cu} = Components; Cu.import("resource://gre/modules/ExtensionUtils.jsm"); var { - EventManager, + SingletonEventManager, } = ExtensionUtils; // WeakMap[Extension -> Map[name -> Alarm]] @@ -140,9 +140,9 @@ extensions.registerSchemaAPI("alarms", "addon_parent", context => { return Promise.resolve(cleared); }, - onAlarm: new EventManager(context, "alarms.onAlarm", fire => { + onAlarm: new SingletonEventManager(context, "alarms.onAlarm", fire => { let callback = alarm => { - fire(alarm.data); + fire.sync(alarm.data); }; alarmCallbacksMap.get(extension).add(callback); diff --git a/toolkit/components/extensions/ext-cookies.js b/toolkit/components/extensions/ext-cookies.js index 05484efb20d3..4e3c41a85ec2 100644 --- a/toolkit/components/extensions/ext-cookies.js +++ b/toolkit/components/extensions/ext-cookies.js @@ -9,7 +9,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "ContextualIdentityService", "resource://gre/modules/ContextualIdentityService.jsm"); var { - EventManager, + SingletonEventManager, } = ExtensionUtils; var DEFAULT_STORE = "firefox-default"; @@ -438,13 +438,13 @@ extensions.registerSchemaAPI("cookies", "addon_parent", context => { return Promise.resolve(result); }, - onChanged: new EventManager(context, "cookies.onChanged", fire => { + onChanged: new SingletonEventManager(context, "cookies.onChanged", fire => { let observer = (subject, topic, data) => { let notify = (removed, cookie, cause) => { cookie.QueryInterface(Ci.nsICookie2); if (extension.whiteListedHosts.matchesCookie(cookie)) { - fire({removed, cookie: convert({cookie, isPrivate: topic == "private-cookie-changed"}), cause}); + fire.async({removed, cookie: convert({cookie, isPrivate: topic == "private-cookie-changed"}), cause}); } }; diff --git a/toolkit/components/extensions/ext-notifications.js b/toolkit/components/extensions/ext-notifications.js index 1df96a2ace9a..df2de578083c 100644 --- a/toolkit/components/extensions/ext-notifications.js +++ b/toolkit/components/extensions/ext-notifications.js @@ -8,7 +8,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "EventEmitter", "resource://devtools/shared/event-emitter.js"); var { - EventManager, + SingletonEventManager, ignoreEvent, } = ExtensionUtils; @@ -131,10 +131,10 @@ extensions.registerSchemaAPI("notifications", "addon_parent", context => { return Promise.resolve(result); }, - onClosed: new EventManager(context, "notifications.onClosed", fire => { + onClosed: new SingletonEventManager(context, "notifications.onClosed", fire => { let listener = (event, notificationId) => { // FIXME: Support the byUser argument. - fire(notificationId, true); + fire.async(notificationId, true); }; notificationsMap.get(extension).on("closed", listener); @@ -143,9 +143,9 @@ extensions.registerSchemaAPI("notifications", "addon_parent", context => { }; }).api(), - onClicked: new EventManager(context, "notifications.onClicked", fire => { + onClicked: new SingletonEventManager(context, "notifications.onClicked", fire => { let listener = (event, notificationId) => { - fire(notificationId, true); + fire.async(notificationId, true); }; notificationsMap.get(extension).on("clicked", listener); diff --git a/toolkit/components/extensions/ext-storage.js b/toolkit/components/extensions/ext-storage.js index 2f17f82d5417..0155ad6948f8 100644 --- a/toolkit/components/extensions/ext-storage.js +++ b/toolkit/components/extensions/ext-storage.js @@ -11,8 +11,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AddonManagerPrivate", Cu.import("resource://gre/modules/ExtensionUtils.jsm"); var { - EventManager, ExtensionError, + SingletonEventManager, } = ExtensionUtils; function enforceNoTemporaryAddon(extensionId) { @@ -63,12 +63,12 @@ function storageApiFactory(context) { }, }, - onChanged: new EventManager(context, "storage.onChanged", fire => { + onChanged: new SingletonEventManager(context, "storage.onChanged", fire => { let listenerLocal = changes => { - fire(changes, "local"); + fire.async(changes, "local"); }; let listenerSync = changes => { - fire(changes, "sync"); + fire.async(changes, "sync"); }; ExtensionStorage.addOnChangedListener(extension.id, listenerLocal);