/******************************************************************************* µBlock - a browser extension to block requests. Copyright (C) 2014 The µBlock authors This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see {http://www.gnu.org/licenses/}. Home: https://github.com/gorhill/uBlock */ /* globals Services, sendAsyncMessage, addMessageListener, removeMessageListener */ /******************************************************************************/ // https://bugzil.la/673569 (function(frameScriptContext) { 'use strict'; /******************************************************************************/ let appName = Components.stack.filename.match(/:\/\/([^\/]+)/)[1]; let listeners = {}; Components.utils['import'](Components.stack.filename.replace('Script', 'Module'), {}); /******************************************************************************/ frameScriptContext[appName + '_addMessageListener'] = function(id, fn) { frameScriptContext[appName + '_removeMessageListener'](id); listeners[id] = function(msg) { fn(msg.data); }; addMessageListener(id, listeners[id]); }; frameScriptContext[appName + '_removeMessageListener'] = function(id) { if (listeners[id]) { removeMessageListener(id, listeners[id]); } delete listeners[id]; }; /******************************************************************************/ addMessageListener(appName + ':broadcast', function(msg) { for (let id in listeners) { listeners[id](msg); } }); /******************************************************************************/ })(this); /******************************************************************************/