Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: templates/bootstrap.js.tmpl

Issue 29562599: Issue 5751 - Removing legacy gecko support (Closed)
Patch Set: Rebase against current master ( 489:293593da6033 ) Created Oct. 10, 2017, 9:25 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 const Cc = Components.classes;
6 const Ci = Components.interfaces;
7 const Cr = Components.results;
8 const Cu = Components.utils;
9
10 let {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
11
12 Cu.importGlobalProperties(["atob", "btoa", "File", "URL",
13 "TextDecoder", "TextEncoder", "XMLHttpRequest"]);
14
15 let addonData = null;
16
17 function startup(params, reason)
18 {
19 addonData = params;
20
21 {%- if hasChromeRequires %}
22 Services.obs.addObserver(RequireObserver, "{{metadata.get('general', 'basename ')}}-require", true);
23 onShutdown.add(function()
24 {
25 Services.obs.removeObserver(RequireObserver, "{{metadata.get('general', 'bas ename')}}-require");
26 });
27 {%- set hasShutdownHandlers = True %}
28 {%- endif %}
29
30 {%- if hasWebExtension %}
31 let port = params.webExtension.startup().then(({browser}) =>
32 {
33 return new Promise((resolve, reject) =>
34 {
35 browser.runtime.onConnect.addListener(resolve);
36 });
37 });
38 require.scopes.webextension = {exports: port};
39 {%- endif %}
40
41 require("main");
42 }
43
44 function shutdown(params, reason)
45 {
46 {%- if chromeWindows %}
47 let windowNames = {{chromeWindows|json}};
48 for (let i = 0; i < windowNames.length; i++)
49 {
50 let enumerator = Services.wm.getEnumerator(windowNames[i]);
51 while (enumerator.hasMoreElements())
52 {
53 let window = enumerator.getNext().QueryInterface(Ci.nsIDOMWindow);
54 window.setTimeout("window.close()", 0); // Closing immediately might not w ork due to modal windows
55 try
56 {
57 window.close();
58 } catch(e) {}
59 }
60 }
61 {%- endif %}
62
63 {%- if hasShutdownHandlers %}
64 onShutdown.done = true;
65 for (let i = shutdownHandlers.length - 1; i >= 0; i --)
66 {
67 try
68 {
69 shutdownHandlers[i]();
70 }
71 catch (e)
72 {
73 Cu.reportError(e);
74 }
75 }
76 shutdownHandlers = null;
77 {%- endif %}
78
79 // Make sure to release our ties to the modules even if the sandbox cannot be
80 // released for some reason.
81 for (let key in require.scopes)
82 {
83 let scope = require.scopes[key];
84 let list = Object.keys(scope);
85 for (let i = 0; i < list.length; i++)
86 scope[list[i]] = null;
87 }
88 require.scopes = null;
89 addonData = null;
90 }
91
92 function install(params, reason) {}
93
94 function uninstall(params, reason)
95 {
96 {%- if 'currentVersion' in jsonRequires.get('prefs.json', {}).get('defaults', {}) %}
97 const ADDON_UNINSTALL = 6; // https://developer.mozilla.org/en/Extensions/Boo tstrapped_extensions#Reason_constants
98 if (reason == ADDON_UNINSTALL)
99 {
100 // Users often uninstall/reinstall extension to "fix" issues. Clear current
101 // version number on uninstall to rerun first-run actions in this scenario.
102 Services.prefs.clearUserPref("extensions.{{metadata.get('general', 'basename ')}}.currentVersion");
103 }
104 {%- endif %}
105 }
106
107 {%- if hasShutdownHandlers %}
108 let shutdownHandlers = [];
109 let onShutdown =
110 {
111 done: false,
112 add: function(handler)
113 {
114 if (shutdownHandlers.indexOf(handler) < 0)
115 shutdownHandlers.push(handler);
116 },
117 remove: function(handler)
118 {
119 let index = shutdownHandlers.indexOf(handler);
120 if (index >= 0)
121 shutdownHandlers.splice(index, 1);
122 }
123 };
124 {%- endif %}
125
126 function require(module)
127 {
128 let scopes = require.scopes;
129 if (!(module in scopes))
130 {
131 {%- if 'info' in requires %}
132 if (module == "info")
133 {
134 let applications = {{applications|json}};
135 let appInfo = Services.appinfo;
136
137 scopes[module] = {};
138 scopes[module].exports =
139 {
140 addonID: addonData.id,
141 addonVersion: addonData.version,
142 addonRoot: addonData.resourceURI.spec,
143 addonName: "{{metadata.get('general', 'basename')}}",
144 application: (appInfo.ID in applications ? applications[appInfo.ID] : "o ther"),
145 applicationVersion: appInfo.version,
146 platform: "gecko",
147 platformVersion: appInfo.platformVersion
148 };
149 }
150 else
151 {
152 {%- endif %}
153 let url = addonData.resourceURI.spec + "lib/" + module + ".js";
154 scopes[module] = {
155 Cc, Ci, Cr, Cu, atob, btoa, File, URL, TextDecoder, TextEncoder,
156 XMLHttpRequest, require,
157 {% if hasShutdownHandlers %}
158 onShutdown,
159 {% endif %}
160 exports: {}};
161 {%- if multicompartment %}
162 let principal = Cc["@mozilla.org/systemprincipal;1"].getService(Ci.nsIPrin cipal);
163 scopes[module] = new Cu.Sandbox(principal, {
164 sandboxName: url,
165 sandboxPrototype: scopes[module],
166 wantXrays: false
167 });
168 {%- endif %}
169 Services.scriptloader.loadSubScript(url, scopes[module]);
170 {%- if 'info' in requires %}
171 }
172 {%- endif %}
173 }
174 return scopes[module].exports;
175 }
176 require.scopes = Object.create(null);
177 {%- for name, data in jsonRequires.iteritems() %}
178 require.scopes[{{name|json}}] = {exports: {{data|json}}};
179 {%- endfor %}
180
181 {%- if hasChromeRequires %}
182 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
183
184 let RequireObserver =
185 {
186 observe: function(subject, topic, data)
187 {
188 if (topic == "{{metadata.get('general', 'basename')}}-require")
189 {
190 subject.wrappedJSObject.exports = require(data);
191 }
192 },
193
194 QueryInterface: XPCOMUtils.generateQI([Ci.nsISupportsWeakReference, Ci.nsIObse rver])
195 };
196 {%- endif %}
OLDNEW
« build.py ('K') | « releaseAutomation.py ('k') | templates/install.rdf.tmpl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld