Index: templates/bootstrap.js.tmpl |
diff --git a/templates/bootstrap.js.tmpl b/templates/bootstrap.js.tmpl |
deleted file mode 100644 |
index 42eaef49cefa9bbd87151a4dcc84310bf9b544f7..0000000000000000000000000000000000000000 |
--- a/templates/bootstrap.js.tmpl |
+++ /dev/null |
@@ -1,196 +0,0 @@ |
-/* This Source Code Form is subject to the terms of the Mozilla Public |
- * License, v. 2.0. If a copy of the MPL was not distributed with this |
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
- |
-const Cc = Components.classes; |
-const Ci = Components.interfaces; |
-const Cr = Components.results; |
-const Cu = Components.utils; |
- |
-let {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); |
- |
-Cu.importGlobalProperties(["atob", "btoa", "File", "URL", |
- "TextDecoder", "TextEncoder", "XMLHttpRequest"]); |
- |
-let addonData = null; |
- |
-function startup(params, reason) |
-{ |
- addonData = params; |
- |
- {%- if hasChromeRequires %} |
- Services.obs.addObserver(RequireObserver, "{{metadata.get('general', 'basename')}}-require", true); |
- onShutdown.add(function() |
- { |
- Services.obs.removeObserver(RequireObserver, "{{metadata.get('general', 'basename')}}-require"); |
- }); |
- {%- set hasShutdownHandlers = True %} |
- {%- endif %} |
- |
- {%- if hasWebExtension %} |
- let port = params.webExtension.startup().then(({browser}) => |
- { |
- return new Promise((resolve, reject) => |
- { |
- browser.runtime.onConnect.addListener(resolve); |
- }); |
- }); |
- require.scopes.webextension = {exports: port}; |
- {%- endif %} |
- |
- require("main"); |
-} |
- |
-function shutdown(params, reason) |
-{ |
- {%- if chromeWindows %} |
- let windowNames = {{chromeWindows|json}}; |
- for (let i = 0; i < windowNames.length; i++) |
- { |
- let enumerator = Services.wm.getEnumerator(windowNames[i]); |
- while (enumerator.hasMoreElements()) |
- { |
- let window = enumerator.getNext().QueryInterface(Ci.nsIDOMWindow); |
- window.setTimeout("window.close()", 0); // Closing immediately might not work due to modal windows |
- try |
- { |
- window.close(); |
- } catch(e) {} |
- } |
- } |
- {%- endif %} |
- |
- {%- if hasShutdownHandlers %} |
- onShutdown.done = true; |
- for (let i = shutdownHandlers.length - 1; i >= 0; i --) |
- { |
- try |
- { |
- shutdownHandlers[i](); |
- } |
- catch (e) |
- { |
- Cu.reportError(e); |
- } |
- } |
- shutdownHandlers = null; |
- {%- endif %} |
- |
- // Make sure to release our ties to the modules even if the sandbox cannot be |
- // released for some reason. |
- for (let key in require.scopes) |
- { |
- let scope = require.scopes[key]; |
- let list = Object.keys(scope); |
- for (let i = 0; i < list.length; i++) |
- scope[list[i]] = null; |
- } |
- require.scopes = null; |
- addonData = null; |
-} |
- |
-function install(params, reason) {} |
- |
-function uninstall(params, reason) |
-{ |
- {%- if 'currentVersion' in jsonRequires.get('prefs.json', {}).get('defaults', {}) %} |
- const ADDON_UNINSTALL = 6; // https://developer.mozilla.org/en/Extensions/Bootstrapped_extensions#Reason_constants |
- if (reason == ADDON_UNINSTALL) |
- { |
- // Users often uninstall/reinstall extension to "fix" issues. Clear current |
- // version number on uninstall to rerun first-run actions in this scenario. |
- Services.prefs.clearUserPref("extensions.{{metadata.get('general', 'basename')}}.currentVersion"); |
- } |
- {%- endif %} |
-} |
- |
-{%- if hasShutdownHandlers %} |
-let shutdownHandlers = []; |
-let onShutdown = |
-{ |
- done: false, |
- add: function(handler) |
- { |
- if (shutdownHandlers.indexOf(handler) < 0) |
- shutdownHandlers.push(handler); |
- }, |
- remove: function(handler) |
- { |
- let index = shutdownHandlers.indexOf(handler); |
- if (index >= 0) |
- shutdownHandlers.splice(index, 1); |
- } |
-}; |
-{%- endif %} |
- |
-function require(module) |
-{ |
- let scopes = require.scopes; |
- if (!(module in scopes)) |
- { |
- {%- if 'info' in requires %} |
- if (module == "info") |
- { |
- let applications = {{applications|json}}; |
- let appInfo = Services.appinfo; |
- |
- scopes[module] = {}; |
- scopes[module].exports = |
- { |
- addonID: addonData.id, |
- addonVersion: addonData.version, |
- addonRoot: addonData.resourceURI.spec, |
- addonName: "{{metadata.get('general', 'basename')}}", |
- application: (appInfo.ID in applications ? applications[appInfo.ID] : "other"), |
- applicationVersion: appInfo.version, |
- platform: "gecko", |
- platformVersion: appInfo.platformVersion |
- }; |
- } |
- else |
- { |
- {%- endif %} |
- let url = addonData.resourceURI.spec + "lib/" + module + ".js"; |
- scopes[module] = { |
- Cc, Ci, Cr, Cu, atob, btoa, File, URL, TextDecoder, TextEncoder, |
- XMLHttpRequest, require, |
- {% if hasShutdownHandlers %} |
- onShutdown, |
- {% endif %} |
- exports: {}}; |
- {%- if multicompartment %} |
- let principal = Cc["@mozilla.org/systemprincipal;1"].getService(Ci.nsIPrincipal); |
- scopes[module] = new Cu.Sandbox(principal, { |
- sandboxName: url, |
- sandboxPrototype: scopes[module], |
- wantXrays: false |
- }); |
- {%- endif %} |
- Services.scriptloader.loadSubScript(url, scopes[module]); |
- {%- if 'info' in requires %} |
- } |
- {%- endif %} |
- } |
- return scopes[module].exports; |
-} |
-require.scopes = Object.create(null); |
-{%- for name, data in jsonRequires.iteritems() %} |
-require.scopes[{{name|json}}] = {exports: {{data|json}}}; |
-{%- endfor %} |
- |
-{%- if hasChromeRequires %} |
-Cu.import("resource://gre/modules/XPCOMUtils.jsm"); |
- |
-let RequireObserver = |
-{ |
- observe: function(subject, topic, data) |
- { |
- if (topic == "{{metadata.get('general', 'basename')}}-require") |
- { |
- subject.wrappedJSObject.exports = require(data); |
- } |
- }, |
- |
- QueryInterface: XPCOMUtils.generateQI([Ci.nsISupportsWeakReference, Ci.nsIObserver]) |
-}; |
-{%- endif %} |