| Index: ext/background.js |
| =================================================================== |
| --- a/ext/background.js |
| +++ b/ext/background.js |
| @@ -12,91 +12,67 @@ |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| */ |
| let {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm", null); |
| let {Services} = Cu.import("resource://gre/modules/Services.jsm", null); |
| -let { |
| - _MessageProxy: MessageProxy, |
| - _EventTarget: EventTarget, |
| - _getSender: getSender |
| -} = require("ext_common"); |
| -exports.onMessage = new EventTarget(); |
| -let messageProxy = new MessageProxy( |
| - Cc["@mozilla.org/globalmessagemanager;1"] |
| - .getService(Ci.nsIMessageListenerManager), |
| - exports.onMessage); |
| -onShutdown.add(function() |
| +let {_EventTarget: EventTarget} = require("ext_common"); |
| +let {port} = require("messaging"); |
| + |
| +exports.onMessage = new EventTarget(port); |
| + |
| +function Page(windowID) |
| { |
| - messageProxy._disconnect(); |
| -}); |
| - |
| -function Page(sender) |
| -{ |
| - this._sender = sender; |
| + this._windowID = windowID; |
| } |
| Page.prototype = { |
| - sendMessage: function(message) |
| + sendMessage: function(payload) |
| { |
| - if (this._sender) |
| - this._sender.sendAsyncMessage("AdblockPlus:Message", {payload: message}); |
| + port.emit("ext_message", {targetID: this._windowID, payload}); |
| } |
| }; |
| exports.Page = Page; |
| function PageMap() |
| { |
| this._map = new Map(); |
| - Services.obs.addObserver(this, "message-manager-disconnect", true); |
| - onShutdown.add(function() |
| - { |
| - Services.obs.removeObserver(this, "message-manager-disconnect"); |
| - }.bind(this)); |
| + port.on("ext_disconnect", windowID => this._map.delete(windowID)); |
| } |
| PageMap.prototype = { |
| - QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]), |
| - |
| - observe: function(subject, topic, data) |
| - { |
| - if (topic == "message-manager-disconnect") |
| - this._map.delete(subject); |
| - }, |
| - |
| keys: function() |
| { |
| let result = []; |
| - for (let sender of this._map.keys()) |
| - result.push(new Page(sender)); |
| + for (let windowID of this._map.keys()) |
| + result.push(new Page(windowID)); |
| return result; |
| }, |
| get: function(page) |
| { |
| - return this._map.get(page._sender); |
| + return this._map.get(page._windowID); |
| }, |
| set: function(page, value) |
| { |
| - if (page._sender) |
| - this._map.set(page._sender, value); |
| + this._map.set(page._windowID, value); |
| }, |
| has: function(page) |
| { |
| - return this._map.has(page._sender); |
| + return this._map.has(page._windowID); |
| }, |
| delete: function(page) |
| { |
| - this._map.delete(page._sender); |
| + return this._map.delete(page._windowID); |
| } |
| }; |
| exports.PageMap = PageMap; |
| exports.showOptions = function() |
| { |
| require("ui").UI.openFiltersDialog(); |
| }; |