/* * Copyright 2014 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 'use strict'; (function contentScriptClosure() { const Cc = Components.classes; const Ci = Components.interfaces; const Cm = Components.manager; const Cu = Components.utils; const Cr = Components.results; // we need to use closure here -- we are running in the global context Cu.import('resource://gre/modules/Services.jsm'); var isRemote = Services.appinfo.processType === Services.appinfo.PROCESS_TYPE_CONTENT; var isStarted = false; function startup() { if (isStarted) { return; } isStarted = true; Cu.import('resource://shumway/ShumwayBootstrapUtils.jsm'); ShumwayBootstrapUtils.register(); } function shutdown() { if (!isStarted) { return; } isStarted = false; ShumwayBootstrapUtils.unregister(); Cu.unload('resource://shumway/ShumwayBootstrapUtils.jsm'); } function updateSettings() { let mm = Cc["@mozilla.org/childprocessmessagemanager;1"] .getService(Ci.nsISyncMessageSender); var results = mm.sendSyncMessage('Shumway:Chrome:isEnabled'); var isEnabled = results.some(function (item) { return item; }); if (isEnabled) { startup(); } else { shutdown(); } } if (isRemote && typeof ShumwayBootstrapUtils !== 'undefined') { // Treat content as non-remote when bootstrap.js or ShumwayUtils.jsm // already registered the Shumway components for current content scope. isRemote = false; } if (isRemote) { addMessageListener('Shumway:Child:refreshSettings', updateSettings); updateSettings(); addMessageListener('Shumway:Child:shutdown', function shutdownListener(e) { removeMessageListener('Shumway:Child:refreshSettings', updateSettings); removeMessageListener('Shumway:Child:shutdown', shutdownListener); shutdown(); }); } })();