Merge lp:~chrisccoulson/ubufox/ff-4.0 into lp:~asac/ubufox/main

Proposed by Chris Coulson
Status: Needs review
Proposed branch: lp:~chrisccoulson/ubufox/ff-4.0
Merge into: lp:~asac/ubufox/main
Diff against target: 1712 lines (+502/-433)
40 files modified
chrome.manifest (+4/-3)
components/aboutStartpage.js (+8/-5)
content/overlay.js (+0/-91)
content/pluginInstallerDatasource.js (+35/-23)
content/pluginInstallerService.js (+301/-59)
content/pluginInstallerWizard.js (+106/-100)
content/pluginInstallerWizard.xul (+3/-3)
content/ubuntuAddonsOverlay.ffox2.xul (+0/-53)
content/ubuntuAddonsOverlay.xul (+0/-53)
content/updateRestart.js (+11/-14)
defaults/preferences/ubufox-pfs.js (+1/-1)
install.rdf (+3/-2)
locale/af-ZA/ubufox.properties (+1/-1)
locale/ar/ubufox.properties (+1/-1)
locale/bg/ubufox.properties (+1/-1)
locale/ca/ubufox.properties (+1/-1)
locale/cs-CZ/ubufox.properties (+1/-1)
locale/de-DE/ubufox.properties (+1/-1)
locale/el-GR/ubufox.properties (+1/-1)
locale/en-US/ubufox.properties (+1/-1)
locale/es/ubufox.properties (+1/-1)
locale/eu/ubufox.properties (+1/-1)
locale/fi-FI/ubufox.properties (+1/-1)
locale/fr/ubufox.properties (+1/-1)
locale/gl-ES/ubufox.properties (+1/-1)
locale/hu-HU/ubufox.properties (+1/-1)
locale/it-IT/ubufox.properties (+1/-1)
locale/ja/ubufox.properties (+1/-1)
locale/lt-LT/ubufox.properties (+1/-1)
locale/nl-NL/ubufox.properties (+1/-1)
locale/pl-PL/ubufox.properties (+1/-1)
locale/pt-BR/ubufox.properties (+1/-1)
locale/ro/ubufox.properties (+1/-1)
locale/ru-RU/ubufox.properties (+1/-1)
locale/sl-SI/ubufox.properties (+1/-1)
locale/sv-SE/ubufox.properties (+1/-1)
locale/uk/ubufox.properties (+1/-1)
locale/zh-CN/ubufox.properties (+1/-1)
pfs/db/sources.list.10.10 (+2/-0)
pfs/db/sources.list.11.04 (+2/-0)
To merge this branch: bzr merge lp:~chrisccoulson/ubufox/ff-4.0
Reviewer Review Type Date Requested Status
Alexander Sack Pending
Review via email: mp+40373@code.launchpad.net
To post a comment you must log in.
lp:~chrisccoulson/ubufox/ff-4.0 updated
217. By Chris Coulson

* Look in the new location for the restart-required trigger, it has moved to a location not monitored by update-notifier now, so we only get the restart required notification in the browser

218. By Chris Coulson

* Merge the plugin finder code from Firefox 4. This now uses AddonManager, so the
  MinVersion needs to be bumped
* Drop the FF2.0 specific code

219. By Chris Coulson

* Drop the AddonsOverlay and associated code, this hasn't worked for several releases
  since we started using software-center, and nobody really noticed so far. We can reimplement this at a later date if wanted, but
  it throws JS exceptions when loading in FF4.0 now

220. By Chris Coulson

* Add sources.list for 10.10 and 11.04
* Ensure the wizard jumps to the last page when no plugins are found, by not checking the undefined mPluginInfoAptArrayLength
* Fix a missing-brace error

221. By Chris Coulson

* Make createPluginSetGroupBox work properly
* Fix a typo
* Fix use of the aptPlugins array

222. By Chris Coulson

* Ensure that licenseAccepted is always defind, so we don't fail to install a plugin that has no licenseURL

223. By Chris Coulson

* Specify for the extension to be unpacked by the installer. Without this, the prefs aren't used

224. By Chris Coulson

* Get the distributionID field for the pfs URL from the preferences, rather than hard-coding a value

Unmerged revisions

224. By Chris Coulson

* Get the distributionID field for the pfs URL from the preferences, rather than hard-coding a value

223. By Chris Coulson

* Specify for the extension to be unpacked by the installer. Without this, the prefs aren't used

222. By Chris Coulson

* Ensure that licenseAccepted is always defind, so we don't fail to install a plugin that has no licenseURL

221. By Chris Coulson

* Make createPluginSetGroupBox work properly
* Fix a typo
* Fix use of the aptPlugins array

220. By Chris Coulson

* Add sources.list for 10.10 and 11.04
* Ensure the wizard jumps to the last page when no plugins are found, by not checking the undefined mPluginInfoAptArrayLength
* Fix a missing-brace error

219. By Chris Coulson

* Drop the AddonsOverlay and associated code, this hasn't worked for several releases
  since we started using software-center, and nobody really noticed so far. We can reimplement this at a later date if wanted, but
  it throws JS exceptions when loading in FF4.0 now

218. By Chris Coulson

* Merge the plugin finder code from Firefox 4. This now uses AddonManager, so the
  MinVersion needs to be bumped
* Drop the FF2.0 specific code

217. By Chris Coulson

* Look in the new location for the restart-required trigger, it has moved to a location not monitored by update-notifier now, so we only get the restart required notification in the browser

216. By Chris Coulson

* In the restart notifier, don't hardcode a list of filenames for different browser versions, but just use MOZ_APP_LAUNCHER instead. This will indirectly fix LP: #511250 and should prevent it from happening again
  - update content/updateRestart.js

215. By Chris Coulson

