Bug 1203330 Part 2 Convert EventManager uses to SingletonEventManager r=kmag

MozReview-Commit-ID: A12TPwAYzTS

--HG--
extra : rebase_source : 10526ee923dc1eed24bac3c9b9c80c54b8e174e9
This commit is contained in:
Andrew Swan 2017-01-26 11:27:03 -08:00
parent 30deceecf8
commit 322ee1283f
12 changed files with 66 additions and 67 deletions

View File

@ -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 () => {

View File

@ -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 () => {

View File

@ -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);

View File

@ -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);

View File

@ -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,

View File

@ -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);

View File

@ -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;
}
});

View File

@ -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(),

View File

@ -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);

View File

@ -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});
}
};

View File

@ -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);

View File

@ -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);