Index: ext/common.js |
=================================================================== |
--- a/ext/common.js |
+++ b/ext/common.js |
@@ -1,6 +1,6 @@ |
/* |
* This file is part of Adblock Plus <https://adblockplus.org/>, |
- * Copyright (C) 2006-2016 Eyeo GmbH |
+ * Copyright (C) 2006-2017 eyeo GmbH |
* |
* Adblock Plus is free software: you can redistribute it and/or modify |
* it under the terms of the GNU General Public License version 3 as |
@@ -17,37 +17,65 @@ |
"use strict"; |
+(function() |
{ |
// Both Edge and Mozilla Web Extensions use the namespace 'browser' instead of 'chrome' |
if (typeof browser != 'undefined') |
window.chrome = window.browser; |
window.ext = {}; |
+ |
let EventTarget = ext._EventTarget = function() |
{ |
- this._listeners = []; |
+ this._listeners = new Set(); |
}; |
EventTarget.prototype = { |
addListener(listener) |
{ |
- if (this._listeners.indexOf(listener) == -1) |
- this._listeners.push(listener); |
+ this._listeners.add(listener); |
}, |
removeListener(listener) |
{ |
- let idx = this._listeners.indexOf(listener); |
- if (idx != -1) |
- this._listeners.splice(idx, 1); |
+ this._listeners.delete(listener); |
}, |
- _dispatch() |
+ _dispatch(...args) |
{ |
let results = []; |
- let listeners = this._listeners.slice(); |
- for (let listener of listeners) |
- results.push(listener.apply(null, arguments)); |
+ for (let listener of this._listeners) |
+ results.push(listener(...args)); |
return results; |
} |
}; |
-} |
+ |
+ // Workaround since HTMLCollection and NodeList didn't have iterator support |
+ // before Chrome 51. |
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=401699 |
+ let arrayIterator = Array.prototype[Symbol.iterator]; |
+ if (!(Symbol.iterator in HTMLCollection.prototype)) |
+ HTMLCollection.prototype[Symbol.iterator] = arrayIterator; |
+ if (!(Symbol.iterator in NodeList.prototype)) |
+ NodeList.prototype[Symbol.iterator] = arrayIterator; |
+ |
+ /* Message passing */ |
+ |
+ ext.onMessage = new ext._EventTarget(); |
+ |
+ |
+ /* Background page */ |
+ |
+ ext.backgroundPage = { |
+ sendMessage: chrome.runtime.sendMessage, |
+ getWindow() |
+ { |
+ return chrome.extension.getBackgroundPage(); |
+ } |
+ }; |
+ |
+ |
+ /* Utils */ |
+ |
+ ext.getURL = chrome.extension.getURL; |
+ ext.i18n = chrome.i18n; |
+}()); |