* First cut at adding Firefox 4.0 support:
  - Rename AboutHome to AboutStartup, and have it handle about:startup now (to not conflict with the new about:home handler in Firefox
  - Set default home page to about:startpage
  - Add support for the XPCOM changes in Gecko 2.0

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'chrome.manifest'
2--- chrome.manifest 2009-03-18 19:16:05 +0000
3+++ chrome.manifest 2010-11-10 15:13:41 +0000
4@@ -28,8 +28,9 @@
5 skin ubufox classic/1.0 skin/
6 overlay chrome://browser/content/browser.xul chrome://ubufox/content/ubuntuHelpMenuOverlay.xul
7 overlay chrome://browser/content/browser.xul chrome://ubufox/content/updateRestart.xul
8-overlay chrome://mozapps/content/extensions/extensions.xul chrome://ubufox/content/ubuntuAddonsOverlay.xul appversion>=3.0b3
9-overlay chrome://mozapps/content/extensions/extensions.xul chrome://ubufox/content/ubuntuAddonsOverlay.ffox2.xul appversion<2.0.0.*
10-overlay chrome://browser/content/browser.xul chrome://ubufox/content/ubuntuAltpluginsOverlay.xul
11+overlay chrome://browser/content/browser.xul chrome://ubufox/content/ubuntuAltpluginsOverlay.xul
12
13 override chrome://mozapps/content/plugins/pluginInstallerWizard.xul chrome://ubufox/content/pluginInstallerWizard.xul
14+
15+component {7a2a7a56-827f-4b38-bdac-31aa7ec2971d} components/aboutStartpage.js
16+contract @mozilla.org/network/protocol/about;1?what=startpage {7a2a7a56-827f-4b38-bdac-31aa7ec2971d}
17
18=== renamed file 'components/aboutHome.js' => 'components/aboutStartpage.js'
19--- components/aboutHome.js 2010-07-17 19:05:27 +0000
20+++ components/aboutStartpage.js 2010-11-10 15:13:41 +0000
21@@ -99,10 +99,10 @@
22 return defaultEngine.name;
23 }
24
25-function AboutHome() {}
26-AboutHome.prototype = {
27- classDescription: "About Home",
28- contractID: "@mozilla.org/network/protocol/about;1?what=home",
29+function AboutStartpage() {}
30+AboutStartpage.prototype = {
31+ classDescription: "About Startpage",
32+ contractID: "@mozilla.org/network/protocol/about;1?what=startpage",
33 classID: Components.ID("{7a2a7a56-827f-4b38-bdac-31aa7ec2971d}"),
34 QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
35
36@@ -136,6 +136,9 @@
37 };
38
39 function NSGetModule(compMgr, fileSpec) {
40- return XPCOMUtils.generateModule([AboutHome]);
41+ return XPCOMUtils.generateModule([AboutStartpage]);
42 }
43
44+if (typeof XPCOMUtils.generateNSGetFactory == "function") {
45+ const NSGetFactory = XPCOMUtils.generateNSGetFactory([AboutStartpage]);
46+}
47
48=== modified file 'content/overlay.js'
49--- content/overlay.js 2010-03-04 23:14:08 +0000
50+++ content/overlay.js 2010-11-10 15:13:41 +0000
51@@ -65,86 +65,6 @@
52 return sourcePackageName;
53 }
54
55-var ubufox = {
56- onAddonsLoad: function () {
57- this.isffox3 = false;
58- var labelGetUbuntu = document.getElementById("getUbuntu"); // ffox 2
59- var extensions = document.getElementById("extensions-view");
60- this.strings = document.getElementById("ubufox-strings");
61-
62- if (!labelGetUbuntu) {
63- labelGetUbuntu = document.getElementById("getUbuntu3");
64- this.isffox3 = true;
65- }
66- this.initialized = true;
67-
68- if (!ubufoxCheckExecutable("/usr/bin/gnome-app-install"))
69- labelGetUbuntu.setAttribute("hidden", "true");
70- else if (!this.isffox3) {
71- // this is ffox2 only because ffox3 uses a distinct overlay anchor
72- if (extensions.getAttribute("selected") != "true") {
73- labelGetUbuntu.setAttribute("hidden", "true");
74- }
75- if (extensions.getAttribute("selected") == "true") {
76- labelGetUbuntu.setAttribute("hidden", "false");
77- }
78- extensions.addEventListener("DOMAttrModified", function (e) { ubufox.onAttrModified(e); }, false);
79- }
80- },
81- onMenuItemCommand: function(e) {
82- var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
83- .getService(Components.interfaces.nsIPromptService);
84- promptService.alert(window, this.strings.getString("helloMessageTitle"),
85- this.strings.getString("helloMessage"));
86- },
87- onAttrModified: function(e) {
88- var labelGetUbuntu = document.getElementById("getUbuntu");
89- var extensions = document.getElementById("extensions-view");
90-
91- if (!ubufoxCheckExecutable("/usr/bin/gnome-app-install")) {
92- labelGetUbuntu.setAttribute("hidden", "true");
93- return;
94- }
95- if (extensions.getAttribute("selected") != "true") {
96- labelGetUbuntu.setAttribute("hidden", "true");
97- }
98- if (extensions.getAttribute("selected") == "true") {
99- labelGetUbuntu.setAttribute("hidden", "false");
100- }
101- },
102-};
103-window.addEventListener("load", function(e) { ubufox.onAddonsLoad(e); }, false);
104-
105-function startUbuntuAddonsWizard(ev)
106-{
107- var executable =
108- Components.classes['@mozilla.org/file/local;1']
109- .createInstance(Components.interfaces.nsILocalFile);
110-
111- executable.initWithPath("/usr/bin/gnome-app-install");
112-
113- if(!executable.exists() || !executable.isExecutable())
114- alert('Unexpected error!');
115-
116- var procUtil =
117- Components.classes['@mozilla.org/process/util;1']
118- .createInstance(Components.interfaces.nsIProcess);
119-
120- var nsFile = executable.QueryInterface(Components.interfaces.nsIFile);
121-
122- procUtil.init(executable);
123-
124- var args = new Array("--xul-extensions=firefox");
125- // we care for firefox 2 and use a special mime type to document
126- // compatibility of extensions with it
127- if (!ubufox.isffox3) {
128- args = new Array("--xul-extensions=firefox-2");
129- }
130- var res = procUtil.run(false, args, args.length);
131-
132- return true;
133-}
134-
135 function ubufoxReportBug(event) {
136
137 var executable =
138@@ -182,14 +102,3 @@
139 var translateUrl = "https://launchpad.net/distros/ubuntu/lucid/+sources/" + getSourcePackageName() + "/+translate";
140 openUILink(translateUrl, event, false, true);
141 }
142-
143-function ubufoxCheckExecutable(filename)
144-{
145- var executable =
146- Components.classes['@mozilla.org/file/local;1']
147- .createInstance(Components.interfaces.nsILocalFile);
148-
149- executable.initWithPath(filename);
150- return executable.exists();
151-}
152-
153
154=== modified file 'content/pluginInstallerDatasource.js'
155--- content/pluginInstallerDatasource.js 2008-10-14 18:41:26 +0000
156+++ content/pluginInstallerDatasource.js 2010-11-10 15:13:41 +0000
157@@ -39,9 +39,9 @@
158 const RDF_NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
159 const PFS_NS = "http://www.mozilla.org/2004/pfs-rdf#";
160
161-function nsRDFItemUpdater(aClientOS, aChromeLocale){
162+function nsRDFItemUpdater(aClientOS, aChromeLocale) {
163 this._rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"]
164- .getService(Components.interfaces.nsIRDFService);
165+ .getService(Components.interfaces.nsIRDFService);
166 this._os = Components.classes["@mozilla.org/observer-service;1"]
167 .getService(Components.interfaces.nsIObserverService);
168
169@@ -49,6 +49,7 @@
170 .getService(Components.interfaces.nsIXULAppInfo);
171 this.appID = app.ID;
172 this.buildID = app.platformBuildID;
173+ this.appRelease = app.version;
174
175 this.clientOS = aClientOS;
176 this.chromeLocale = aChromeLocale;
177@@ -56,17 +57,20 @@
178 var prefBranch = Components.classes["@mozilla.org/preferences-service;1"]
179 .getService(Components.interfaces.nsIPrefBranch);
180 this.dsURI = prefBranch.getCharPref("pfs.datasource.url");
181+ this.distID = prefBranch.getCharPref("general.useragent.vendorSub");
182 }
183
184 nsRDFItemUpdater.prototype = {
185- checkForPlugin: function (aPluginRequestItem){
186+ checkForPlugin: function (aPluginRequestItem) {
187 var dsURI = this.dsURI;
188 // escape the mimetype as mimetypes can contain '+', which will break pfs.
189 dsURI = dsURI.replace(/%PLUGIN_MIMETYPE%/g, encodeURIComponent(aPluginRequestItem.mimetype));
190 dsURI = dsURI.replace(/%APP_ID%/g, this.appID);
191 dsURI = dsURI.replace(/%APP_VERSION%/g, this.buildID);
192+ dsURI = dsURI.replace(/%APP_RELEASE%/g, this.appRelease);
193 dsURI = dsURI.replace(/%CLIENT_OS%/g, this.clientOS);
194 dsURI = dsURI.replace(/%CHROME_LOCALE%/g, this.chromeLocale);
195+ dsURI = dsURI.replace(/%DIST_ID%/g, this.distID);
196
197 var ds = this._rdfService.GetDataSource(dsURI);
198 var rds = ds.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource)
199@@ -78,14 +82,13 @@
200 }
201 },
202
203- onDatasourceLoaded: function pfs_onDatasourceLoaded (aDatasource, aPluginRequestItem){
204- var container = Components.classes["@mozilla.org/rdf/container;1"].
205- createInstance(Components.interfaces.nsIRDFContainer);
206+ onDatasourceLoaded: function pfs_onDatasourceLoaded (aDatasource, aPluginRequestItem) {
207+ var container = Components.classes["@mozilla.org/rdf/container;1"]
208+ .createInstance(Components.interfaces.nsIRDFContainer);
209 var resultRes = this._rdfService.GetResource("urn:mozilla:plugin-results:" + aPluginRequestItem.mimetype);
210 var pluginList = aDatasource.GetTarget(resultRes, this._rdfService.GetResource(PFS_NS+"plugins"), true);
211 var pluginInfos = new Array();
212-
213- container = Components.classes["@mozilla.org/rdf/container;1"].createInstance(Components.interfaces.nsIRDFContainer);
214+
215 try {
216 container.Init(aDatasource, pluginList);
217
218@@ -95,7 +98,7 @@
219
220 var target;
221 var child = children.getNext();
222- if (child instanceof Components.interfaces.nsIRDFResource){
223+ if (child instanceof Components.interfaces.nsIRDFResource) {
224 var name = this._rdfService.GetResource("http://www.mozilla.org/2004/pfs-rdf#updates");
225 target = aDatasource.GetTarget(child, name, true);
226 }
227@@ -107,13 +110,13 @@
228
229 while (children2.hasMoreElements()) {
230 var child2 = children2.getNext();
231- if (child2 instanceof Components.interfaces.nsIRDFResource){
232+ if (child2 instanceof Components.interfaces.nsIRDFResource) {
233 target2 = child2;
234 }
235
236 var rdfs = this._rdfService;
237
238- function getPFSValueFromRDF(aValue){
239+ function getPFSValueFromRDF(aValue) {
240 var rv = null;
241
242 var myTarget = aDatasource.GetTarget(target2, rdfs.GetResource(PFS_NS + aValue), true);
243@@ -128,6 +131,7 @@
244 pid: getPFSValueFromRDF("guid"),
245 version: getPFSValueFromRDF("version"),
246 IconUrl: getPFSValueFromRDF("IconUrl"),
247+ InstallerLocation: getPFSValueFromRDF("InstallerLocation"),
248 desc: getPFSValueFromRDF("description"),
249 homepage: getPFSValueFromRDF("homepage"),
250 XPILocation: getPFSValueFromRDF("XPILocation"),
251@@ -140,24 +144,32 @@
252 fileHint: getPFSValueFromRDF("filehint")
253 };
254
255+ // no license provided, make it accepted
256+ pluginInfo.licenseAccepted = pluginInfo.licenseURL ? false : true;
257+
258 pluginInfos.push(pluginInfo);
259 }
260 }
261- catch (ex){}
262+ catch (ex) {
263+ Components.utils.reportError(ex);
264+ }
265 }
266 }
267- catch (ex){}
268+ catch (ex) {
269+ Components.utils.reportError(ex);
270+ }
271
272- gPluginInstaller.pluginInfoReceived(pluginInfos);
273+ gPluginInstaller.pluginInfoReceived(aPluginRequestItem, pluginInfos);
274 },
275
276- onDatasourceError: function pfs_onDatasourceError (aPluginRequestItem, aError){
277+ onDatasourceError: function pfs_onDatasourceError (aPluginRequestItem, aError) {
278 this._os.notifyObservers(aPluginRequestItem, "error", aError);
279- gPluginInstaller.pluginInfoReceived(null);
280- },
281+ Components.utils.reportError(aError);
282+ gPluginInstaller.pluginInfoReceived(aPluginRequestItem, null);
283+ }
284 };
285
286-function nsPluginXMLRDFDSObserver(aUpdater, aPluginRequestItem){
287+function nsPluginXMLRDFDSObserver(aUpdater, aPluginRequestItem) {
288 this._updater = aUpdater;
289 this._item = aPluginRequestItem;
290 }
291@@ -168,17 +180,17 @@
292 _item : null,
293
294 // nsIRDFXMLSinkObserver
295- onBeginLoad: function(aSink){},
296- onInterrupt: function(aSink){},
297- onResume: function(aSink){},
298- onEndLoad: function(aSink){
299+ onBeginLoad: function(aSink) {},
300+ onInterrupt: function(aSink) {},
301+ onResume: function(aSink) {},
302+ onEndLoad: function(aSink) {
303 aSink.removeXMLSinkObserver(this);
304
305 var ds = aSink.QueryInterface(Components.interfaces.nsIRDFDataSource);
306 this._updater.onDatasourceLoaded(ds, this._item);
307 },
308
309- onError: function(aSink, aStatus, aErrorMsg){
310+ onError: function(aSink, aStatus, aErrorMsg) {
311 aSink.removeXMLSinkObserver(this);
312 this._updater.onDatasourceError(this._item, aStatus.toString());
313 }
314
315=== modified file 'content/pluginInstallerService.js'
316--- content/pluginInstallerService.js 2009-09-15 08:40:19 +0000
317+++ content/pluginInstallerService.js 2010-11-10 15:13:41 +0000
318@@ -36,54 +36,299 @@
319 *
320 * ***** END LICENSE BLOCK ***** */
321
322-var PluginXPIInstallService = {
323-
324- init: function ()
325- {
326- },
327-
328- pluginPidArray: null,
329-
330- startPluginInstallation: function (aPluginXPIUrlsArray,
331- aPluginHashes,
332- aPluginPidArray) {
333- this.pluginPidArray = aPluginPidArray;
334-
335- var xpiManager = Components.classes["@mozilla.org/xpinstall/install-manager;1"]
336- .createInstance(Components.interfaces.nsIXPInstallManager);
337- xpiManager.initManagerWithHashes(aPluginXPIUrlsArray, aPluginHashes,
338- aPluginXPIUrlsArray.length, this);
339- },
340-
341- // XPI progress listener stuff
342- onStateChange: function (aIndex, aState, aValue)
343- {
344- // get the pid to return to the wizard
345- var pid = this.pluginPidArray[aIndex];
346- var errorMsg;
347-
348- if (aState == Components.interfaces.nsIXPIProgressDialog.INSTALL_DONE) {
349- if (aValue != 0) {
350- var xpinstallStrings = document.getElementById("xpinstallStrings");
351- try {
352- errorMsg = xpinstallStrings.getString("error" + aValue);
353- }
354- catch (e) {
355- errorMsg = xpinstallStrings.getFormattedString("unknown.error", [aValue]);
356- }
357- }
358- }
359-
360- gPluginInstaller.pluginXPIInstallationProgress(pid, aState, errorMsg);
361-
362- },
363-
364- onProgress: function (aIndex, aValue, aMaxValue)
365- {
366- // get the pid to return to the wizard
367- var pid = this.pluginPidArray[aIndex];
368-
369- gPluginInstaller.pluginXPIInstallationProgressMeter(pid, aValue, aMaxValue);
370+Components.utils.import("resource://gre/modules/AddonManager.jsm");
371+
372+const DOWNLOAD_STARTED = 0;
373+const DOWNLOAD_FINISHED = 1;
374+const INSTALL_STARTED = 2;
375+const INSTALL_FINISHED = 3;
376+const INSTALLS_COMPLETE = 4;
377+
378+function getLocalizedError(key)
379+{
380+ return document.getElementById("xpinstallStrings").getString(key);
381+}
382+
383+function binaryToHex(input)
384+{
385+ return [('0' + input.charCodeAt(i).toString(16)).slice(-2)
386+ for (i in input)].join('');
387+}
388+
389+function verifyHash(aFile, aHash)
390+{
391+ try {
392+ var [, method, hash] = /^([A-Za-z0-9]+):(.*)$/.exec(aHash);
393+
394+ var fis = Components.classes['@mozilla.org/network/file-input-stream;1'].
395+ createInstance(Components.interfaces.nsIFileInputStream);
396+ fis.init(aFile, -1, -1, 0);
397+
398+ var hasher = Components.classes['@mozilla.org/security/hash;1'].
399+ createInstance(Components.interfaces.nsICryptoHash);
400+ hasher.initWithString(method);
401+ hasher.updateFromStream(fis, -1);
402+ dlhash = binaryToHex(hasher.finish(false));
403+ return dlhash == hash;
404+ }
405+ catch (e) {
406+ Components.utils.reportError(e);
407+ return false;
408+ }
409+}
410+
411+function InstallerObserver(aPlugin)
412+{
413+ this._plugin = aPlugin;
414+ this._init();
415+}
416+
417+InstallerObserver.prototype = {
418+ _init: function()
419+ {
420+ try {
421+ var ios = Components.classes["@mozilla.org/network/io-service;1"].
422+ getService(Components.interfaces.nsIIOService);
423+ var uri = ios.newURI(this._plugin.InstallerLocation, null, null);
424+ uri.QueryInterface(Components.interfaces.nsIURL);
425+
426+ // Use a local filename appropriate for the OS
427+ var leafName = uri.fileName;
428+ var os = Components.classes["@mozilla.org/xre/app-info;1"]
429+ .getService(Components.interfaces.nsIXULRuntime)
430+ .OS;
431+ if (os == "WINNT" && leafName.indexOf(".") < 0)
432+ leafName += ".exe";
433+
434+ var dirs = Components.classes["@mozilla.org/file/directory_service;1"].
435+ getService(Components.interfaces.nsIProperties);
436+
437+ var resultFile = dirs.get("TmpD", Components.interfaces.nsIFile);
438+ resultFile.append(leafName);
439+ resultFile.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE,
440+ 0770);
441+
442+ var channel = ios.newChannelFromURI(uri);
443+ this._downloader =
444+ Components.classes["@mozilla.org/network/downloader;1"].
445+ createInstance(Components.interfaces.nsIDownloader);
446+ this._downloader.init(this, resultFile);
447+ channel.notificationCallbacks = this;
448+
449+ this._fireNotification(DOWNLOAD_STARTED, null);
450+
451+ channel.asyncOpen(this._downloader, null);
452+ }
453+ catch (e) {
454+ Components.utils.reportError(e);
455+ this._fireNotification(INSTALL_FINISHED, getLocalizedError("error-228"));
456+ if (resultFile && resultFile.exists())
457+ resultfile.remove(false);
458+ }
459+ },
460+
461+ /**
462+ * Inform the gPluginInstaller about what's going on.
463+ */
464+ _fireNotification: function(aStatus, aErrorMsg)
465+ {
466+ gPluginInstaller.pluginXPIInstallationProgress(this._plugin.pid,
467+ aStatus, aErrorMsg);
468+
469+ if (aStatus == INSTALL_FINISHED) {
470+ --PluginInstallService._installersPending;
471+ PluginInstallService._fireFinishedNotification();
472+ }
473+ },
474+
475+ QueryInterface: function(iid)
476+ {
477+ if (iid.equals(Components.interfaces.nsISupports) ||
478+ iid.equals(Components.interfaces.nsIInterfaceRequestor) ||
479+ iid.equals(Components.interfaces.nsIDownloadObserver) ||
480+ iid.equals(Components.interfaces.nsIProgressEventSink))
481+ return this;
482+
483+ throw Components.results.NS_ERROR_NO_INTERFACE;
484+ },
485+
486+ getInterface: function(iid)
487+ {
488+ if (iid.equals(Components.interfaces.nsIProgressEventSink))
489+ return this;
490+
491+ return null;
492+ },
493+
494+ onDownloadComplete: function(downloader, request, ctxt, status, result)
495+ {
496+ if (!Components.isSuccessCode(status)) {
497+ // xpinstall error 228 is "Download Error"
498+ this._fireNotification(INSTALL_FINISHED, getLocalizedError("error-228"));
499+ result.remove(false);
500+ return;
501+ }
502+
503+ this._fireNotification(DOWNLOAD_FINISHED);
504+
505+ if (this._plugin.InstallerHash &&
506+ !verifyHash(result, this._plugin.InstallerHash)) {
507+ // xpinstall error 261 is "Invalid file hash..."
508+ this._fireNotification(INSTALL_FINISHED, getLocalizedError("error-261"));
509+ result.remove(false);
510+ return;
511+ }
512+
513+ this._fireNotification(INSTALL_STARTED);
514+
515+ result.QueryInterface(Components.interfaces.nsILocalFile);
516+ try {
517+ // Make sure the file is executable
518+ result.permissions = 0770;
519+ var process = Components.classes["@mozilla.org/process/util;1"]
520+ .createInstance(Components.interfaces.nsIProcess);
521+ process.init(result);
522+ var self = this;
523+ process.runAsync([], 0, {
524+ observe: function(subject, topic, data) {
525+ if (topic != "process-finished") {
526+ Components.utils.reportError("Failed to launch installer");
527+ self._fireNotification(INSTALL_FINISHED,
528+ getLocalizedError("error-207"));
529+ }
530+ else if (process.exitValue != 0) {
531+ Components.utils.reportError("Installer returned exit code " + process.exitValue);
532+ self._fireNotification(INSTALL_FINISHED,
533+ getLocalizedError("error-203"));
534+ }
535+ else {
536+ self._fireNotification(INSTALL_FINISHED, null);
537+ }
538+ result.remove(false);
539+ }
540+ });
541+ }
542+ catch (e) {
543+ Components.utils.reportError(e);
544+ this._fireNotification(INSTALL_FINISHED, getLocalizedError("error-207"));
545+ result.remove(false);
546+ }
547+ },
548+
549+ onProgress: function(aRequest, aContext, aProgress, aProgressMax)
550+ {
551+ gPluginInstaller.pluginInstallationProgressMeter(this._plugin.pid,
552+ aProgress,
553+ aProgressMax);
554+ },
555+
556+ onStatus: function(aRequest, aContext, aStatus, aStatusArg)
557+ {
558+ /* pass */
559+ }
560+};
561+
562+var PluginInstallService = {
563+
564+ /**
565+ * Start installation of installers and XPI plugins.
566+ * @param aInstallerPlugins An array of objects which should have the
567+ * properties "pid", "InstallerLocation",
568+ * and "InstallerHash"
569+ * @param aXPIPlugins An array of objects which should have the
570+ * properties "pid", "XPILocation",
571+ * and "XPIHash"
572+ */
573+ startPluginInstallation: function (aInstallerPlugins,
574+ aXPIPlugins)
575+ {
576+ this._xpiPlugins = aXPIPlugins;
577+ this._xpisPending = aXPIPlugins.length;
578+
579+ aXPIPlugins.forEach(function(plugin) {
580+ AddonManager.getInstallForURL(plugin.XPILocation, function(install) {
581+ install.addListener(PluginInstallService);
582+ install.install();
583+ }, "application/x-xpinstall", plugin.XPIHash);
584+ });
585+
586+ // InstallerObserver may finish immediately so we must initialise the
587+ // installers after setting the number of installers and xpis pending
588+ this._installersPending = aInstallerPlugins.length;
589+ this._installerPlugins = [new InstallerObserver(plugin)
590+ for each (plugin in aInstallerPlugins)];
591+ },
592+
593+ _fireFinishedNotification: function()
594+ {
595+ if (this._installersPending == 0 && this._xpisPending == 0)
596+ gPluginInstaller.pluginXPIInstallationProgress(null, INSTALLS_COMPLETE, null);
597+ },
598+
599+ getPidForInstall: function(install) {
600+ for (let i = 0; i < this._xpiPlugins.length; i++) {
601+ if (install.sourceURI.spec == this._xpiPlugins[i].XPILocation)
602+ return this._xpiPlugins[i].pid;
603+ }
604+ return -1;
605+ },
606+
607+ // InstallListener interface
608+ onDownloadStarted: function(install) {
609+ var pid = this.getPidForInstall(install);
610+ gPluginInstaller.pluginXPIInstallationProgress(pid, DOWNLOAD_STARTED, null);
611+ },
612+
613+ onDownloadProgress: function(install) {
614+ var pid = this.getPidForInstall(install);
615+ gPluginInstaller.pluginXPIInstallationProgressMeter(pid, install.progress,
616+ install.maxProgress);
617+ },
618+
619+ onDownloadEnded: function(install) {
620+ var pid = this.getPidForInstall(install);
621+ gPluginInstaller.pluginXPIInstallationProgress(pid, DOWNLOAD_FINISHED, null);
622+ },
623+
624+ onDownloadFailed: function(install) {
625+ var pid = this.getPidForInstall(install);
626+ switch (install.error) {
627+ case AddonManager.ERROR_NETWORK_FAILURE:
628+ var errorMsg = getLocalizedError("error-228");
629+ break;
630+ case AddonManager.ERROR_INCORRECT_HASH:
631+ var errorMsg = getLocalizedError("error-261");
632+ break;
633+ case AddonManager.ERROR_CORRUPT_FILE:
634+ var errorMsg = getLocalizedError("error-207");
635+ break;
636+ }
637+ gPluginInstaller.pluginXPIInstallationProgress(pid, INSTALL_FINISHED, errorMsg);
638+
639+ this._xpisPending--;
640+ this._fireFinishedNotification();
641+ },
642+
643+ onInstallStarted: function(install) {
644+ var pid = this.getPidForInstall(install);
645+ gPluginInstaller.pluginXPIInstallationProgress(pid, INSTALL_STARTED, null);
646+ },
647+
648+ onInstallEnded: function(install, addon) {
649+ var pid = this.getPidForInstall(install);
650+ gPluginInstaller.pluginXPIInstallationProgress(pid, INSTALL_FINISHED, null);
651+
652+ this._xpisPending--;
653+ this._fireFinishedNotification();
654+ },
655+
656+ onInstallFailed: function(install) {
657+ var pid = this.getPidForInstall(install);
658+ gPluginInstaller.pluginXPIInstallationProgress(pid, INSTALL_FINISHED,
659+ getLocalizedError("error-203"));
660+
661+ this._xpisPending--;
662+ this._fireFinishedNotification();
663 }
664 }
665
666@@ -95,13 +340,11 @@
667 mAptPidArray: null,
668 mRunning: false,
669
670- install: function(aAptUrlArray,
671- aAptPidArray,
672+ install: function(aAptPlugins,
673 aAptInstallerService) {
674
675 this.mAptInstallerService = aAptInstallerService;
676- this.mAptUrlArray = aAptUrlArray;
677- this.mAptPidArray = aAptPidArray;
678+ this.mAptPlugins = aAptPlugins;
679 this.mRunning = true;
680
681 // var thread = Components.classes["@mozilla.org/thread;1"]
682@@ -112,9 +355,9 @@
683
684 run: function()
685 {
686- for (var i = 0; i < this.mAptUrlArray.length; i++) {
687- var aptUrl = this.mAptUrlArray[i];
688- var aptPid = this.mAptPidArray[i];
689+ for (var i = 0; i < this.mAptPlugins.length; i++) {
690+ var aptUrl = this.mAptPlugins[i].XPILocation;
691+ var aptPid = this.mAptPlugins[i].pid;
692 this.mAptInstallerService.onNotifyStart(aptUrl, aptPid);
693
694 var executable =
695@@ -125,7 +368,7 @@
696
697 if(!executable.exists() || !executable.isExecutable()) {
698 window.alert('Unexpected error!');
699- this.mAptInstallerService.onNotifyResult(aptUrl, aptPid, -1 );
700+ this.mAptInstallerService.onNotifyResult(aptUrl, aptPid, -1);
701 continue;
702 }
703
704@@ -181,9 +424,8 @@
705
706 pluginPidArray: null,
707
708- startPluginInstallation: function (aPluginAptUrlsArray,
709- aPluginPidArray) {
710- AptInstaller.install(aPluginAptUrlsArray, aPluginPidArray, this);
711+ startPluginInstallation: function (aAptPlugins) {
712+ AptInstaller.install(aAptPlugins, this);
713 },
714
715 onNotifyStart: function (aptUrl, aptPid) {
716
717=== modified file 'content/pluginInstallerWizard.js'
718--- content/pluginInstallerWizard.js 2010-04-08 11:09:28 +0000
719+++ content/pluginInstallerWizard.js 2010-11-10 15:13:41 +0000
720@@ -64,14 +64,15 @@
721 // how many plugins are to be installed
722 this.pluginsToInstallNum = 0;
723
724- this.mTab = null;
725 this.mBrowser = null;
726 this.mSuccessfullPluginInstallation = 0;
727+ this.mNeedsRestart = false;
728
729 this.mPluginPidArray = new Object();
730 // arguments[0] is an array that contains two items:
731 // an array of mimetypes that are missing
732- // a reference to the tab that needs them, so we can reload it
733+ // a reference to the browser that needs them,
734+ // so we can notify which browser can be reloaded.
735
736 if ("arguments" in window) {
737 for (var item in window.arguments[0].plugins){
738@@ -81,8 +82,7 @@
739 this.mPluginRequestArrayLength++;
740 }
741
742- this.mBrowser = window.arguments[0].browser; // ffox 3
743- this.mTab = window.arguments[0].tab; // ffox 2
744+ this.mBrowser = window.arguments[0].browser;
745 }
746
747 this.WSPluginCounter = 0;
748@@ -100,14 +100,14 @@
749 // initiate the datasource call
750 var rdfUpdater = new nsRDFItemUpdater(this.getOS(), this.getChromeLocale());
751
752- for (item in this.mPluginRequestArray) {
753+ for (var item in this.mPluginRequestArray) {
754 rdfUpdater.checkForPlugin(this.mPluginRequestArray[item]);
755 }
756 }
757
758 // aPluginInfo is null if the datasource call failed, and pid is -1 if
759 // no matching plugin was found.
760-nsPluginInstallerWizard.prototype.pluginInfoReceived = function (aPluginInfos){
761+nsPluginInstallerWizard.prototype.pluginInfoReceived = function (aPluginRequestItem, aPluginInfos){
762 this.WSPluginCounter++;
763
764 if (aPluginInfos ) {
765@@ -121,7 +121,7 @@
766 aPluginInfo = aPluginInfos[i];
767 resultSetMimeType = aPluginInfo.requestedMimetype;
768 if (aPluginInfo && aPluginInfo.pid != -1 &&
769- ( aPluginInfo.XPILocation || aPluginInfo.manualInstallationURL )) {
770+ ( aPluginInfo.XPILocation || aPluginInfo.manualInstallationURL || aPluginInfo.InstallerLocation)) {
771 hasResults = true;
772 filteredPluginInfoSet.push(aPluginInfo);
773 this.mPluginPidArray[aPluginInfo.pid] = aPluginInfo;
774@@ -130,10 +130,10 @@
775
776 if(filteredPluginInfoSet.length > 0)
777 {
778- this.mPluginInfoArray[resultSetMimeType] = filteredPluginInfoSet;
779+ this.mPluginInfoArray[aPluginRequestItem.mimetype] = filteredPluginInfoSet;
780 this.mPluginInfoArrayLength++;
781 } else {
782- this.mPluginNotFoundArray[resultSetMimeType] = filteredPluginInfoSet;
783+ this.mPluginNotFoundArray[aPluginRequestItem.mimetype] = aPluginRequestItem;
784 this.mPluginNotFoundArrayLength++;
785 }
786 }
787@@ -148,18 +148,18 @@
788
789 if (this.WSPluginCounter == this.mPluginRequestArrayLength) {
790 // check if no plugins were found
791- if (this.mPluginInfoArrayLength == 0 && this.mPluginInfoAptArrayLength == 0) {
792- this.advancePage("lastpage", true, false, false);
793+ if (this.mPluginInfoArrayLength == 0) {
794+ this.advancePage("lastpage");
795 } else {
796 // we want to allow user to cancel
797- this.advancePage(null, true, false, true);
798+ this.advancePage(null);
799 }
800 } else {
801 // process more.
802 }
803 }
804
805-nsPluginInstallerWizard.prototype.createPluginSetGroupBox = function () {
806+nsPluginInstallerWizard.prototype.createPluginSetGroupBox = function (mimetype) {
807
808 var stringBundle = document.getElementById("ubufoxPluginWizardString");
809 var gbox = document.createElement("vbox");
810@@ -193,11 +193,11 @@
811 var groupBox = null;
812 var lastSibling = null;
813
814- for (mimetype in this.mPluginInfoArray){
815+ for (var mimetype in this.mPluginInfoArray){
816 // [plugin image] [Plugin_Name Plugin_Version]
817 var pluginInfoSet = this.mPluginInfoArray[mimetype];
818 var firstPluginSet = (groupBox == null);
819- groupBox = this.createPluginSetGroupBox(document, mimetype, pluginInfoSet);
820+ groupBox = this.createPluginSetGroupBox(mimetype);
821
822 if(firstPluginSet) {
823 this.mPluginPlaceHolder = document.getElementById("pluginselection-placeholder");
824@@ -275,6 +275,7 @@
825 if (pluginInfo.InstallerShowsUI == "true")
826 hasPluginWithInstallerUI = true;
827
828+ // keep a running count of plugins the user wants to install
829 this.pluginsToInstallNum++;
830 }
831
832@@ -290,14 +291,14 @@
833 var mime = selectedItem._ubufoxPluginInfoMimeType;
834 this.mMimeTypePluginSelections[mime] = selectedItem._ubufoxPluginInfo.pid;
835
836- let count = 0;
837- for (mime in this.mMimeTypePluginSelections) {
838+ this.pluginsToInstallNum = 0;
839+ for (var mime in this.mMimeTypePluginSelections) {
840 if(this.mMimeTypePluginSelections[mime] && this.mMimeTypePluginSelections[mime] != "-1")
841- count++;
842+ this.pluginsToInstallNum++;
843 }
844
845 // if no plugins are checked, don't allow to advance
846- if (count > 0)
847+ if (this.pluginsToInstallNum > 0)
848 this.canAdvance(true);
849 else
850 this.canAdvance(false);
851@@ -321,7 +322,7 @@
852
853 // only add if a license is provided and the plugin was selected to
854 // be installed
855- for (mimetype in this.mMimeTypePluginSelections){
856+ for (var mimetype in this.mMimeTypePluginSelections){
857 var pid = this.mMimeTypePluginSelections[mimetype];
858 var pluginInfo = this.mPluginPidArray[pid];
859 if (pluginInfo && pluginInfo.licenseURL && (pluginInfo.licenseURL != "")) {
860@@ -331,7 +332,7 @@
861
862 if (this.mPluginLicenseArray.length == 0) {
863 // no plugins require licenses
864- this.advancePage(null, true, false, false);
865+ this.advancePage(null);
866 } else {
867 this.licenseAcceptCounter = 0;
868
869@@ -389,7 +390,7 @@
870
871 this.canAdvance(false);
872
873- loadFlags = Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE;
874+ var loadFlags = Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE;
875
876 document.getElementById("licenseIFrame").webNavigation.loadURI(pluginInfo.licenseURL, loadFlags, null, null, null);
877
878@@ -447,60 +448,46 @@
879 this.canAdvance(aAccepted);
880 }
881
882-nsPluginInstallerWizard.prototype.advancePage = function (aPageId, aCanAdvance, aCanRewind, aCanCancel){
883+nsPluginInstallerWizard.prototype.advancePage = function (aPageId){
884 this.canAdvance(true);
885 document.getElementById("plugin-installer-wizard").advance(aPageId);
886-
887- this.canAdvance(aCanAdvance);
888- this.canRewind(aCanRewind);
889- this.canCancel(aCanCancel);
890 }
891
892 nsPluginInstallerWizard.prototype.startPluginInstallation = function (){
893 this.canAdvance(false);
894 this.canRewind(false);
895
896- // since the user can choose what plugins to install, we need to store
897- // which ones were choosen, as nsIXPInstallManager returns an index and not the
898- // mimetype. So store the pids.
899-
900- // for ubutfox we deal with multiple cases: first case is XPIInstall, which will
901+ // for ubufox we deal with multiple cases: first case is XPIInstall, which will
902 // run the "normal" XPIInstall process; second case is XPIInstall url contains
903 // and apt: protocol url ... this will run apt protocol handler
904- var pluginURLArray = new Array();
905- var pluginHashArray = new Array();
906- var pluginPidArray = new Array();
907- this.mAptPluginURLArray = new Array();
908- this.mAptPluginPidArray = new Array();
909-
910- for (mime in this.mMimeTypePluginSelections) {
911- var pluginPid = this.mMimeTypePluginSelections[mime];
912- var pluginItem = this.mPluginPidArray[pluginPid];
913-
914- // only push to the array if it has an XPILocation, else nsIXPInstallManager
915- // will complain.
916- if (pluginItem && pluginItem.XPILocation && pluginItem.XPILocation.indexOf("apt:") != 0 && pluginItem.licenseAccepted) {
917- pluginURLArray.push(pluginItem.XPILocation);
918- pluginHashArray.push(pluginItem.XPIHash);
919- pluginPidArray.push(pluginItem.pid);
920- } else if (pluginItem && pluginItem.XPILocation && pluginItem.XPILocation.indexOf("apt:") == 0) {
921- this.mAptPluginURLArray.push(pluginItem.XPILocation);
922- this.mAptPluginPidArray.push(pluginPid);
923- } else {
924- window.alert("Unhandled mime install flavour (supported: vendor, apt)");
925- continue;
926+ var installerPlugins = [];
927+ var xpiPlugins = [];
928+ this.aptPlugins = [];
929+
930+ for (var mime in this.mMimeTypePluginSelections) {
931+ var pluginItem = this.mPluginPidArray[this.mMimeTypePluginSelections[mime]];
932+
933+ if (pluginItem && pluginItem.licenseAccepted) {
934+ if (pluginItem.InstallerLocation)
935+ installerPlugins.push(pluginItem);
936+ else if (pluginItem.XPILocation && pluginItem.XPILocation.indexOf("apt:") != 0)
937+ xpiPlugins.push(pluginItem);
938+ else if (pluginItem.XPILocation && pluginItem.XPILocation.indexOf("apt:") == 0)
939+ this.aptPlugins.push(pluginItem);
940+ else {
941+ window.alert("Unhandled mime install flavour (supported: vendor, apt)");
942+ continue;
943+ }
944 }
945 }
946
947- if (pluginURLArray.length > 0)
948- PluginXPIInstallService.startPluginInstallation(pluginURLArray,
949- pluginHashArray,
950- pluginPidArray);
951- else if (this.mAptPluginURLArray.length > 0)
952- PluginAPTInstallService.startPluginInstallation(this.mAptPluginURLArray,
953- this.mAptPluginPidArray);
954+ if (installerPlugins.length > 0 || xpiPlugins.length > 0)
955+ PluginXPIInstallService.startPluginInstallation(installerPlugins,
956+ xpiPlugins);
957+ else if (this.aptPlugins.length > 0)
958+ PluginAPTInstallService.startPluginInstallation(this.aptPlugins);
959 else
960- this.advancePage(null, true, false, false);
961+ this.advancePage(null);
962 }
963
964 /*
965@@ -530,6 +517,8 @@
966
967 case 2:
968 statMsg = this.getFormattedString("pluginInstallation.install.start", [pluginInfo.name]);
969+ var progressElm = document.getElementById("plugin_install_progress");
970+ progressElm.setAttribute("mode", "undetermined");
971 break;
972 case 6:
973 statMsg = "APT - " + this.getFormattedString("pluginInstallation.install.start", [pluginInfo.name]);
974@@ -555,11 +544,10 @@
975 break;
976
977 case 4:
978- PluginAPTInstallService.startPluginInstallation(this.mAptPluginURLArray,
979- this.mAptPluginPidArray);
980+ PluginAPTInstallService.startPluginInstallation(this.aptPlugins);
981 break;
982 case 8:
983- this.advancePage(null, true, false, false);
984+ this.advancePage(null);
985 statMsg = this.getString("pluginInstallation.complete");
986 break;
987 default:
988@@ -630,15 +618,12 @@
989 var notInstalledList = "?action=missingplugins";
990 var myRows = document.getElementById("pluginResultList");
991
992- this.mNeedsRestart = false;
993-
994 // clear children
995 for (var run = myRows.childNodes.length; run--; run > 0)
996 myRows.removeChild(myRows.childNodes.item(run));
997
998- for (mimetype in this.mMimeTypePluginSelections) {
999- var pid = this.mMimeTypePluginSelections[mimetype];
1000- var pluginInfoItem = this.mPluginPidArray[pid];
1001+ for (var mimetype in this.mMimeTypePluginSelections) {
1002+ var pluginInfoItem = this.mPluginPidArray[this.mMimeTypePluginSelections[mimetype]];
1003 // [plugin image] [Plugin_Name Plugin_Version] [Success/Failed] [Manual Install (if Failed)]
1004
1005 var myPluginItem = pluginInfoItem; //this.mPluginInfoArray[pluginInfoItem];
1006@@ -651,7 +636,7 @@
1007 notInstalledList += "&mimetype=" + pluginInfoItem;
1008 } else if (myPluginItem.licenseURL && !myPluginItem.licenseAccepted) {
1009 statusMsg = this.getString("pluginInstallationSummary.licenseNotAccepted");
1010- } else if (!myPluginItem.XPILocation) {
1011+ } else if (!myPluginItem.XPILocation && !myPluginItem.InstallerLocation) {
1012 statusMsg = this.getString("pluginInstallationSummary.notAvailable");
1013 notInstalledList += "&mimetype=" + pluginInfoItem;
1014 } else {
1015@@ -660,12 +645,12 @@
1016
1017 // only check needsRestart if the plugin was successfully installed.
1018 if (myPluginItem.needsRestart)
1019- this.mNeedsRestart = false;
1020+ this.mNeedsRestart = true;
1021 }
1022
1023 // manual url - either returned from the webservice or the pluginspage attribute
1024 var manualUrl;
1025- if ((myPluginItem.error || !myPluginItem.XPILocation) && (myPluginItem.manualInstallationURL || this.mPluginRequestArray[myPluginItem.requestedMimetype].pluginsPage)){
1026+ if ((myPluginItem.error || (!myPluginItem.XPILocation && !myPluginItem.InstallerLocation)) && (myPluginItem.manualInstallationURL || this.mPluginRequestArray[myPluginItem.requestedMimetype].pluginsPage)){
1027 manualUrl = myPluginItem.manualInstallationURL ? myPluginItem.manualInstallationURL : this.mPluginRequestArray[myPluginItem.requestedMimetype].pluginsPage;
1028 }
1029
1030@@ -680,10 +665,10 @@
1031
1032 // handle plugins we couldn't find
1033 for (pluginInfoItem in this.mPluginNotFoundArray){
1034- var pluginRequest = this.mPluginRequestArray[pluginInfoItem];
1035+ var pluginRequest = this.mPluginNotFoundArray[pluginInfoItem];
1036
1037 // if there is a pluginspage, show UI
1038- if (pluginRequest) {
1039+ if (pluginRequest.pluginsPage) {
1040 this.addPluginResultRow(
1041 "",
1042 this.getFormattedString("pluginInstallation.unknownPlugin", [pluginInfoItem]),
1043@@ -716,28 +701,43 @@
1044 "&appID=" + app.ID +
1045 "&appVersion=" + app.platformBuildID +
1046 "&clientOS=" + this.getOS() +
1047- "&chromeLocale=" + this.getChromeLocale();
1048+ "&chromeLocale=" + this.getChromeLocale() +
1049+ "&appRelease=" + app.version;
1050
1051 document.getElementById("moreInfoLink").addEventListener("click", function() { gPluginInstaller.loadURL("https://pfs.mozilla.org/plugins/" + notInstalledList) }, false);
1052
1053+ if (this.mNeedsRestart) {
1054+ var cancel = document.getElementById("plugin-installer-wizard").getButton("cancel");
1055+ cancel.label = this.getString("pluginInstallation.close.label");
1056+ cancel.accessKey = this.getString("pluginInstallation.close.accesskey");
1057+ var finish = document.getElementById("plugin-installer-wizard").getButton("finish");
1058+ finish.label = this.getFormattedString("pluginInstallation.restart.label", [app.name]);
1059+ finish.accessKey = this.getString("pluginInstallation.restart.accesskey");
1060+ this.canCancel(true);
1061+ }
1062+ else {
1063+ this.canCancel(false);
1064+ }
1065+
1066 this.canAdvance(true);
1067 this.canRewind(false);
1068- this.canCancel(false);
1069 }
1070
1071 nsPluginInstallerWizard.prototype.loadURL = function (aUrl){
1072 // Check if the page where the plugin came from can load aUrl before
1073- // loading it, and do *not* allow loading javascript: or data: URIs.
1074- var pluginPage = window.opener.content.location.href;
1075+ // loading it, and do *not* allow loading URIs that would inherit our
1076+ // principal.
1077+
1078+ var pluginPagePrincipal =
1079+ window.opener.content.document.nodePrincipal;
1080
1081 const nsIScriptSecurityManager =
1082 Components.interfaces.nsIScriptSecurityManager;
1083- var secMan =
1084- Components.classes["@mozilla.org/scriptsecuritymanager;1"]
1085- .getService(nsIScriptSecurityManager);
1086+ var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
1087+ .getService(nsIScriptSecurityManager);
1088
1089- secMan.checkLoadURIStr(pluginPage, aUrl,
1090- nsIScriptSecurityManager.DISALLOW_SCRIPT_OR_DATA);
1091+ secMan.checkLoadURIStrWithPrincipal(pluginPagePrincipal, aUrl,
1092+ nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL);
1093
1094 window.opener.open(aUrl);
1095 }
1096@@ -792,6 +792,8 @@
1097 this.pid = aResult.pid;
1098 this.version = aResult.version;
1099 this.IconUrl = aResult.IconUrl;
1100+ this.InstallerLocation = aResult.InstallerLocation;
1101+ this.InstallerHash = aResult.InstallerHash;
1102 this.XPILocation = aResult.XPILocation;
1103 this.XPIHash = aResult.XPIHash;
1104 this.InstallerShowsUI = aResult.InstallerShowsUI;
1105@@ -816,7 +818,6 @@
1106 }
1107
1108 function wizardFinish(){
1109- // we restart if we have no choice ...
1110 if (gPluginInstaller.mNeedsRestart) {
1111 // Notify all windows that an application quit has been requested.
1112 var os = Components.classes["@mozilla.org/observer-service;1"]
1113@@ -835,21 +836,26 @@
1114 }
1115 }
1116
1117- if (gPluginInstaller.mBrowser) { // ffox 3 code can autoscan ...
1118- // always refresh
1119- var event = document.createEvent("Events");
1120- event.initEvent("NewPluginInstalled", true, true);
1121- var dispatched = gPluginInstaller.mBrowser.dispatchEvent(event);
1122- }
1123- else if (gPluginInstaller.mTab) { // ffox 2 code can autoscan ...
1124- if ((gPluginInstaller.mSuccessfullPluginInstallation > 0) &&
1125- (gPluginInstaller.mPluginInfoArrayLength != 0)) {
1126- // clear the tab's plugin list only if we installed at least one plugin
1127- gPluginInstaller.mTab.missingPlugins = null;
1128- // reset UI
1129- window.opener.gMissingPluginInstaller.closeNotification();
1130- // reload the browser to make the new plugin show
1131- window.opener.getBrowser().reloadTab(gPluginInstaller.mTab);
1132+ // don't refresh if no plugins were found or installed
1133+ if ((gPluginInstaller.mSuccessfullPluginInstallation > 0) &&
1134+ (gPluginInstaller.mPluginInfoArray.length != 0)) {
1135+
1136+ // reload plugins so JS detection works immediately
1137+ try {
1138+ var ph = Components.classes["@mozilla.org/plugin/host;1"]
1139+ .getService(Components.interfaces.nsIPluginHost);
1140+ ph.reloadPlugins(false);
1141+ }
1142+ catch (e) {
1143+ // reloadPlugins throws an exception if there were no plugins to load
1144+ }
1145+
1146+ if (gPluginInstaller.mBrowser) {
1147+ // notify listeners that a plugin is installed,
1148+ // so that they can reset the UI and update the browser.
1149+ var event = document.createEvent("Events");
1150+ event.initEvent("NewPluginInstalled", true, true);
1151+ gPluginInstaller.mBrowser.dispatchEvent(event);
1152 }
1153 }
1154
1155
1156=== modified file 'content/pluginInstallerWizard.xul'
1157--- content/pluginInstallerWizard.xul 2008-10-14 19:25:33 +0000
1158+++ content/pluginInstallerWizard.xul 2010-11-10 15:13:41 +0000
1159@@ -55,9 +55,9 @@
1160 onload="wizardInit()"
1161 onwizardfinish="return wizardFinish();">
1162
1163- <script type="application/x-javascript" src="chrome://ubufox/content/pluginInstallerWizard.js"/>
1164- <script type="application/x-javascript" src="chrome://ubufox/content/pluginInstallerDatasource.js"/>
1165- <script type="application/x-javascript" src="chrome://ubufox/content/pluginInstallerService.js"/>
1166+ <script type="application/javascript" src="chrome://ubufox/content/pluginInstallerWizard.js"/>
1167+ <script type="application/javascript" src="chrome://ubufox/content/pluginInstallerDatasource.js"/>
1168+ <script type="application/javascript" src="chrome://ubufox/content/pluginInstallerService.js"/>
1169
1170 <stringbundleset id="pluginSet">
1171 <stringbundle id="brandStrings" src="chrome://branding/locale/brand.properties"/>
1172
1173=== removed file 'content/ubuntuAddonsOverlay.ffox2.xul'
1174--- content/ubuntuAddonsOverlay.ffox2.xul 2008-02-13 15:15:32 +0000
1175+++ content/ubuntuAddonsOverlay.ffox2.xul 1970-01-01 00:00:00 +0000
1176@@ -1,53 +0,0 @@
1177-<?xml version="1.0" encoding="UTF-8"?>
1178-<!-- ***** BEGIN LICENSE BLOCK *****
1179- - Version: MPL 1.1/GPL 2.0/LGPL 2.1
1180- -
1181- - The contents of this file are subject to the Mozilla Public License Version
1182- - 1.1 (the "License"); you may not use this file except in compliance with
1183- - the License. You may obtain a copy of the License at
1184- - http://www.mozilla.org/MPL/
1185- -
1186- - Software distributed under the License is distributed on an "AS IS" basis,
1187- - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
1188- - for the specific language governing rights and limitations under the
1189- - License.
1190- -
1191- - The Original Code is distro-mods.
1192- -
1193- - The Initial Developer of the Original Code is
1194- - Canonical Ltd.
1195- - Portions created by the Initial Developer are Copyright (C) 2007
1196- - the Initial Developer. All Rights Reserved.
1197- -
1198- - Contributor(s):
1199- -
1200- - Alternatively, the contents of this file may be used under the terms of
1201- - either the GNU General Public License Version 2 or later (the "GPL"), or
1202- - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
1203- - in which case the provisions of the GPL or the LGPL are applicable instead
1204- - of those above. If you wish to allow use of your version of this file only
1205- - under the terms of either the GPL or the LGPL, and not to allow others to
1206- - use your version of this file under the terms of the MPL, indicate your
1207- - decision by deleting the provisions above and replace them with the notice
1208- - and other provisions required by the GPL or the LGPL. If you do not delete
1209- - the provisions above, a recipient may use your version of this file under
1210- - the terms of any one of the MPL, the GPL or the LGPL.
1211- -
1212- - ***** END LICENSE BLOCK ***** -->
1213-
1214-<?xml-stylesheet href="chrome://ubufox/skin/overlay.css" type="text/css"?>
1215-<!DOCTYPE overlay SYSTEM "chrome://ubufox/locale/ubufox.dtd">
1216-<overlay id="ubufox-overlay"
1217- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
1218- <script src="overlay.js"/>
1219- <stringbundleset id="stringbundleset">
1220- <stringbundle id="ubufox-strings" src="chrome://ubufox/locale/ubufox.properties"/>
1221- </stringbundleset>
1222-
1223- <hbox id="commandBarBottom">
1224- <label id="getUbuntu" getMoreURL="http://www.google.com" class="text-link"
1225- onclick="return startUbuntuAddonsWizard(event);"
1226- onload="ubufoxCheckExecutable();"
1227- value="&ubufox.getubuntuextension;"/>
1228- </hbox>
1229-</overlay>
1230
1231=== removed file 'content/ubuntuAddonsOverlay.xul'
1232--- content/ubuntuAddonsOverlay.xul 2008-02-13 15:15:32 +0000
1233+++ content/ubuntuAddonsOverlay.xul 1970-01-01 00:00:00 +0000
1234@@ -1,53 +0,0 @@
1235-<?xml version="1.0" encoding="UTF-8"?>
1236-<!-- ***** BEGIN LICENSE BLOCK *****
1237- - Version: MPL 1.1/GPL 2.0/LGPL 2.1
1238- -
1239- - The contents of this file are subject to the Mozilla Public License Version
1240- - 1.1 (the "License"); you may not use this file except in compliance with
1241- - the License. You may obtain a copy of the License at
1242- - http://www.mozilla.org/MPL/
1243- -
1244- - Software distributed under the License is distributed on an "AS IS" basis,
1245- - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
1246- - for the specific language governing rights and limitations under the
1247- - License.
1248- -
1249- - The Original Code is distro-mods.
1250- -
1251- - The Initial Developer of the Original Code is
1252- - Canonical Ltd.
1253- - Portions created by the Initial Developer are Copyright (C) 2007
1254- - the Initial Developer. All Rights Reserved.
1255- -
1256- - Contributor(s):
1257- -
1258- - Alternatively, the contents of this file may be used under the terms of
1259- - either the GNU General Public License Version 2 or later (the "GPL"), or
1260- - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
1261- - in which case the provisions of the GPL or the LGPL are applicable instead
1262- - of those above. If you wish to allow use of your version of this file only
1263- - under the terms of either the GPL or the LGPL, and not to allow others to
1264- - use your version of this file under the terms of the MPL, indicate your
1265- - decision by deleting the provisions above and replace them with the notice
1266- - and other provisions required by the GPL or the LGPL. If you do not delete
1267- - the provisions above, a recipient may use your version of this file under
1268- - the terms of any one of the MPL, the GPL or the LGPL.
1269- -
1270- - ***** END LICENSE BLOCK ***** -->
1271-
1272-<?xml-stylesheet href="chrome://ubufox/skin/overlay.css" type="text/css"?>
1273-<!DOCTYPE overlay SYSTEM "chrome://ubufox/locale/ubufox.dtd">
1274-<overlay id="ubufox-overlay"
1275- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
1276- <script src="overlay.js"/>
1277- <stringbundleset id="stringbundleset">
1278- <stringbundle id="ubufox-strings" src="chrome://ubufox/locale/ubufox.properties"/>
1279- </stringbundleset>
1280-
1281- <hbox id="searchPanel">
1282- <label id="getUbuntu3" getMoreURL="http://www.google.com" class="text-link"
1283- onclick="return startUbuntuAddonsWizard(event);"
1284- onload="ubufoxCheckExecutable();"
1285- value="&ubufox.getubuntuextension;" />
1286- </hbox>
1287-</overlay>
1288
1289=== modified file 'content/updateRestart.js'
1290--- content/updateRestart.js 2009-09-15 10:02:38 +0000
1291+++ content/updateRestart.js 2010-11-10 15:13:41 +0000
1292@@ -78,23 +78,20 @@
1293 function checkUpdate()
1294 {
1295 var resReqFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
1296- var versionString = null;
1297- try {
1298- versionString = Components.classes["@mozilla.org/fuel/application;1"].getService(Components.interfaces.extIApplication).version;
1299- } catch (e) {
1300- }
1301- if (versionString != null && String_startsWith (versionString, "3.0"))
1302- resReqFile.initWithPath("/var/lib/update-notifier/user.d/firefox-3.0-restart-required");
1303- else if (versionString != null && String_startsWith (versionString, "3.5"))
1304- resReqFile.initWithPath("/var/lib/update-notifier/user.d/firefox-3.5-restart-required");
1305- else if (versionString != null && String_startsWith (versionString, "3.6"))
1306- resReqFile.initWithPath("/var/lib/update-notifier/user.d/firefox-3.6-restart-required");
1307- else if (versionString != null && String_startsWith (versionString, "3.7"))
1308- resReqFile.initWithPath("/var/lib/update-notifier/user.d/firefox-3.7-restart-required");
1309- else { // not supported version - skip restart notification
1310+ var launcher = Components.classes["@mozilla.org/process/environment;1"].getService(Components.interfaces.nsIEnvironment).get("MOZ_APP_LAUNCHER");
1311+ if(launcher == null) {
1312 return;
1313 }
1314
1315+ try {
1316+ // If the launcher is a full path, just get the basename
1317+ resReqFile.initWithPath(launcher);
1318+ launcher = resReqFile.leafName;
1319+ } catch (e) { // initWithPath will throw if the path is relative
1320+ }
1321+
1322+ resReqFile.initWithPath("/var/run/" + launcher + "-restart-required");
1323+
1324 if(resReqFile.exists())
1325 {
1326 var dateResReq = resReqFile.lastModifiedTime;
1327
1328=== modified file 'defaults/preferences/ubufox-pfs.js'
1329--- defaults/preferences/ubufox-pfs.js 2010-02-17 19:14:31 +0000
1330+++ defaults/preferences/ubufox-pfs.js 2010-11-10 15:13:41 +0000
1331@@ -1,5 +1,5 @@
1332
1333 // use ubuntu plugin finder service
1334-pref ("pfs.datasource.url", "https://mozilla-pfs.ubuntu.com/plugin-finder?mimetype=%PLUGIN_MIMETYPE%&appID=%APP_ID%&appVersion=%APP_VERSION%&clientOS=%CLIENT_OS%&chromeLocale=%CHROME_LOCALE%&distributionID=10.04");
1335+pref ("pfs.datasource.url", "https://mozilla-pfs.ubuntu.com/plugin-finder?mimetype=%PLUGIN_MIMETYPE%&appID=%APP_ID%&appVersion=%APP_VERSION%&clientOS=%CLIENT_OS%&chromeLocale=%CHROME_LOCALE%&distributionID=%DIST_ID%");
1336 pref ("pfs.filehint.url", "https://mozilla-pfs.ubuntu.com/plugin-finder?op=filehint2name&distributionID=10.04");
1337
1338
1339=== modified file 'install.rdf'
1340--- install.rdf 2010-04-09 13:28:06 +0000
1341+++ install.rdf 2010-11-10 15:13:41 +0000
1342@@ -3,6 +3,7 @@
1343 xmlns:em="http://www.mozilla.org/2004/em-rdf#">
1344 <Description about="urn:mozilla:install-manifest">
1345 <em:id>ubufox@ubuntu.com</em:id>
1346+ <em:unpack>true</em:unpack>
1347 <em:name>Ubuntu Firefox Modifications</em:name>
1348 <em:version>0.9rc2</em:version>
1349 <em:creator>Canonical Ltd.</em:creator>
1350@@ -16,8 +17,8 @@
1351 <em:targetApplication>
1352 <Description>
1353 <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!-- firefox -->
1354- <em:minVersion>1.5</em:minVersion>
1355- <em:maxVersion>3.7.*</em:maxVersion>
1356+ <em:minVersion>4.0b6</em:minVersion>
1357+ <em:maxVersion>4.0b8pre</em:maxVersion>
1358 </Description>
1359 </em:targetApplication>
1360 </Description>
1361
1362=== modified file 'locale/af-ZA/ubufox.properties'
1363--- locale/af-ZA/ubufox.properties 2010-02-17 19:10:59 +0000
1364+++ locale/af-ZA/ubufox.properties 2010-11-10 15:13:41 +0000
1365@@ -4,7 +4,7 @@
1366 extensions.ubufox@ubuntu.com.description=Ubuntu Firefox Pak
1367 ubufox.pluginWizard.availablePluginsPage.description.label=Kies bykomstighede vir media tipe
1368 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1369-browser.startup.homepage=about:home
1370+browser.startup.homepage=about:startpage
1371 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1372 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1373 startup.homepage_override_url=about:blank
1374
1375=== modified file 'locale/ar/ubufox.properties'
1376--- locale/ar/ubufox.properties 2010-02-17 19:10:59 +0000
1377+++ locale/ar/ubufox.properties 2010-11-10 15:13:41 +0000
1378@@ -4,7 +4,7 @@
1379 extensions.ubufox@ubuntu.com.description=حزمة فايرفوكس من أوبونتو.
1380 ubufox.pluginWizard.availablePluginsPage.description.label=اختر ملحقة لنوع الوسائط
1381 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1382-browser.startup.homepage=about:home
1383+browser.startup.homepage=about:startpage
1384 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1385 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1386 startup.homepage_override_url=about:blank
1387
1388=== modified file 'locale/bg/ubufox.properties'
1389--- locale/bg/ubufox.properties 2010-02-21 13:39:27 +0000
1390+++ locale/bg/ubufox.properties 2010-11-10 15:13:41 +0000
1391@@ -4,7 +4,7 @@
1392 extensions.ubufox@ubuntu.com.description=Ubuntu Firefox Pack.
1393 ubufox.pluginWizard.availablePluginsPage.description.label=Избор на приставка за тип медия
1394 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1395-browser.startup.homepage=about:home
1396+browser.startup.homepage=about:startpage
1397 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1398 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1399 startup.homepage_override_url=about:blank
1400
1401=== modified file 'locale/ca/ubufox.properties'
1402--- locale/ca/ubufox.properties 2010-02-17 19:10:59 +0000
1403+++ locale/ca/ubufox.properties 2010-11-10 15:13:41 +0000
1404@@ -4,7 +4,7 @@
1405 extensions.ubufox@ubuntu.com.description=Paquet del Firefox de l'Ubuntu.
1406 ubufox.pluginWizard.availablePluginsPage.description.label=Trieu un connector per al tipus multimèdia
1407 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1408-browser.startup.homepage=about:home
1409+browser.startup.homepage=about:startpage
1410 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1411 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1412 startup.homepage_override_url=about:blank
1413
1414=== modified file 'locale/cs-CZ/ubufox.properties'
1415--- locale/cs-CZ/ubufox.properties 2010-02-17 19:10:59 +0000
1416+++ locale/cs-CZ/ubufox.properties 2010-11-10 15:13:41 +0000
1417@@ -4,7 +4,7 @@
1418 extensions.ubufox@ubuntu.com.description=Ubuntu rozšíření pro Firefox.
1419 ubufox.pluginWizard.availablePluginsPage.description.label=Zvolte zásuvný modul pro daný typ média
1420 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1421-browser.startup.homepage=about:home
1422+browser.startup.homepage=about:startpage
1423 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1424 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1425 startup.homepage_override_url=about:blank
1426
1427=== modified file 'locale/de-DE/ubufox.properties'
1428--- locale/de-DE/ubufox.properties 2010-02-17 19:10:59 +0000
1429+++ locale/de-DE/ubufox.properties 2010-11-10 15:13:41 +0000
1430@@ -3,7 +3,7 @@
1431 extensions.ubufox@ubuntu.com.description=Ubuntu Firefox Paket.
1432 ubufox.pluginWizard.availablePluginsPage.description.label=Wähle ein plugin für Medien Typ
1433 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1434-browser.startup.homepage=about:home
1435+browser.startup.homepage=about:startpage
1436 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1437 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1438 startup.homepage_override_url=about:blank
1439
1440=== modified file 'locale/el-GR/ubufox.properties'
1441--- locale/el-GR/ubufox.properties 2010-02-17 19:10:59 +0000
1442+++ locale/el-GR/ubufox.properties 2010-11-10 15:13:41 +0000
1443@@ -4,7 +4,7 @@
1444 extensions.ubufox@ubuntu.com.description=Πακέτο του Ubuntu για το Firefox.
1445 ubufox.pluginWizard.availablePluginsPage.description.label=Επιλέξτε ένα πρόσθετο για τη μορφή του πολυμέσου
1446 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1447-browser.startup.homepage=about:home
1448+browser.startup.homepage=about:startpage
1449 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1450 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1451 startup.homepage_override_url=about:blank
1452
1453=== modified file 'locale/en-US/ubufox.properties'
1454--- locale/en-US/ubufox.properties 2010-02-17 19:10:59 +0000
1455+++ locale/en-US/ubufox.properties 2010-11-10 15:13:41 +0000
1456@@ -4,7 +4,7 @@
1457 extensions.ubufox@ubuntu.com.description=Ubuntu Firefox Pack.
1458 ubufox.pluginWizard.availablePluginsPage.description.label=Choose a plugin for media type
1459 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1460-browser.startup.homepage=about:home
1461+browser.startup.homepage=about:startpage
1462 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1463 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1464 startup.homepage_override_url=about:blank
1465
1466=== modified file 'locale/es/ubufox.properties'
1467--- locale/es/ubufox.properties 2010-02-17 19:10:59 +0000
1468+++ locale/es/ubufox.properties 2010-11-10 15:13:41 +0000
1469@@ -4,7 +4,7 @@
1470 extensions.ubufox@ubuntu.com.description=Paquete de Ubuntu para Firefox.
1471 ubufox.pluginWizard.availablePluginsPage.description.label=Seleccione un complemento para el tipo de medio
1472 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1473-browser.startup.homepage=about:home
1474+browser.startup.homepage=about:startpage
1475 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1476 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1477 startup.homepage_override_url=about:blank
1478
1479=== modified file 'locale/eu/ubufox.properties'
1480--- locale/eu/ubufox.properties 2010-02-17 19:10:59 +0000
1481+++ locale/eu/ubufox.properties 2010-11-10 15:13:41 +0000
1482@@ -5,7 +5,7 @@
1483 ubufox.pluginWizard.availablePluginsPage.description.label=Multimedia mota horrentzako plugina hautatu
1484
1485 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1486-browser.startup.homepage=about:home
1487+browser.startup.homepage=about:startpage
1488 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1489 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1490 startup.homepage_override_url=about:blank
1491
1492=== modified file 'locale/fi-FI/ubufox.properties'
1493--- locale/fi-FI/ubufox.properties 2010-02-17 19:10:59 +0000
1494+++ locale/fi-FI/ubufox.properties 2010-11-10 15:13:41 +0000
1495@@ -4,7 +4,7 @@
1496 extensions.ubufox@ubuntu.com.description=Ubuntun Firefox-paketti
1497 ubufox.pluginWizard.availablePluginsPage.description.label=Valitse mediatyypille sopiva liit\u00e4nn\u00e4inen
1498 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1499-browser.startup.homepage=about:home
1500+browser.startup.homepage=about:startpage
1501 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1502 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1503 startup.homepage_override_url=about:blank
1504
1505=== modified file 'locale/fr/ubufox.properties'
1506--- locale/fr/ubufox.properties 2010-02-17 19:10:59 +0000
1507+++ locale/fr/ubufox.properties 2010-11-10 15:13:41 +0000
1508@@ -4,7 +4,7 @@
1509 extensions.ubufox@ubuntu.com.description=Paquet Firefox Pour Ubuntu.
1510 ubufox.pluginWizard.availablePluginsPage.description.label=Sélectionnez un plugin pour le type de média
1511 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1512-browser.startup.homepage=about:home
1513+browser.startup.homepage=about:startpage
1514 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1515 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1516 startup.homepage_override_url=about:blank
1517
1518=== modified file 'locale/gl-ES/ubufox.properties'
1519--- locale/gl-ES/ubufox.properties 2010-02-17 19:10:59 +0000
1520+++ locale/gl-ES/ubufox.properties 2010-11-10 15:13:41 +0000
1521@@ -4,7 +4,7 @@
1522 extensions.ubufox@ubuntu.com.description=Paquete de Ubuntu para Firefox.
1523 ubufox.pluginWizard.availablePluginsPage.description.label=Escoller un plugin para o tipo de contido
1524 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1525-browser.startup.homepage=about:home
1526+browser.startup.homepage=about:startpage
1527 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1528 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1529 startup.homepage_override_url=about:blank
1530
1531=== modified file 'locale/hu-HU/ubufox.properties'
1532--- locale/hu-HU/ubufox.properties 2010-02-17 19:10:59 +0000
1533+++ locale/hu-HU/ubufox.properties 2010-11-10 15:13:41 +0000
1534@@ -4,7 +4,7 @@
1535 extensions.ubufox@ubuntu.com.description=Ubuntu Firefox csomag
1536 ubufox.pluginWizard.availablePluginsPage.description.label=Válasszon egy bővítményt a médiatípushoz
1537 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1538-browser.startup.homepage=about:home
1539+browser.startup.homepage=about:startpage
1540 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1541 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1542 startup.homepage_override_url=about:blank
1543
1544=== modified file 'locale/it-IT/ubufox.properties'
1545--- locale/it-IT/ubufox.properties 2010-02-17 19:10:59 +0000
1546+++ locale/it-IT/ubufox.properties 2010-11-10 15:13:41 +0000
1547@@ -4,7 +4,7 @@
1548 extensions.ubufox@ubuntu.com.description=Pacchetto Firefox Ubuntu.
1549 ubufox.pluginWizard.availablePluginsPage.description.label=Scegliere un plugin per il tipo di media
1550 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1551-browser.startup.homepage=about:home
1552+browser.startup.homepage=about:startpage
1553 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1554 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1555 startup.homepage_override_url=about:blank
1556
1557=== modified file 'locale/ja/ubufox.properties'
1558--- locale/ja/ubufox.properties 2010-02-17 19:10:59 +0000
1559+++ locale/ja/ubufox.properties 2010-11-10 15:13:41 +0000
1560@@ -4,7 +4,7 @@
1561 extensions.ubufox@ubuntu.com.description=Ubuntu Firefox Pack.
1562 ubufox.pluginWizard.availablePluginsPage.description.label=メディアの種類でプラグインを選択する
1563 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1564-browser.startup.homepage=about:home
1565+browser.startup.homepage=about:startpage
1566 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1567 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1568 startup.homepage_override_url=about:blank
1569
1570=== modified file 'locale/lt-LT/ubufox.properties'
1571--- locale/lt-LT/ubufox.properties 2010-02-17 19:10:59 +0000
1572+++ locale/lt-LT/ubufox.properties 2010-11-10 15:13:41 +0000
1573@@ -4,7 +4,7 @@
1574 extensions.ubufox@ubuntu.com.description=Ubuntu Firefox paketas
1575 ubufox.pluginWizard.availablePluginsPage.description.label=Pasirinkite įskiepį failo tipui
1576 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1577-browser.startup.homepage=about:home
1578+browser.startup.homepage=about:startpage
1579 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1580 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1581 startup.homepage_override_url=about:blank
1582
1583=== modified file 'locale/nl-NL/ubufox.properties'
1584--- locale/nl-NL/ubufox.properties 2010-02-17 10:49:28 +0000
1585+++ locale/nl-NL/ubufox.properties 2010-11-10 15:13:41 +0000
1586@@ -4,7 +4,7 @@
1587 extensions.ubufox@ubuntu.com.description=Ubuntu Firefox-pakket.
1588 ubufox.pluginWizard.availablePluginsPage.description.label=Kies een plug-in voor het mediatype
1589 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1590-browser.startup.homepage=about:home
1591+browser.startup.homepage=about:startpage
1592 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/locales/index-nl.html
1593 app.update.url.details=file:///usr/share/ubuntu-artwork/home/locales/index-nl.html
1594 startup.homepage_override_url=about:blank
1595
1596=== modified file 'locale/pl-PL/ubufox.properties'
1597--- locale/pl-PL/ubufox.properties 2010-02-17 19:10:59 +0000
1598+++ locale/pl-PL/ubufox.properties 2010-11-10 15:13:41 +0000
1599@@ -4,7 +4,7 @@
1600 extensions.ubufox@ubuntu.com.description=Pakiet Ubuntu Firefox.
1601 ubufox.pluginWizard.availablePluginsPage.description.label=Wybór wtyczki dla typu pliku
1602 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1603-browser.startup.homepage=about:home
1604+browser.startup.homepage=about:startpage
1605 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1606 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1607 startup.homepage_override_url=about:blank
1608
1609=== modified file 'locale/pt-BR/ubufox.properties'
1610--- locale/pt-BR/ubufox.properties 2010-04-17 00:39:37 +0000
1611+++ locale/pt-BR/ubufox.properties 2010-11-10 15:13:41 +0000
1612@@ -4,7 +4,7 @@
1613 extensions.ubufox@ubuntu.com.description=Pacote para o Firefox do Ubuntu
1614 ubufox.pluginWizard.availablePluginsPage.description.label=Escolha um plug-in para o tipo de mídia
1615 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1616-browser.startup.homepage=about:home
1617+browser.startup.homepage=about:startpage
1618 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1619 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1620 startup.homepage_override_url=about:blank
1621
1622=== modified file 'locale/ro/ubufox.properties'
1623--- locale/ro/ubufox.properties 2010-02-17 19:10:59 +0000
1624+++ locale/ro/ubufox.properties 2010-11-10 15:13:41 +0000
1625@@ -4,7 +4,7 @@
1626 extensions.ubufox@ubuntu.com.description=Pachetul Ubuntu Firefox.
1627 ubufox.pluginWizard.availablePluginsPage.description.label=Alegeți un modul pentru acest tip media
1628 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1629-browser.startup.homepage=about:home
1630+browser.startup.homepage=about:startpage
1631 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1632 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1633 startup.homepage_override_url=about:blank
1634
1635=== modified file 'locale/ru-RU/ubufox.properties'
1636--- locale/ru-RU/ubufox.properties 2010-02-17 19:10:59 +0000
1637+++ locale/ru-RU/ubufox.properties 2010-11-10 15:13:41 +0000
1638@@ -4,7 +4,7 @@
1639 extensions.ubufox@ubuntu.com.description=Расширения Firefox для Ubuntu
1640 ubufox.pluginWizard.availablePluginsPage.description.label=Выберите плагин для типа содержимого
1641 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1642-browser.startup.homepage=about:home
1643+browser.startup.homepage=about:startpage
1644 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1645 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1646 startup.homepage_override_url=about:blank
1647
1648=== modified file 'locale/sl-SI/ubufox.properties'
1649--- locale/sl-SI/ubufox.properties 2010-02-17 19:10:59 +0000
1650+++ locale/sl-SI/ubufox.properties 2010-11-10 15:13:41 +0000
1651@@ -4,7 +4,7 @@
1652 extensions.ubufox@ubuntu.com.description=Ubuntu razširitve za Firefox.
1653 ubufox.pluginWizard.availablePluginsPage.description.label=Izberite vtičnik za vrsto datoteke
1654 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1655-browser.startup.homepage=about:home
1656+browser.startup.homepage=about:startpage
1657 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1658 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1659 startup.homepage_override_url=about:blank
1660
1661=== modified file 'locale/sv-SE/ubufox.properties'
1662--- locale/sv-SE/ubufox.properties 2010-02-17 19:10:59 +0000
1663+++ locale/sv-SE/ubufox.properties 2010-11-10 15:13:41 +0000
1664@@ -4,7 +4,7 @@
1665 extensions.ubufox@ubuntu.com.description=Ubuntu-paket för Firefox.
1666 ubufox.pluginWizard.availablePluginsPage.description.label=Välj ett instick för mediatypen
1667 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1668-browser.startup.homepage=about:home
1669+browser.startup.homepage=about:startpage
1670 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1671 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1672 startup.homepage_override_url=about:blank
1673
1674=== modified file 'locale/uk/ubufox.properties'
1675--- locale/uk/ubufox.properties 2010-02-17 19:10:59 +0000
1676+++ locale/uk/ubufox.properties 2010-11-10 15:13:41 +0000
1677@@ -4,7 +4,7 @@
1678 extensions.ubufox@ubuntu.com.description=Убунтівські доповнення до Firefox.
1679 ubufox.pluginWizard.availablePluginsPage.description.label=Оберіть модуль для цього типу файлів
1680 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1681-browser.startup.homepage=about:home
1682+browser.startup.homepage=about:startpage
1683 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1684 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1685 startup.homepage_override_url=about:blank
1686
1687=== modified file 'locale/zh-CN/ubufox.properties'
1688--- locale/zh-CN/ubufox.properties 2010-02-17 19:10:59 +0000
1689+++ locale/zh-CN/ubufox.properties 2010-11-10 15:13:41 +0000
1690@@ -4,7 +4,7 @@
1691 extensions.ubufox@ubuntu.com.description=Ubuntu 火狐扩展包.
1692 ubufox.pluginWizard.availablePluginsPage.description.label=选择打开媒体的插件
1693 app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1004
1694-browser.startup.homepage=about:home
1695+browser.startup.homepage=about:startpage
1696 browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1697 app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1698 startup.homepage_override_url=about:blank
1699
1700=== added file 'pfs/db/sources.list.10.10'
1701--- pfs/db/sources.list.10.10 1970-01-01 00:00:00 +0000
1702+++ pfs/db/sources.list.10.10 2010-11-10 15:13:41 +0000
1703@@ -0,0 +1,2 @@
1704+deb http://archive.ubuntu.com/ubuntu/ maverick main restricted universe multiverse
1705+
1706
1707=== added file 'pfs/db/sources.list.11.04'
1708--- pfs/db/sources.list.11.04 1970-01-01 00:00:00 +0000
1709+++ pfs/db/sources.list.11.04 2010-11-10 15:13:41 +0000
1710@@ -0,0 +1,2 @@
1711+deb http://archive.ubuntu.com/ubuntu/ natty main restricted universe multiverse
1712+

Subscribers

People subscribed via source and target branches

to all changes:
to status/vote changes: