Backed out changeset 26fd6d0a1254 (bug 1369577) for failing xpcshell's test_ext_simple.js and test_ext_startup_cache.js on Android. r=backout

This commit is contained in:
Sebastian Hengst 2017-06-30 01:01:13 +02:00
Родитель 61fb850321
Коммит 6d1aee1b24
33 изменённых файлов: 86 добавлений и 86 удалений

Просмотреть файл

@ -317,7 +317,7 @@ this.bookmarks = class extends ExtensionAPI {
}
},
onCreated: new EventManager(context, "bookmarks.onCreated", fire => {
onCreated: new SingletonEventManager(context, "bookmarks.onCreated", fire => {
let listener = (event, bookmark) => {
fire.sync(bookmark.id, bookmark);
};
@ -330,7 +330,7 @@ this.bookmarks = class extends ExtensionAPI {
};
}).api(),
onRemoved: new EventManager(context, "bookmarks.onRemoved", fire => {
onRemoved: new SingletonEventManager(context, "bookmarks.onRemoved", fire => {
let listener = (event, data) => {
fire.sync(data.guid, data.info);
};
@ -343,7 +343,7 @@ this.bookmarks = class extends ExtensionAPI {
};
}).api(),
onChanged: new EventManager(context, "bookmarks.onChanged", fire => {
onChanged: new SingletonEventManager(context, "bookmarks.onChanged", fire => {
let listener = (event, data) => {
fire.sync(data.guid, data.info);
};
@ -356,7 +356,7 @@ this.bookmarks = class extends ExtensionAPI {
};
}).api(),
onMoved: new EventManager(context, "bookmarks.onMoved", fire => {
onMoved: new SingletonEventManager(context, "bookmarks.onMoved", fire => {
let listener = (event, data) => {
fire.sync(data.guid, data.info);
};

Просмотреть файл

@ -566,7 +566,7 @@ this.browserAction = class extends ExtensionAPI {
return {
browserAction: {
onClicked: new EventManager(context, "browserAction.onClicked", fire => {
onClicked: new SingletonEventManager(context, "browserAction.onClicked", fire => {
let listener = () => {
fire.async(tabManager.convert(tabTracker.activeTab));
};

Просмотреть файл

@ -102,7 +102,7 @@ class ChildDevToolsPanel extends EventEmitter {
api() {
return {
onShown: new EventManager(
onShown: new SingletonEventManager(
this.context, "devtoolsPanel.onShown", fire => {
const listener = (eventName, panelContentWindow) => {
fire.asyncWithoutClone(panelContentWindow);
@ -113,7 +113,7 @@ class ChildDevToolsPanel extends EventEmitter {
};
}).api(),
onHidden: new EventManager(
onHidden: new SingletonEventManager(
this.context, "devtoolsPanel.onHidden", fire => {
const listener = () => {
fire.async();
@ -160,7 +160,7 @@ this.devtools_panels = class extends ExtensionAPI {
get themeName() {
return themeChangeObserver.themeName;
},
onThemeChanged: new EventManager(
onThemeChanged: new SingletonEventManager(
context, "devtools.panels.onThemeChanged", fire => {
const listener = (eventName, themeName) => {
fire.async(themeName);

Просмотреть файл

@ -158,7 +158,7 @@ this.menusInternal = class extends ExtensionAPI {
return context.childManager.callParentAsyncFunction("menusInternal.removeAll", []);
},
onClicked: new EventManager(context, "menus.onClicked", fire => {
onClicked: new SingletonEventManager(context, "menus.onClicked", fire => {
let listener = (info, tab) => {
fire.async(info, tab);
};

Просмотреть файл

@ -9,7 +9,7 @@ this.omnibox = class extends ExtensionAPI {
getAPI(context) {
return {
omnibox: {
onInputChanged: new EventManager(context, "omnibox.onInputChanged", fire => {
onInputChanged: new SingletonEventManager(context, "omnibox.onInputChanged", fire => {
let listener = (text, id) => {
fire.asyncWithoutClone(text, suggestions => {
context.childManager.callParentFunctionNoReturn("omnibox_internal.addSuggestions", [

Просмотреть файл

@ -241,7 +241,7 @@ this.commands = class extends ExtensionAPI {
});
}));
},
onCommand: new EventManager(context, "commands.onCommand", fire => {
onCommand: new SingletonEventManager(context, "commands.onCommand", fire => {
let listener = (eventName, commandName) => {
fire.async(commandName);
};

Просмотреть файл

@ -10,7 +10,7 @@ this.devtools_network = class extends ExtensionAPI {
return {
devtools: {
network: {
onNavigated: new EventManager(context, "devtools.onNavigated", fire => {
onNavigated: new SingletonEventManager(context, "devtools.onNavigated", fire => {
let listener = (event, data) => {
fire.async(data.url);
};

Просмотреть файл

@ -374,7 +374,7 @@ this.geckoProfiler = class extends ExtensionAPI {
throw new Error(`Ran out of options to get symbols from library ${debugName} ${breakpadId}.`);
},
onRunning: new EventManager(context, "geckoProfiler.onRunning", fire => {
onRunning: new SingletonEventManager(context, "geckoProfiler.onRunning", fire => {
isRunningObserver.addObserver(fire.async);
return () => {
isRunningObserver.removeObserver(fire.async);

Просмотреть файл

@ -219,7 +219,7 @@ this.history = class extends ExtensionAPI {
return Promise.resolve(results);
},
onVisited: new EventManager(context, "history.onVisited", fire => {
onVisited: new SingletonEventManager(context, "history.onVisited", fire => {
let listener = (event, data) => {
fire.sync(data);
};
@ -230,7 +230,7 @@ this.history = class extends ExtensionAPI {
};
}).api(),
onVisitRemoved: new EventManager(context, "history.onVisitRemoved", fire => {
onVisitRemoved: new SingletonEventManager(context, "history.onVisitRemoved", fire => {
let listener = (event, data) => {
fire.sync(data);
};
@ -241,7 +241,7 @@ this.history = class extends ExtensionAPI {
};
}).api(),
onTitleChanged: new EventManager(context, "history.onTitleChanged", fire => {
onTitleChanged: new SingletonEventManager(context, "history.onTitleChanged", fire => {
let listener = (event, data) => {
fire.sync(data);
};

Просмотреть файл

@ -673,7 +673,7 @@ this.menusInternal = class extends ExtensionAPI {
}
},
onClicked: new EventManager(context, "menusInternal.onClicked", fire => {
onClicked: new SingletonEventManager(context, "menusInternal.onClicked", fire => {
let listener = (event, info, tab) => {
fire.async(info, tab);
};

Просмотреть файл

@ -40,7 +40,7 @@ this.omnibox = class extends ExtensionAPI {
}
},
onInputStarted: new EventManager(context, "omnibox.onInputStarted", fire => {
onInputStarted: new SingletonEventManager(context, "omnibox.onInputStarted", fire => {
let listener = (eventName) => {
fire.sync();
};
@ -50,7 +50,7 @@ this.omnibox = class extends ExtensionAPI {
};
}).api(),
onInputCancelled: new EventManager(context, "omnibox.onInputCancelled", fire => {
onInputCancelled: new SingletonEventManager(context, "omnibox.onInputCancelled", fire => {
let listener = (eventName) => {
fire.sync();
};
@ -60,7 +60,7 @@ this.omnibox = class extends ExtensionAPI {
};
}).api(),
onInputEntered: new EventManager(context, "omnibox.onInputEntered", fire => {
onInputEntered: new SingletonEventManager(context, "omnibox.onInputEntered", fire => {
let listener = (eventName, text, disposition) => {
fire.sync(text, disposition);
};
@ -81,7 +81,7 @@ this.omnibox = class extends ExtensionAPI {
}
},
onInputChanged: new EventManager(context, "omnibox_internal.onInputChanged", fire => {
onInputChanged: new SingletonEventManager(context, "omnibox_internal.onInputChanged", fire => {
let listener = (eventName, text, id) => {
fire.sync(text, id);
};

Просмотреть файл

@ -269,7 +269,7 @@ this.pageAction = class extends ExtensionAPI {
return {
pageAction: {
onClicked: new EventManager(context, "pageAction.onClicked", fire => {
onClicked: new SingletonEventManager(context, "pageAction.onClicked", fire => {
let listener = (evt, tab) => {
fire.async(tabManager.convert(tab));
};

Просмотреть файл

@ -127,7 +127,7 @@ this.sessions = class extends ExtensionAPI {
return createSession(session, extension, closedId);
},
onChanged: new EventManager(context, "sessions.onChanged", fire => {
onChanged: new SingletonEventManager(context, "sessions.onChanged", fire => {
let observer = () => {
fire.async();
};

Просмотреть файл

@ -100,7 +100,7 @@ this.tabs = class extends ExtensionAPI {
let self = {
tabs: {
onActivated: new EventManager(context, "tabs.onActivated", fire => {
onActivated: new SingletonEventManager(context, "tabs.onActivated", fire => {
let listener = (eventName, event) => {
fire.async(event);
};
@ -111,7 +111,7 @@ this.tabs = class extends ExtensionAPI {
};
}).api(),
onCreated: new EventManager(context, "tabs.onCreated", fire => {
onCreated: new SingletonEventManager(context, "tabs.onCreated", fire => {
let listener = (eventName, event) => {
fire.async(tabManager.convert(event.nativeTab, event.currentTab));
};
@ -128,7 +128,7 @@ this.tabs = class extends ExtensionAPI {
* the tabId in an array to match the API.
* @see https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/Tabs/onHighlighted
*/
onHighlighted: new EventManager(context, "tabs.onHighlighted", fire => {
onHighlighted: new SingletonEventManager(context, "tabs.onHighlighted", fire => {
let listener = (eventName, event) => {
fire.async({tabIds: [event.tabId], windowId: event.windowId});
};
@ -139,7 +139,7 @@ this.tabs = class extends ExtensionAPI {
};
}).api(),
onAttached: new EventManager(context, "tabs.onAttached", fire => {
onAttached: new SingletonEventManager(context, "tabs.onAttached", fire => {
let listener = (eventName, event) => {
fire.async(event.tabId, {newWindowId: event.newWindowId, newPosition: event.newPosition});
};
@ -150,7 +150,7 @@ this.tabs = class extends ExtensionAPI {
};
}).api(),
onDetached: new EventManager(context, "tabs.onDetached", fire => {
onDetached: new SingletonEventManager(context, "tabs.onDetached", fire => {
let listener = (eventName, event) => {
fire.async(event.tabId, {oldWindowId: event.oldWindowId, oldPosition: event.oldPosition});
};
@ -161,7 +161,7 @@ this.tabs = class extends ExtensionAPI {
};
}).api(),
onRemoved: new EventManager(context, "tabs.onRemoved", fire => {
onRemoved: new SingletonEventManager(context, "tabs.onRemoved", fire => {
let listener = (eventName, event) => {
fire.async(event.tabId, {windowId: event.windowId, isWindowClosing: event.isWindowClosing});
};
@ -172,11 +172,11 @@ this.tabs = class extends ExtensionAPI {
};
}).api(),
onReplaced: new EventManager(context, "tabs.onReplaced", fire => {
onReplaced: new SingletonEventManager(context, "tabs.onReplaced", fire => {
return () => {};
}).api(),
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
@ -219,7 +219,7 @@ this.tabs = class extends ExtensionAPI {
};
}).api(),
onUpdated: new EventManager(context, "tabs.onUpdated", fire => {
onUpdated: new SingletonEventManager(context, "tabs.onUpdated", fire => {
const restricted = ["url", "favIconUrl", "title"];
function sanitize(extension, changeInfo) {
@ -679,7 +679,7 @@ this.tabs = class extends ExtensionAPI {
return Promise.resolve();
},
onZoomChange: new EventManager(context, "tabs.onZoomChange", fire => {
onZoomChange: new SingletonEventManager(context, "tabs.onZoomChange", fire => {
let getZoomLevel = browser => {
let {ZoomManager} = browser.ownerGlobal;

Просмотреть файл

@ -122,7 +122,7 @@ class WindowTracker extends WindowTrackerBase {
* @param {function} listener
* The listener function to call when a DOM event is received.
*/
global.WindowEventManager = class extends EventManager {
global.WindowEventManager = class extends SingletonEventManager {
constructor(context, name, event, listener) {
super(context, name, fire => {
let listener2 = listener.bind(null, fire);

Просмотреть файл

@ -39,7 +39,7 @@ this.windows = class extends ExtensionAPI {
fire.async(windowTracker.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;

Просмотреть файл

@ -46,11 +46,11 @@ const {
} = ExtensionUtils;
const {
EventManager,
LocalAPIImplementation,
LocaleData,
NoCloneSpreadArgs,
SchemaAPIInterface,
SingletonEventManager,
} = ExtensionCommon;
const isContentProcess = Services.appinfo.processType == Services.appinfo.PROCESS_TYPE_CONTENT;
@ -133,7 +133,7 @@ class Port {
this.postMessage(json);
},
onDisconnect: new EventManager(this.context, "Port.onDisconnect", fire => {
onDisconnect: new SingletonEventManager(this.context, "Port.onDisconnect", fire => {
return this.registerOnDisconnect(holder => {
let error = holder.deserialize(this.context.cloneScope);
portError = error && this.context.normalizeError(error);
@ -141,7 +141,7 @@ class Port {
});
}).api(),
onMessage: new EventManager(this.context, "Port.onMessage", fire => {
onMessage: new SingletonEventManager(this.context, "Port.onMessage", fire => {
return this.registerOnMessage(holder => {
let msg = holder.deserialize(this.context.cloneScope);
fire.asyncWithoutClone(msg, portObj);
@ -349,7 +349,7 @@ class Messenger {
}
_onMessage(name, filter) {
return new EventManager(this.context, name, fire => {
return new SingletonEventManager(this.context, name, fire => {
let listener = {
messageFilterPermissive: this.optionalFilter,
messageFilterStrict: this.filter,
@ -440,7 +440,7 @@ class Messenger {
}
_onConnect(name, filter) {
return new EventManager(this.context, name, fire => {
return new SingletonEventManager(this.context, name, fire => {
let listener = {
messageFilterPermissive: this.optionalFilter,
messageFilterStrict: this.filter,

Просмотреть файл

@ -1359,7 +1359,7 @@ defineLazyGetter(LocaleData.prototype, "availableLocales", function() {
// This is a generic class for managing event listeners. Example usage:
//
// new EventManager(context, "api.subAPI", fire => {
// new SingletonEventManager(context, "api.subAPI", fire => {
// let listener = (...) => {
// // Fire any listeners registered with addListener.
// fire.async(arg1, arg2);
@ -1378,14 +1378,14 @@ defineLazyGetter(LocaleData.prototype, "availableLocales", function() {
// content process). |name| is for debugging. |register| is a function
// to register the listener. |register| should return an
// unregister function that will unregister the listener.
function EventManager(context, name, register) {
function SingletonEventManager(context, name, register) {
this.context = context;
this.name = name;
this.register = register;
this.unregister = new Map();
}
EventManager.prototype = {
SingletonEventManager.prototype = {
addListener(callback, ...args) {
if (this.unregister.has(callback)) {
return;
@ -1508,12 +1508,12 @@ const stylesheetMap = new DefaultMap(url => {
ExtensionCommon = {
BaseContext,
CanOfAPIs,
EventManager,
LocalAPIImplementation,
LocaleData,
NoCloneSpreadArgs,
SchemaAPIInterface,
SchemaAPIManager,
SingletonEventManager,
SpreadArgs,
ignoreEvent,
stylesheetMap,

Просмотреть файл

@ -136,7 +136,7 @@ this.alarms = class extends ExtensionAPI {
return Promise.resolve(cleared);
},
onAlarm: new EventManager(context, "alarms.onAlarm", fire => {
onAlarm: new SingletonEventManager(context, "alarms.onAlarm", fire => {
let callback = alarm => {
fire.sync(alarm.data);
};

Просмотреть файл

@ -168,7 +168,7 @@ this.test = class extends ExtensionAPI {
}
},
onMessage: new EventManager(context, "test.onMessage", fire => {
onMessage: new SingletonEventManager(context, "test.onMessage", fire => {
let handler = (event, ...args) => {
fire.async(...args);
};

Просмотреть файл

@ -4,10 +4,10 @@ Cu.import("resource://gre/modules/ExtensionCommon.jsm");
// These are defined on "global" which is used for the same scopes as the other
// ext-c-*.js files.
/* exported EventManager */
/* global EventManager: false */
/* exported SingletonEventManager */
/* global SingletonEventManager: false */
global.EventManager = ExtensionCommon.EventManager;
global.SingletonEventManager = ExtensionCommon.SingletonEventManager;
global.initializeBackgroundPage = (contentWindow) => {
// Override the `alert()` method inside background windows;

Просмотреть файл

@ -378,7 +378,7 @@ this.cookies = class extends ExtensionAPI {
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);

Просмотреть файл

@ -738,7 +738,7 @@ this.downloads = class extends ExtensionAPI {
// ...
// }
onChanged: new EventManager(context, "downloads.onChanged", fire => {
onChanged: new SingletonEventManager(context, "downloads.onChanged", fire => {
const handler = (what, item) => {
let changes = {};
const noundef = val => (val === undefined) ? null : val;
@ -766,7 +766,7 @@ this.downloads = class extends ExtensionAPI {
};
}).api(),
onCreated: new EventManager(context, "downloads.onCreated", fire => {
onCreated: new SingletonEventManager(context, "downloads.onCreated", fire => {
const handler = (what, item) => {
fire.async(item.serialize());
};
@ -780,7 +780,7 @@ this.downloads = class extends ExtensionAPI {
};
}).api(),
onErased: new EventManager(context, "downloads.onErased", fire => {
onErased: new SingletonEventManager(context, "downloads.onErased", fire => {
const handler = (what, item) => {
fire.async(item.id);
};

Просмотреть файл

@ -76,7 +76,7 @@ this.idle = class extends ExtensionAPI {
setDetectionInterval: function(detectionIntervalInSeconds) {
setDetectionInterval(extension, context, detectionIntervalInSeconds);
},
onStateChanged: new EventManager(context, "idle.onStateChanged", fire => {
onStateChanged: new SingletonEventManager(context, "idle.onStateChanged", fire => {
let listener = (event, data) => {
fire.sync(data);
};

Просмотреть файл

@ -224,7 +224,7 @@ this.management = class extends ExtensionAPI {
addon.userDisabled = !enabled;
},
onDisabled: new EventManager(context, "management.onDisabled", fire => {
onDisabled: new SingletonEventManager(context, "management.onDisabled", fire => {
let listener = (event, data) => {
fire.async(data);
};
@ -235,7 +235,7 @@ this.management = class extends ExtensionAPI {
};
}).api(),
onEnabled: new EventManager(context, "management.onEnabled", fire => {
onEnabled: new SingletonEventManager(context, "management.onEnabled", fire => {
let listener = (event, data) => {
fire.async(data);
};
@ -246,7 +246,7 @@ this.management = class extends ExtensionAPI {
};
}).api(),
onInstalled: new EventManager(context, "management.onInstalled", fire => {
onInstalled: new SingletonEventManager(context, "management.onInstalled", fire => {
let listener = (event, data) => {
fire.async(data);
};
@ -257,7 +257,7 @@ this.management = class extends ExtensionAPI {
};
}).api(),
onUninstalled: new EventManager(context, "management.onUninstalled", fire => {
onUninstalled: new SingletonEventManager(context, "management.onUninstalled", fire => {
let listener = (event, data) => {
fire.async(data);
};

Просмотреть файл

@ -133,7 +133,7 @@ this.notifications = class extends ExtensionAPI {
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.async(notificationId, true);
@ -145,7 +145,7 @@ this.notifications = class extends ExtensionAPI {
};
}).api(),
onClicked: new EventManager(context, "notifications.onClicked", fire => {
onClicked: new SingletonEventManager(context, "notifications.onClicked", fire => {
let listener = (event, notificationId) => {
fire.async(notificationId, true);
};

Просмотреть файл

@ -52,7 +52,7 @@ this.proxy = class extends ExtensionAPI {
this.register(url);
},
onProxyError: new EventManager(context, "proxy.onProxyError", fire => {
onProxyError: new SingletonEventManager(context, "proxy.onProxyError", fire => {
let listener = (name, error) => {
fire.async(error);
};

Просмотреть файл

@ -19,7 +19,7 @@ this.runtime = class extends ExtensionAPI {
let {extension} = context;
return {
runtime: {
onStartup: new EventManager(context, "runtime.onStartup", fire => {
onStartup: new SingletonEventManager(context, "runtime.onStartup", fire => {
if (context.incognito) {
// This event should not fire if we are operating in a private profile.
return () => {};
@ -35,7 +35,7 @@ this.runtime = class extends ExtensionAPI {
};
}).api(),
onInstalled: new EventManager(context, "runtime.onInstalled", fire => {
onInstalled: new SingletonEventManager(context, "runtime.onInstalled", fire => {
let temporary = !!extension.addonData.temporarilyInstalled;
let listener = () => {
@ -63,7 +63,7 @@ this.runtime = class extends ExtensionAPI {
};
}).api(),
onUpdateAvailable: new EventManager(context, "runtime.onUpdateAvailable", fire => {
onUpdateAvailable: new SingletonEventManager(context, "runtime.onUpdateAvailable", fire => {
let instanceID = extension.addonData.instanceID;
AddonManager.addUpgradeListener(instanceID, upgrade => {
extension.upgrade = upgrade;

Просмотреть файл

@ -63,7 +63,7 @@ this.storage = class extends ExtensionAPI {
},
},
onChanged: new EventManager(context, "storage.onChanged", fire => {
onChanged: new SingletonEventManager(context, "storage.onChanged", fire => {
let listenerLocal = changes => {
fire.async(changes, "local");
};

Просмотреть файл

@ -5,19 +5,19 @@
/* exported getCookieStoreIdForTab, getCookieStoreIdForContainer,
getContainerForCookieStoreId,
isValidCookieStoreId, isContainerCookieStoreId,
EventManager */
SingletonEventManager */
/* global getCookieStoreIdForTab:false, getCookieStoreIdForContainer:false,
getContainerForCookieStoreId: false,
isValidCookieStoreId:false, isContainerCookieStoreId:false,
isDefaultCookieStoreId: false, isPrivateCookieStoreId:false,
EventManager: false */
SingletonEventManager: false */
XPCOMUtils.defineLazyModuleGetter(this, "ContextualIdentityService",
"resource://gre/modules/ContextualIdentityService.jsm");
Cu.import("resource://gre/modules/ExtensionCommon.jsm");
global.EventManager = ExtensionCommon.EventManager;
global.SingletonEventManager = ExtensionCommon.SingletonEventManager;
/* globals DEFAULT_STORE, PRIVATE_STORE, CONTAINER_STORE */

Просмотреть файл

@ -144,10 +144,10 @@ function WebNavigationEventManager(context, eventName) {
};
};
return EventManager.call(this, context, name, register);
return SingletonEventManager.call(this, context, name, register);
}
WebNavigationEventManager.prototype = Object.create(EventManager.prototype);
WebNavigationEventManager.prototype = Object.create(SingletonEventManager.prototype);
const convertGetFrameResult = (tabId, data) => {
return {
@ -165,7 +165,7 @@ this.webNavigation = class extends ExtensionAPI {
return {
webNavigation: {
onTabReplaced: new EventManager(context, "webNavigation.onTabReplaced", fire => {
onTabReplaced: new SingletonEventManager(context, "webNavigation.onTabReplaced", fire => {
return () => {};
}).api(),
onBeforeNavigate: new WebNavigationEventManager(context, "onBeforeNavigate").api(),

Просмотреть файл

@ -11,7 +11,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "WebRequest",
"resource://gre/modules/WebRequest.jsm");
// EventManager-like class specifically for WebRequest. Inherits from
// EventManager. Takes care of converting |details| parameter
// SingletonEventManager. Takes care of converting |details| parameter
// when invoking listeners.
function WebRequestEventManager(context, eventName) {
let name = `webRequest.${eventName}`;
@ -118,10 +118,10 @@ function WebRequestEventManager(context, eventName) {
};
};
return EventManager.call(this, context, name, register);
return SingletonEventManager.call(this, context, name, register);
}
WebRequestEventManager.prototype = Object.create(EventManager.prototype);
WebRequestEventManager.prototype = Object.create(SingletonEventManager.prototype);
this.webRequest = class extends ExtensionAPI {
getAPI(context) {

Просмотреть файл

@ -8,7 +8,7 @@ Cu.import("resource://gre/modules/ExtensionCommon.jsm");
var {
BaseContext,
EventManager,
SingletonEventManager,
} = ExtensionCommon;
class StubContext extends BaseContext {
@ -60,10 +60,10 @@ add_task(async function test_post_unload_promises() {
add_task(async function test_post_unload_listeners() {
let context = new StubContext();
let fire;
let manager = new EventManager(context, "EventManager", _fire => {
fire = () => {
_fire.async();
let fireSingleton;
let onSingleton = new SingletonEventManager(context, "onSingleton", fire => {
fireSingleton = () => {
fire.async();
};
return () => {};
});
@ -73,17 +73,17 @@ add_task(async function test_post_unload_listeners() {
};
// Check that event listeners isn't called after it has been removed.
manager.addListener(fail);
onSingleton.addListener(fail);
let promise = new Promise(resolve => manager.addListener(resolve));
let promise = new Promise(resolve => onSingleton.addListener(resolve));
fire();
fireSingleton("onSingleton");
// The `fireSingleton` call ia dispatched asynchronously, so it won't
// have fired by this point. The `fail` listener that we remove now
// should not be called, even though the event has already been
// enqueued.
manager.removeListener(fail);
onSingleton.removeListener(fail);
// Wait for the remaining listener to be called, which should always
// happen after the `fail` listener would normally be called.
@ -91,15 +91,15 @@ add_task(async function test_post_unload_listeners() {
// Check that the event listener isn't called after the context has
// unloaded.
manager.addListener(fail);
onSingleton.addListener(fail);
// The `fire` callback always dispatches events
// asynchronously, so we need to test that any pending event callbacks
// aren't fired after the context unloads. We also need to test that
// any `fire` calls that happen *after* the context is unloaded also
// do not trigger callbacks.
fire();
Promise.resolve().then(fire);
fireSingleton("onSingleton");
Promise.resolve("onSingleton").then(fireSingleton);
context.unload();