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