3
@@ -28,8 +28,9 @@ locale ubufox zh-CN locale/zh-CN/
4
skin ubufox classic/1.0 skin/
5
overlay chrome://browser/content/browser.xul chrome://ubufox/content/ubuntuHelpMenuOverlay.xul
6
overlay chrome://browser/content/browser.xul chrome://ubufox/content/updateRestart.xul
7
-overlay chrome://mozapps/content/extensions/extensions.xul chrome://ubufox/content/ubuntuAddonsOverlay.xul appversion>=3.0b3
8
-overlay chrome://mozapps/content/extensions/extensions.xul chrome://ubufox/content/ubuntuAddonsOverlay.ffox2.xul appversion<2.0.0.*
9
-overlay chrome://browser/content/browser.xul chrome://ubufox/content/ubuntuAltpluginsOverlay.xul
10
+overlay chrome://browser/content/browser.xul chrome://ubufox/content/ubuntuAltpluginsOverlay.xul
12
override chrome://mozapps/content/plugins/pluginInstallerWizard.xul chrome://ubufox/content/pluginInstallerWizard.xul
14
+component {7a2a7a56-827f-4b38-bdac-31aa7ec2971d} components/aboutStartpage.js
15
+contract @mozilla.org/network/protocol/about;1?what=startpage {7a2a7a56-827f-4b38-bdac-31aa7ec2971d}
16
--- a/components/aboutHome.js
19
-/* ***** BEGIN LICENSE BLOCK *****
20
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
22
- * The contents of this file are subject to the Mozilla Public License Version
23
- * 1.1 (the "License"); you may not use this file except in compliance with
24
- * the License. You may obtain a copy of the License at
25
- * http://www.mozilla.org/MPL/
27
- * Software distributed under the License is distributed on an "AS IS" basis,
28
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
29
- * for the specific language governing rights and limitations under the
32
- * The Original Code is about:robots
34
- * The Initial Developer of the Original Code is Mozilla Foundation.
35
- * Portions created by the Initial Developer are Copyright (C) 2008
36
- * the Initial Developer. All Rights Reserved.
39
- * Ryan Flint <rflint@mozilla.com>
40
- * Justin Dolske <dolske@mozilla.com>
41
- * Johnathan Nightingale <johnath@mozilla.com>
43
- * Alternatively, the contents of this file may be used under the terms of
44
- * either the GNU General Public License Version 2 or later (the "GPL"), or
45
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
46
- * in which case the provisions of the GPL or the LGPL are applicable instead
47
- * of those above. If you wish to allow use of your version of this file only
48
- * under the terms of either the GPL or the LGPL, and not to allow others to
49
- * use your version of this file under the terms of the MPL, indicate your
50
- * decision by deleting the provisions above and replace them with the notice
51
- * and other provisions required by the GPL or the LGPL. If you do not delete
52
- * the provisions above, a recipient may use your version of this file under
53
- * the terms of any one of the MPL, the GPL or the LGPL.
55
- * ***** END LICENSE BLOCK ***** */
56
-const Cc = Components.classes;
57
-const Ci = Components.interfaces;
59
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
61
-var HOMEPAGE_OFFLINE = "file:///usr/share/ubuntu-artwork/home/index.html";
62
-var HOMEPAGE_OFFLINE_TMPL = "/usr/share/ubuntu-artwork/home/locales/index-"
64
-var HOMEPAGE_ONLINE_PREFIX = "http://start.ubuntu.com/10.10";
66
-function getIsOffline() {
67
- var ios = Cc["@mozilla.org/network/io-service;1"]
68
- .getService(Ci.nsIIOService);
72
-function getUALocale() {
73
- var prefs = Cc["@mozilla.org/preferences-service;1"]
74
- .getService(Ci.nsIPrefBranch);
76
- var userAgentLocale = null;
78
- var userAgentLocaleLocalized = null;
81
- userAgentLocaleLocalized = prefs.getComplexValue("general.useragent.locale",
82
- Ci.nsIPrefLocalizedString);
85
- if (userAgentLocaleLocalized) {
86
- userAgentLocale = userAgentLocaleLocalized.toString();
88
- userAgentLocale = prefs.getCharPref("general.useragent.locale");
90
- } catch (e) { userAgentLocale = "en-US";}
92
- return userAgentLocale;
95
-function get_valid_offlinehomepage() {
96
- var userAgentLocale = getUALocale();
97
- var canonicalLangCode = userAgentLocale.replace("-","_");
99
- var preferredHomepage = HOMEPAGE_OFFLINE_TMPL + canonicalLangCode + ".html";
101
- var file = Components.classes['@mozilla.org/file/local;1']
102
- .createInstance(Components.interfaces.nsILocalFile);
104
- file.initWithPath(preferredHomepage);
106
- if (!file.exists())
107
- return HOMEPAGE_OFFLINE;
109
- return "file://" + preferredHomepage;
110
- return preferredHomepage;
113
-function getCurrentSearchEngineName () {
114
- var searchService = Cc["@mozilla.org/browser/search-service;1"]
115
- .getService (Ci.nsIBrowserSearchService);
116
- var defaultEngine = searchService.currentEngine;
117
- return defaultEngine.name;
120
-function AboutHome() {}
121
-AboutHome.prototype = {
122
- classDescription: "About Home",
123
- contractID: "@mozilla.org/network/protocol/about;1?what=home",
124
- classID: Components.ID("{7a2a7a56-827f-4b38-bdac-31aa7ec2971d}"),
125
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
127
- getURIFlags: function(aURI) {
128
- return (Ci.nsIAboutModule.ALLOW_SCRIPT |
129
- Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT);
132
- newChannel: function(aURI) {
133
- var ios = Cc["@mozilla.org/network/io-service;1"].
134
- getService(Ci.nsIIOService);
136
- var secMan = Cc["@mozilla.org/scriptsecuritymanager;1"].
137
- getService(Ci.nsIScriptSecurityManager);
138
- var principal = secMan.getCodebasePrincipal(aURI);
140
- if (!getIsOffline()) {
141
- let searchEngineName = getCurrentSearchEngineName();
142
- let uri = HOMEPAGE_ONLINE_PREFIX + "/" + searchEngineName + "/";
143
- let channel = ios.newChannel(uri, null, null);
144
- channel.originalURI = aURI;
145
- channel.owner = principal;
149
- let channel = ios.newChannel(HOMEPAGE_OFFLINE, null, null);
150
-// channel.originalURI = aURI;
151
- channel.owner = principal;
156
-function NSGetModule(compMgr, fileSpec) {
157
- return XPCOMUtils.generateModule([AboutHome]);
161
+++ b/components/aboutStartpage.js
163
+/* ***** BEGIN LICENSE BLOCK *****
164
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
166
+ * The contents of this file are subject to the Mozilla Public License Version
167
+ * 1.1 (the "License"); you may not use this file except in compliance with
168
+ * the License. You may obtain a copy of the License at
169
+ * http://www.mozilla.org/MPL/
171
+ * Software distributed under the License is distributed on an "AS IS" basis,
172
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
173
+ * for the specific language governing rights and limitations under the
176
+ * The Original Code is about:robots
178
+ * The Initial Developer of the Original Code is Mozilla Foundation.
179
+ * Portions created by the Initial Developer are Copyright (C) 2008
180
+ * the Initial Developer. All Rights Reserved.
183
+ * Ryan Flint <rflint@mozilla.com>
184
+ * Justin Dolske <dolske@mozilla.com>
185
+ * Johnathan Nightingale <johnath@mozilla.com>
187
+ * Alternatively, the contents of this file may be used under the terms of
188
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
189
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
190
+ * in which case the provisions of the GPL or the LGPL are applicable instead
191
+ * of those above. If you wish to allow use of your version of this file only
192
+ * under the terms of either the GPL or the LGPL, and not to allow others to
193
+ * use your version of this file under the terms of the MPL, indicate your
194
+ * decision by deleting the provisions above and replace them with the notice
195
+ * and other provisions required by the GPL or the LGPL. If you do not delete
196
+ * the provisions above, a recipient may use your version of this file under
197
+ * the terms of any one of the MPL, the GPL or the LGPL.
199
+ * ***** END LICENSE BLOCK ***** */
200
+const Cc = Components.classes;
201
+const Ci = Components.interfaces;
203
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
205
+var HOMEPAGE_OFFLINE = "file:///usr/share/ubuntu-artwork/home/index.html";
206
+var HOMEPAGE_OFFLINE_TMPL = "/usr/share/ubuntu-artwork/home/locales/index-"
208
+var HOMEPAGE_ONLINE_PREFIX = "http://start.ubuntu.com/10.10";
210
+function getIsOffline() {
211
+ var ios = Cc["@mozilla.org/network/io-service;1"]
212
+ .getService(Ci.nsIIOService);
213
+ return ios.offline;
216
+function getUALocale() {
217
+ var prefs = Cc["@mozilla.org/preferences-service;1"]
218
+ .getService(Ci.nsIPrefBranch);
220
+ var userAgentLocale = null;
222
+ var userAgentLocaleLocalized = null;
225
+ userAgentLocaleLocalized = prefs.getComplexValue("general.useragent.locale",
226
+ Ci.nsIPrefLocalizedString);
229
+ if (userAgentLocaleLocalized) {
230
+ userAgentLocale = userAgentLocaleLocalized.toString();
232
+ userAgentLocale = prefs.getCharPref("general.useragent.locale");
234
+ } catch (e) { userAgentLocale = "en-US";}
236
+ return userAgentLocale;
239
+function get_valid_offlinehomepage() {
240
+ var userAgentLocale = getUALocale();
241
+ var canonicalLangCode = userAgentLocale.replace("-","_");
243
+ var preferredHomepage = HOMEPAGE_OFFLINE_TMPL + canonicalLangCode + ".html";
245
+ var file = Components.classes['@mozilla.org/file/local;1']
246
+ .createInstance(Components.interfaces.nsILocalFile);
248
+ file.initWithPath(preferredHomepage);
250
+ if (!file.exists())
251
+ return HOMEPAGE_OFFLINE;
253
+ return "file://" + preferredHomepage;
254
+ return preferredHomepage;
257
+function getCurrentSearchEngineName () {
258
+ var searchService = Cc["@mozilla.org/browser/search-service;1"]
259
+ .getService (Ci.nsIBrowserSearchService);
260
+ var defaultEngine = searchService.currentEngine;
261
+ return defaultEngine.name;
264
+function AboutStartpage() {}
265
+AboutStartpage.prototype = {
266
+ classDescription: "About Startpage",
267
+ contractID: "@mozilla.org/network/protocol/about;1?what=startpage",
268
+ classID: Components.ID("{7a2a7a56-827f-4b38-bdac-31aa7ec2971d}"),
269
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
271
+ getURIFlags: function(aURI) {
272
+ return (Ci.nsIAboutModule.ALLOW_SCRIPT |
273
+ Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT);
276
+ newChannel: function(aURI) {
277
+ var ios = Cc["@mozilla.org/network/io-service;1"].
278
+ getService(Ci.nsIIOService);
280
+ var secMan = Cc["@mozilla.org/scriptsecuritymanager;1"].
281
+ getService(Ci.nsIScriptSecurityManager);
282
+ var principal = secMan.getCodebasePrincipal(aURI);
284
+ if (!getIsOffline()) {
285
+ let searchEngineName = getCurrentSearchEngineName();
286
+ let uri = HOMEPAGE_ONLINE_PREFIX + "/" + searchEngineName + "/";
287
+ let channel = ios.newChannel(uri, null, null);
288
+ channel.originalURI = aURI;
289
+ channel.owner = principal;
293
+ let channel = ios.newChannel(HOMEPAGE_OFFLINE, null, null);
294
+// channel.originalURI = aURI;
295
+ channel.owner = principal;
300
+function NSGetModule(compMgr, fileSpec) {
301
+ return XPCOMUtils.generateModule([AboutStartpage]);
304
+if (typeof XPCOMUtils.generateNSGetFactory == "function") {
305
+ const NSGetFactory = XPCOMUtils.generateNSGetFactory([AboutStartpage]);
307
--- a/content/overlay.js
308
+++ b/content/overlay.js
309
@@ -65,86 +65,6 @@ function getSourcePackageName ()
310
return sourcePackageName;
314
- onAddonsLoad: function () {
315
- this.isffox3 = false;
316
- var labelGetUbuntu = document.getElementById("getUbuntu"); // ffox 2
317
- var extensions = document.getElementById("extensions-view");
318
- this.strings = document.getElementById("ubufox-strings");
320
- if (!labelGetUbuntu) {
321
- labelGetUbuntu = document.getElementById("getUbuntu3");
322
- this.isffox3 = true;
324
- this.initialized = true;
326
- if (!ubufoxCheckExecutable("/usr/bin/gnome-app-install"))
327
- labelGetUbuntu.setAttribute("hidden", "true");
328
- else if (!this.isffox3) {
329
- // this is ffox2 only because ffox3 uses a distinct overlay anchor
330
- if (extensions.getAttribute("selected") != "true") {
331
- labelGetUbuntu.setAttribute("hidden", "true");
333
- if (extensions.getAttribute("selected") == "true") {
334
- labelGetUbuntu.setAttribute("hidden", "false");
336
- extensions.addEventListener("DOMAttrModified", function (e) { ubufox.onAttrModified(e); }, false);
339
- onMenuItemCommand: function(e) {
340
- var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
341
- .getService(Components.interfaces.nsIPromptService);
342
- promptService.alert(window, this.strings.getString("helloMessageTitle"),
343
- this.strings.getString("helloMessage"));
345
- onAttrModified: function(e) {
346
- var labelGetUbuntu = document.getElementById("getUbuntu");
347
- var extensions = document.getElementById("extensions-view");
349
- if (!ubufoxCheckExecutable("/usr/bin/gnome-app-install")) {
350
- labelGetUbuntu.setAttribute("hidden", "true");
353
- if (extensions.getAttribute("selected") != "true") {
354
- labelGetUbuntu.setAttribute("hidden", "true");
356
- if (extensions.getAttribute("selected") == "true") {
357
- labelGetUbuntu.setAttribute("hidden", "false");
361
-window.addEventListener("load", function(e) { ubufox.onAddonsLoad(e); }, false);
363
-function startUbuntuAddonsWizard(ev)
366
- Components.classes['@mozilla.org/file/local;1']
367
- .createInstance(Components.interfaces.nsILocalFile);
369
- executable.initWithPath("/usr/bin/gnome-app-install");
371
- if(!executable.exists() || !executable.isExecutable())
372
- alert('Unexpected error!');
375
- Components.classes['@mozilla.org/process/util;1']
376
- .createInstance(Components.interfaces.nsIProcess);
378
- var nsFile = executable.QueryInterface(Components.interfaces.nsIFile);
380
- procUtil.init(executable);
382
- var args = new Array("--xul-extensions=firefox");
383
- // we care for firefox 2 and use a special mime type to document
384
- // compatibility of extensions with it
385
- if (!ubufox.isffox3) {
386
- args = new Array("--xul-extensions=firefox-2");
388
- var res = procUtil.run(false, args, args.length);
393
function ubufoxReportBug(event) {
396
@@ -182,14 +102,3 @@ function ubufoxHelpTranslateLaunchpad(ev
397
var translateUrl = "https://launchpad.net/distros/ubuntu/maverick/+sources/" + getSourcePackageName() + "/+translate";
398
openUILink(translateUrl, event, false, true);
401
-function ubufoxCheckExecutable(filename)
404
- Components.classes['@mozilla.org/file/local;1']
405
- .createInstance(Components.interfaces.nsILocalFile);
407
- executable.initWithPath(filename);
408
- return executable.exists();
411
--- a/content/pluginInstallerDatasource.js
412
+++ b/content/pluginInstallerDatasource.js
414
const RDF_NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
415
const PFS_NS = "http://www.mozilla.org/2004/pfs-rdf#";
417
-function nsRDFItemUpdater(aClientOS, aChromeLocale){
418
+function nsRDFItemUpdater(aClientOS, aChromeLocale) {
419
this._rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"]
420
- .getService(Components.interfaces.nsIRDFService);
421
+ .getService(Components.interfaces.nsIRDFService);
422
this._os = Components.classes["@mozilla.org/observer-service;1"]
423
.getService(Components.interfaces.nsIObserverService);
425
@@ -49,6 +49,7 @@ function nsRDFItemUpdater(aClientOS, aCh
426
.getService(Components.interfaces.nsIXULAppInfo);
428
this.buildID = app.platformBuildID;
429
+ this.appRelease = app.version;
431
this.clientOS = aClientOS;
432
this.chromeLocale = aChromeLocale;
433
@@ -56,17 +57,20 @@ function nsRDFItemUpdater(aClientOS, aCh
434
var prefBranch = Components.classes["@mozilla.org/preferences-service;1"]
435
.getService(Components.interfaces.nsIPrefBranch);
436
this.dsURI = prefBranch.getCharPref("pfs.datasource.url");
437
+ this.distID = prefBranch.getCharPref("general.useragent.vendorSub");
440
nsRDFItemUpdater.prototype = {
441
- checkForPlugin: function (aPluginRequestItem){
442
+ checkForPlugin: function (aPluginRequestItem) {
443
var dsURI = this.dsURI;
444
// escape the mimetype as mimetypes can contain '+', which will break pfs.
445
dsURI = dsURI.replace(/%PLUGIN_MIMETYPE%/g, encodeURIComponent(aPluginRequestItem.mimetype));
446
dsURI = dsURI.replace(/%APP_ID%/g, this.appID);
447
dsURI = dsURI.replace(/%APP_VERSION%/g, this.buildID);
448
+ dsURI = dsURI.replace(/%APP_RELEASE%/g, this.appRelease);
449
dsURI = dsURI.replace(/%CLIENT_OS%/g, this.clientOS);
450
dsURI = dsURI.replace(/%CHROME_LOCALE%/g, this.chromeLocale);
451
+ dsURI = dsURI.replace(/%DIST_ID%/g, this.distID);
453
var ds = this._rdfService.GetDataSource(dsURI);
454
var rds = ds.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource)
455
@@ -78,14 +82,13 @@ nsRDFItemUpdater.prototype = {
459
- onDatasourceLoaded: function pfs_onDatasourceLoaded (aDatasource, aPluginRequestItem){
460
- var container = Components.classes["@mozilla.org/rdf/container;1"].
461
- createInstance(Components.interfaces.nsIRDFContainer);
462
+ onDatasourceLoaded: function pfs_onDatasourceLoaded (aDatasource, aPluginRequestItem) {
463
+ var container = Components.classes["@mozilla.org/rdf/container;1"]
464
+ .createInstance(Components.interfaces.nsIRDFContainer);
465
var resultRes = this._rdfService.GetResource("urn:mozilla:plugin-results:" + aPluginRequestItem.mimetype);
466
var pluginList = aDatasource.GetTarget(resultRes, this._rdfService.GetResource(PFS_NS+"plugins"), true);
467
var pluginInfos = new Array();
469
- container = Components.classes["@mozilla.org/rdf/container;1"].createInstance(Components.interfaces.nsIRDFContainer);
472
container.Init(aDatasource, pluginList);
474
@@ -95,7 +98,7 @@ nsRDFItemUpdater.prototype = {
477
var child = children.getNext();
478
- if (child instanceof Components.interfaces.nsIRDFResource){
479
+ if (child instanceof Components.interfaces.nsIRDFResource) {
480
var name = this._rdfService.GetResource("http://www.mozilla.org/2004/pfs-rdf#updates");
481
target = aDatasource.GetTarget(child, name, true);
483
@@ -107,13 +110,13 @@ nsRDFItemUpdater.prototype = {
485
while (children2.hasMoreElements()) {
486
var child2 = children2.getNext();
487
- if (child2 instanceof Components.interfaces.nsIRDFResource){
488
+ if (child2 instanceof Components.interfaces.nsIRDFResource) {
492
var rdfs = this._rdfService;
494
- function getPFSValueFromRDF(aValue){
495
+ function getPFSValueFromRDF(aValue) {
498
var myTarget = aDatasource.GetTarget(target2, rdfs.GetResource(PFS_NS + aValue), true);
499
@@ -128,6 +131,7 @@ nsRDFItemUpdater.prototype = {
500
pid: getPFSValueFromRDF("guid"),
501
version: getPFSValueFromRDF("version"),
502
IconUrl: getPFSValueFromRDF("IconUrl"),
503
+ InstallerLocation: getPFSValueFromRDF("InstallerLocation"),
504
desc: getPFSValueFromRDF("description"),
505
homepage: getPFSValueFromRDF("homepage"),
506
XPILocation: getPFSValueFromRDF("XPILocation"),
507
@@ -140,24 +144,32 @@ nsRDFItemUpdater.prototype = {
508
fileHint: getPFSValueFromRDF("filehint")
511
+ // no license provided, make it accepted
512
+ pluginInfo.licenseAccepted = pluginInfo.licenseURL ? false : true;
514
pluginInfos.push(pluginInfo);
519
+ Components.utils.reportError(ex);
525
+ Components.utils.reportError(ex);
528
- gPluginInstaller.pluginInfoReceived(pluginInfos);
529
+ gPluginInstaller.pluginInfoReceived(aPluginRequestItem, pluginInfos);
532
- onDatasourceError: function pfs_onDatasourceError (aPluginRequestItem, aError){
533
+ onDatasourceError: function pfs_onDatasourceError (aPluginRequestItem, aError) {
534
this._os.notifyObservers(aPluginRequestItem, "error", aError);
535
- gPluginInstaller.pluginInfoReceived(null);
537
+ Components.utils.reportError(aError);
538
+ gPluginInstaller.pluginInfoReceived(aPluginRequestItem, null);
542
-function nsPluginXMLRDFDSObserver(aUpdater, aPluginRequestItem){
543
+function nsPluginXMLRDFDSObserver(aUpdater, aPluginRequestItem) {
544
this._updater = aUpdater;
545
this._item = aPluginRequestItem;
547
@@ -168,17 +180,17 @@ nsPluginXMLRDFDSObserver.prototype =
550
// nsIRDFXMLSinkObserver
551
- onBeginLoad: function(aSink){},
552
- onInterrupt: function(aSink){},
553
- onResume: function(aSink){},
554
- onEndLoad: function(aSink){
555
+ onBeginLoad: function(aSink) {},
556
+ onInterrupt: function(aSink) {},
557
+ onResume: function(aSink) {},
558
+ onEndLoad: function(aSink) {
559
aSink.removeXMLSinkObserver(this);
561
var ds = aSink.QueryInterface(Components.interfaces.nsIRDFDataSource);
562
this._updater.onDatasourceLoaded(ds, this._item);
565
- onError: function(aSink, aStatus, aErrorMsg){
566
+ onError: function(aSink, aStatus, aErrorMsg) {
567
aSink.removeXMLSinkObserver(this);
568
this._updater.onDatasourceError(this._item, aStatus.toString());
570
--- a/content/pluginInstallerService.js
571
+++ b/content/pluginInstallerService.js
574
* ***** END LICENSE BLOCK ***** */
576
-var PluginXPIInstallService = {
579
+Components.utils.import("resource://gre/modules/AddonManager.jsm");
581
+const DOWNLOAD_STARTED = 0;
582
+const DOWNLOAD_FINISHED = 1;
583
+const INSTALL_STARTED = 2;
584
+const INSTALL_FINISHED = 3;
585
+const INSTALLS_COMPLETE = 4;
587
+function getLocalizedError(key)
589
+ return document.getElementById("xpinstallStrings").getString(key);
592
+function binaryToHex(input)
594
+ return [('0' + input.charCodeAt(i).toString(16)).slice(-2)
595
+ for (i in input)].join('');
598
+function verifyHash(aFile, aHash)
601
+ var [, method, hash] = /^([A-Za-z0-9]+):(.*)$/.exec(aHash);
603
+ var fis = Components.classes['@mozilla.org/network/file-input-stream;1'].
604
+ createInstance(Components.interfaces.nsIFileInputStream);
605
+ fis.init(aFile, -1, -1, 0);
607
+ var hasher = Components.classes['@mozilla.org/security/hash;1'].
608
+ createInstance(Components.interfaces.nsICryptoHash);
609
+ hasher.initWithString(method);
610
+ hasher.updateFromStream(fis, -1);
611
+ dlhash = binaryToHex(hasher.finish(false));
612
+ return dlhash == hash;
615
+ Components.utils.reportError(e);
620
+function InstallerObserver(aPlugin)
622
+ this._plugin = aPlugin;
626
+InstallerObserver.prototype = {
630
+ var ios = Components.classes["@mozilla.org/network/io-service;1"].
631
+ getService(Components.interfaces.nsIIOService);
632
+ var uri = ios.newURI(this._plugin.InstallerLocation, null, null);
633
+ uri.QueryInterface(Components.interfaces.nsIURL);
635
+ // Use a local filename appropriate for the OS
636
+ var leafName = uri.fileName;
637
+ var os = Components.classes["@mozilla.org/xre/app-info;1"]
638
+ .getService(Components.interfaces.nsIXULRuntime)
640
+ if (os == "WINNT" && leafName.indexOf(".") < 0)
641
+ leafName += ".exe";
643
+ var dirs = Components.classes["@mozilla.org/file/directory_service;1"].
644
+ getService(Components.interfaces.nsIProperties);
646
+ var resultFile = dirs.get("TmpD", Components.interfaces.nsIFile);
647
+ resultFile.append(leafName);
648
+ resultFile.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE,
651
+ var channel = ios.newChannelFromURI(uri);
653
+ Components.classes["@mozilla.org/network/downloader;1"].
654
+ createInstance(Components.interfaces.nsIDownloader);
655
+ this._downloader.init(this, resultFile);
656
+ channel.notificationCallbacks = this;
658
+ this._fireNotification(DOWNLOAD_STARTED, null);
660
+ channel.asyncOpen(this._downloader, null);
663
+ Components.utils.reportError(e);
664
+ this._fireNotification(INSTALL_FINISHED, getLocalizedError("error-228"));
665
+ if (resultFile && resultFile.exists())
666
+ resultfile.remove(false);
670
- pluginPidArray: null,
672
+ * Inform the gPluginInstaller about what's going on.
674
+ _fireNotification: function(aStatus, aErrorMsg)
676
+ gPluginInstaller.pluginXPIInstallationProgress(this._plugin.pid,
677
+ aStatus, aErrorMsg);
679
- startPluginInstallation: function (aPluginXPIUrlsArray,
682
- this.pluginPidArray = aPluginPidArray;
684
- var xpiManager = Components.classes["@mozilla.org/xpinstall/install-manager;1"]
685
- .createInstance(Components.interfaces.nsIXPInstallManager);
686
- xpiManager.initManagerWithHashes(aPluginXPIUrlsArray, aPluginHashes,
687
- aPluginXPIUrlsArray.length, this);
690
- // XPI progress listener stuff
691
- onStateChange: function (aIndex, aState, aValue)
693
- // get the pid to return to the wizard
694
- var pid = this.pluginPidArray[aIndex];
697
- if (aState == Components.interfaces.nsIXPIProgressDialog.INSTALL_DONE) {
699
- var xpinstallStrings = document.getElementById("xpinstallStrings");
701
- errorMsg = xpinstallStrings.getString("error" + aValue);
704
- errorMsg = xpinstallStrings.getFormattedString("unknown.error", [aValue]);
705
+ if (aStatus == INSTALL_FINISHED) {
706
+ --PluginInstallService._installersPending;
707
+ PluginInstallService._fireFinishedNotification();
711
+ QueryInterface: function(iid)
713
+ if (iid.equals(Components.interfaces.nsISupports) ||
714
+ iid.equals(Components.interfaces.nsIInterfaceRequestor) ||
715
+ iid.equals(Components.interfaces.nsIDownloadObserver) ||
716
+ iid.equals(Components.interfaces.nsIProgressEventSink))
719
+ throw Components.results.NS_ERROR_NO_INTERFACE;
722
+ getInterface: function(iid)
724
+ if (iid.equals(Components.interfaces.nsIProgressEventSink))
730
+ onDownloadComplete: function(downloader, request, ctxt, status, result)
732
+ if (!Components.isSuccessCode(status)) {
733
+ // xpinstall error 228 is "Download Error"
734
+ this._fireNotification(INSTALL_FINISHED, getLocalizedError("error-228"));
735
+ result.remove(false);
739
+ this._fireNotification(DOWNLOAD_FINISHED);
741
+ if (this._plugin.InstallerHash &&
742
+ !verifyHash(result, this._plugin.InstallerHash)) {
743
+ // xpinstall error 261 is "Invalid file hash..."
744
+ this._fireNotification(INSTALL_FINISHED, getLocalizedError("error-261"));
745
+ result.remove(false);
749
+ this._fireNotification(INSTALL_STARTED);
751
+ result.QueryInterface(Components.interfaces.nsILocalFile);
753
+ // Make sure the file is executable
754
+ result.permissions = 0770;
755
+ var process = Components.classes["@mozilla.org/process/util;1"]
756
+ .createInstance(Components.interfaces.nsIProcess);
757
+ process.init(result);
759
+ process.runAsync([], 0, {
760
+ observe: function(subject, topic, data) {
761
+ if (topic != "process-finished") {
762
+ Components.utils.reportError("Failed to launch installer");
763
+ self._fireNotification(INSTALL_FINISHED,
764
+ getLocalizedError("error-207"));
766
+ else if (process.exitValue != 0) {
767
+ Components.utils.reportError("Installer returned exit code " + process.exitValue);
768
+ self._fireNotification(INSTALL_FINISHED,
769
+ getLocalizedError("error-203"));
772
+ self._fireNotification(INSTALL_FINISHED, null);
774
+ result.remove(false);
780
+ Components.utils.reportError(e);
781
+ this._fireNotification(INSTALL_FINISHED, getLocalizedError("error-207"));
782
+ result.remove(false);
786
- gPluginInstaller.pluginXPIInstallationProgress(pid, aState, errorMsg);
787
+ onProgress: function(aRequest, aContext, aProgress, aProgressMax)
789
+ gPluginInstaller.pluginInstallationProgressMeter(this._plugin.pid,
794
+ onStatus: function(aRequest, aContext, aStatus, aStatusArg)
800
+var PluginInstallService = {
803
+ * Start installation of installers and XPI plugins.
804
+ * @param aInstallerPlugins An array of objects which should have the
805
+ * properties "pid", "InstallerLocation",
806
+ * and "InstallerHash"
807
+ * @param aXPIPlugins An array of objects which should have the
808
+ * properties "pid", "XPILocation",
811
+ startPluginInstallation: function (aInstallerPlugins,
814
+ this._xpiPlugins = aXPIPlugins;
815
+ this._xpisPending = aXPIPlugins.length;
817
+ aXPIPlugins.forEach(function(plugin) {
818
+ AddonManager.getInstallForURL(plugin.XPILocation, function(install) {
819
+ install.addListener(PluginInstallService);
821
+ }, "application/x-xpinstall", plugin.XPIHash);
824
+ // InstallerObserver may finish immediately so we must initialise the
825
+ // installers after setting the number of installers and xpis pending
826
+ this._installersPending = aInstallerPlugins.length;
827
+ this._installerPlugins = [new InstallerObserver(plugin)
828
+ for each (plugin in aInstallerPlugins)];
831
- onProgress: function (aIndex, aValue, aMaxValue)
832
+ _fireFinishedNotification: function()
834
- // get the pid to return to the wizard
835
- var pid = this.pluginPidArray[aIndex];
836
+ if (this._installersPending == 0 && this._xpisPending == 0)
837
+ gPluginInstaller.pluginXPIInstallationProgress(null, INSTALLS_COMPLETE, null);
840
+ getPidForInstall: function(install) {
841
+ for (let i = 0; i < this._xpiPlugins.length; i++) {
842
+ if (install.sourceURI.spec == this._xpiPlugins[i].XPILocation)
843
+ return this._xpiPlugins[i].pid;
848
+ // InstallListener interface
849
+ onDownloadStarted: function(install) {
850
+ var pid = this.getPidForInstall(install);
851
+ gPluginInstaller.pluginXPIInstallationProgress(pid, DOWNLOAD_STARTED, null);
854
+ onDownloadProgress: function(install) {
855
+ var pid = this.getPidForInstall(install);
856
+ gPluginInstaller.pluginXPIInstallationProgressMeter(pid, install.progress,
857
+ install.maxProgress);
860
+ onDownloadEnded: function(install) {
861
+ var pid = this.getPidForInstall(install);
862
+ gPluginInstaller.pluginXPIInstallationProgress(pid, DOWNLOAD_FINISHED, null);
865
+ onDownloadFailed: function(install) {
866
+ var pid = this.getPidForInstall(install);
867
+ switch (install.error) {
868
+ case AddonManager.ERROR_NETWORK_FAILURE:
869
+ var errorMsg = getLocalizedError("error-228");
871
+ case AddonManager.ERROR_INCORRECT_HASH:
872
+ var errorMsg = getLocalizedError("error-261");
874
+ case AddonManager.ERROR_CORRUPT_FILE:
875
+ var errorMsg = getLocalizedError("error-207");
878
+ gPluginInstaller.pluginXPIInstallationProgress(pid, INSTALL_FINISHED, errorMsg);
880
+ this._xpisPending--;
881
+ this._fireFinishedNotification();
884
+ onInstallStarted: function(install) {
885
+ var pid = this.getPidForInstall(install);
886
+ gPluginInstaller.pluginXPIInstallationProgress(pid, INSTALL_STARTED, null);
889
+ onInstallEnded: function(install, addon) {
890
+ var pid = this.getPidForInstall(install);
891
+ gPluginInstaller.pluginXPIInstallationProgress(pid, INSTALL_FINISHED, null);
893
+ this._xpisPending--;
894
+ this._fireFinishedNotification();
897
+ onInstallFailed: function(install) {
898
+ var pid = this.getPidForInstall(install);
899
+ gPluginInstaller.pluginXPIInstallationProgress(pid, INSTALL_FINISHED,
900
+ getLocalizedError("error-203"));
902
- gPluginInstaller.pluginXPIInstallationProgressMeter(pid, aValue, aMaxValue);
903
+ this._xpisPending--;
904
+ this._fireFinishedNotification();
908
@@ -95,13 +340,11 @@ var AptInstaller = {
912
- install: function(aAptUrlArray,
914
+ install: function(aAptPlugins,
915
aAptInstallerService) {
917
this.mAptInstallerService = aAptInstallerService;
918
- this.mAptUrlArray = aAptUrlArray;
919
- this.mAptPidArray = aAptPidArray;
920
+ this.mAptPlugins = aAptPlugins;
921
this.mRunning = true;
923
// var thread = Components.classes["@mozilla.org/thread;1"]
924
@@ -112,9 +355,9 @@ var AptInstaller = {
928
- for (var i = 0; i < this.mAptUrlArray.length; i++) {
929
- var aptUrl = this.mAptUrlArray[i];
930
- var aptPid = this.mAptPidArray[i];
931
+ for (var i = 0; i < this.mAptPlugins.length; i++) {
932
+ var aptUrl = this.mAptPlugins[i].XPILocation;
933
+ var aptPid = this.mAptPlugins[i].pid;
934
this.mAptInstallerService.onNotifyStart(aptUrl, aptPid);
937
@@ -125,7 +368,7 @@ var AptInstaller = {
939
if(!executable.exists() || !executable.isExecutable()) {
940
window.alert('Unexpected error!');
941
- this.mAptInstallerService.onNotifyResult(aptUrl, aptPid, -1 );
942
+ this.mAptInstallerService.onNotifyResult(aptUrl, aptPid, -1);
946
@@ -181,9 +424,8 @@ var PluginAPTInstallService = {
948
pluginPidArray: null,
950
- startPluginInstallation: function (aPluginAptUrlsArray,
952
- AptInstaller.install(aPluginAptUrlsArray, aPluginPidArray, this);
953
+ startPluginInstallation: function (aAptPlugins) {
954
+ AptInstaller.install(aAptPlugins, this);
957
onNotifyStart: function (aptUrl, aptPid) {
958
--- a/content/pluginInstallerWizard.js
959
+++ b/content/pluginInstallerWizard.js
960
@@ -64,14 +64,15 @@ function nsPluginInstallerWizard(){
961
// how many plugins are to be installed
962
this.pluginsToInstallNum = 0;
965
this.mBrowser = null;
966
this.mSuccessfullPluginInstallation = 0;
967
+ this.mNeedsRestart = false;
969
this.mPluginPidArray = new Object();
970
// arguments[0] is an array that contains two items:
971
// an array of mimetypes that are missing
972
- // a reference to the tab that needs them, so we can reload it
973
+ // a reference to the browser that needs them,
974
+ // so we can notify which browser can be reloaded.
976
if ("arguments" in window) {
977
for (var item in window.arguments[0].plugins){
978
@@ -81,8 +82,7 @@ function nsPluginInstallerWizard(){
979
this.mPluginRequestArrayLength++;
982
- this.mBrowser = window.arguments[0].browser; // ffox 3
983
- this.mTab = window.arguments[0].tab; // ffox 2
984
+ this.mBrowser = window.arguments[0].browser;
987
this.WSPluginCounter = 0;
988
@@ -100,14 +100,14 @@ nsPluginInstallerWizard.prototype.getPlu
989
// initiate the datasource call
990
var rdfUpdater = new nsRDFItemUpdater(this.getOS(), this.getChromeLocale());
992
- for (item in this.mPluginRequestArray) {
993
+ for (var item in this.mPluginRequestArray) {
994
rdfUpdater.checkForPlugin(this.mPluginRequestArray[item]);
998
// aPluginInfo is null if the datasource call failed, and pid is -1 if
999
// no matching plugin was found.
1000
-nsPluginInstallerWizard.prototype.pluginInfoReceived = function (aPluginInfos){
1001
+nsPluginInstallerWizard.prototype.pluginInfoReceived = function (aPluginRequestItem, aPluginInfos){
1002
this.WSPluginCounter++;
1004
if (aPluginInfos ) {
1005
@@ -121,7 +121,7 @@ nsPluginInstallerWizard.prototype.plugin
1006
aPluginInfo = aPluginInfos[i];
1007
resultSetMimeType = aPluginInfo.requestedMimetype;
1008
if (aPluginInfo && aPluginInfo.pid != -1 &&
1009
- ( aPluginInfo.XPILocation || aPluginInfo.manualInstallationURL )) {
1010
+ ( aPluginInfo.XPILocation || aPluginInfo.manualInstallationURL || aPluginInfo.InstallerLocation)) {
1012
filteredPluginInfoSet.push(aPluginInfo);
1013
this.mPluginPidArray[aPluginInfo.pid] = aPluginInfo;
1014
@@ -130,10 +130,10 @@ nsPluginInstallerWizard.prototype.plugin
1016
if(filteredPluginInfoSet.length > 0)
1018
- this.mPluginInfoArray[resultSetMimeType] = filteredPluginInfoSet;
1019
+ this.mPluginInfoArray[aPluginRequestItem.mimetype] = filteredPluginInfoSet;
1020
this.mPluginInfoArrayLength++;
1022
- this.mPluginNotFoundArray[resultSetMimeType] = filteredPluginInfoSet;
1023
+ this.mPluginNotFoundArray[aPluginRequestItem.mimetype] = aPluginRequestItem;
1024
this.mPluginNotFoundArrayLength++;
1027
@@ -148,18 +148,18 @@ nsPluginInstallerWizard.prototype.plugin
1029
if (this.WSPluginCounter == this.mPluginRequestArrayLength) {
1030
// check if no plugins were found
1031
- if (this.mPluginInfoArrayLength == 0 && this.mPluginInfoAptArrayLength == 0) {
1032
- this.advancePage("lastpage", true, false, false);
1033
+ if (this.mPluginInfoArrayLength == 0) {
1034
+ this.advancePage("lastpage");
1036
// we want to allow user to cancel
1037
- this.advancePage(null, true, false, true);
1038
+ this.advancePage(null);
1045
-nsPluginInstallerWizard.prototype.createPluginSetGroupBox = function () {
1046
+nsPluginInstallerWizard.prototype.createPluginSetGroupBox = function (mimetype) {
1048
var stringBundle = document.getElementById("ubufoxPluginWizardString");
1049
var gbox = document.createElement("vbox");
1050
@@ -193,11 +193,11 @@ nsPluginInstallerWizard.prototype.showPl
1051
var groupBox = null;
1052
var lastSibling = null;
1054
- for (mimetype in this.mPluginInfoArray){
1055
+ for (var mimetype in this.mPluginInfoArray){
1056
// [plugin image] [Plugin_Name Plugin_Version]
1057
var pluginInfoSet = this.mPluginInfoArray[mimetype];
1058
var firstPluginSet = (groupBox == null);
1059
- groupBox = this.createPluginSetGroupBox(document, mimetype, pluginInfoSet);
1060
+ groupBox = this.createPluginSetGroupBox(mimetype);
1062
if(firstPluginSet) {
1063
this.mPluginPlaceHolder = document.getElementById("pluginselection-placeholder");
1064
@@ -275,6 +275,7 @@ nsPluginInstallerWizard.prototype.showPl
1065
if (pluginInfo.InstallerShowsUI == "true")
1066
hasPluginWithInstallerUI = true;
1068
+ // keep a running count of plugins the user wants to install
1069
this.pluginsToInstallNum++;
1072
@@ -290,14 +291,14 @@ nsPluginInstallerWizard.prototype.toggle
1073
var mime = selectedItem._ubufoxPluginInfoMimeType;
1074
this.mMimeTypePluginSelections[mime] = selectedItem._ubufoxPluginInfo.pid;
1077
- for (mime in this.mMimeTypePluginSelections) {
1078
+ this.pluginsToInstallNum = 0;
1079
+ for (var mime in this.mMimeTypePluginSelections) {
1080
if(this.mMimeTypePluginSelections[mime] && this.mMimeTypePluginSelections[mime] != "-1")
1082
+ this.pluginsToInstallNum++;
1085
// if no plugins are checked, don't allow to advance
1087
+ if (this.pluginsToInstallNum > 0)
1088
this.canAdvance(true);
1090
this.canAdvance(false);
1091
@@ -321,7 +322,7 @@ nsPluginInstallerWizard.prototype.showLi
1093
// only add if a license is provided and the plugin was selected to
1095
- for (mimetype in this.mMimeTypePluginSelections){
1096
+ for (var mimetype in this.mMimeTypePluginSelections){
1097
var pid = this.mMimeTypePluginSelections[mimetype];
1098
var pluginInfo = this.mPluginPidArray[pid];
1099
if (pluginInfo && pluginInfo.licenseURL && (pluginInfo.licenseURL != "")) {
1100
@@ -331,7 +332,7 @@ nsPluginInstallerWizard.prototype.showLi
1102
if (this.mPluginLicenseArray.length == 0) {
1103
// no plugins require licenses
1104
- this.advancePage(null, true, false, false);
1105
+ this.advancePage(null);
1107
this.licenseAcceptCounter = 0;
1109
@@ -389,7 +390,7 @@ nsPluginInstallerWizard.prototype.showLi
1111
this.canAdvance(false);
1113
- loadFlags = Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE;
1114
+ var loadFlags = Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE;
1116
document.getElementById("licenseIFrame").webNavigation.loadURI(pluginInfo.licenseURL, loadFlags, null, null, null);
1118
@@ -447,60 +448,46 @@ nsPluginInstallerWizard.prototype.licens
1119
this.canAdvance(aAccepted);
1122
-nsPluginInstallerWizard.prototype.advancePage = function (aPageId, aCanAdvance, aCanRewind, aCanCancel){
1123
+nsPluginInstallerWizard.prototype.advancePage = function (aPageId){
1124
this.canAdvance(true);
1125
document.getElementById("plugin-installer-wizard").advance(aPageId);
1127
- this.canAdvance(aCanAdvance);
1128
- this.canRewind(aCanRewind);
1129
- this.canCancel(aCanCancel);
1132
nsPluginInstallerWizard.prototype.startPluginInstallation = function (){
1133
this.canAdvance(false);
1134
this.canRewind(false);
1136
- // since the user can choose what plugins to install, we need to store
1137
- // which ones were choosen, as nsIXPInstallManager returns an index and not the
1138
- // mimetype. So store the pids.
1140
- // for ubutfox we deal with multiple cases: first case is XPIInstall, which will
1141
+ // for ubufox we deal with multiple cases: first case is XPIInstall, which will
1142
// run the "normal" XPIInstall process; second case is XPIInstall url contains
1143
// and apt: protocol url ... this will run apt protocol handler
1144
- var pluginURLArray = new Array();
1145
- var pluginHashArray = new Array();
1146
- var pluginPidArray = new Array();
1147
- this.mAptPluginURLArray = new Array();
1148
- this.mAptPluginPidArray = new Array();
1150
- for (mime in this.mMimeTypePluginSelections) {
1151
- var pluginPid = this.mMimeTypePluginSelections[mime];
1152
- var pluginItem = this.mPluginPidArray[pluginPid];
1154
- // only push to the array if it has an XPILocation, else nsIXPInstallManager
1156
- if (pluginItem && pluginItem.XPILocation && pluginItem.XPILocation.indexOf("apt:") != 0 && pluginItem.licenseAccepted) {
1157
- pluginURLArray.push(pluginItem.XPILocation);
1158
- pluginHashArray.push(pluginItem.XPIHash);
1159
- pluginPidArray.push(pluginItem.pid);
1160
- } else if (pluginItem && pluginItem.XPILocation && pluginItem.XPILocation.indexOf("apt:") == 0) {
1161
- this.mAptPluginURLArray.push(pluginItem.XPILocation);
1162
- this.mAptPluginPidArray.push(pluginPid);
1164
- window.alert("Unhandled mime install flavour (supported: vendor, apt)");
1166
+ var installerPlugins = [];
1167
+ var xpiPlugins = [];
1168
+ this.aptPlugins = [];
1170
+ for (var mime in this.mMimeTypePluginSelections) {
1171
+ var pluginItem = this.mPluginPidArray[this.mMimeTypePluginSelections[mime]];
1173
+ if (pluginItem && pluginItem.licenseAccepted) {
1174
+ if (pluginItem.InstallerLocation)
1175
+ installerPlugins.push(pluginItem);
1176
+ else if (pluginItem.XPILocation && pluginItem.XPILocation.indexOf("apt:") != 0)
1177
+ xpiPlugins.push(pluginItem);
1178
+ else if (pluginItem.XPILocation && pluginItem.XPILocation.indexOf("apt:") == 0)
1179
+ this.aptPlugins.push(pluginItem);
1181
+ window.alert("Unhandled mime install flavour (supported: vendor, apt)");
1187
- if (pluginURLArray.length > 0)
1188
- PluginXPIInstallService.startPluginInstallation(pluginURLArray,
1191
- else if (this.mAptPluginURLArray.length > 0)
1192
- PluginAPTInstallService.startPluginInstallation(this.mAptPluginURLArray,
1193
- this.mAptPluginPidArray);
1194
+ if (installerPlugins.length > 0 || xpiPlugins.length > 0)
1195
+ PluginXPIInstallService.startPluginInstallation(installerPlugins,
1197
+ else if (this.aptPlugins.length > 0)
1198
+ PluginAPTInstallService.startPluginInstallation(this.aptPlugins);
1200
- this.advancePage(null, true, false, false);
1201
+ this.advancePage(null);
1205
@@ -530,6 +517,8 @@ nsPluginInstallerWizard.prototype.plugin
1208
statMsg = this.getFormattedString("pluginInstallation.install.start", [pluginInfo.name]);
1209
+ var progressElm = document.getElementById("plugin_install_progress");
1210
+ progressElm.setAttribute("mode", "undetermined");
1213
statMsg = "APT - " + this.getFormattedString("pluginInstallation.install.start", [pluginInfo.name]);
1214
@@ -555,11 +544,10 @@ nsPluginInstallerWizard.prototype.plugin
1218
- PluginAPTInstallService.startPluginInstallation(this.mAptPluginURLArray,
1219
- this.mAptPluginPidArray);
1220
+ PluginAPTInstallService.startPluginInstallation(this.aptPlugins);
1223
- this.advancePage(null, true, false, false);
1224
+ this.advancePage(null);
1225
statMsg = this.getString("pluginInstallation.complete");
1228
@@ -630,15 +618,12 @@ nsPluginInstallerWizard.prototype.showPl
1229
var notInstalledList = "?action=missingplugins";
1230
var myRows = document.getElementById("pluginResultList");
1232
- this.mNeedsRestart = false;
1235
for (var run = myRows.childNodes.length; run--; run > 0)
1236
myRows.removeChild(myRows.childNodes.item(run));
1238
- for (mimetype in this.mMimeTypePluginSelections) {
1239
- var pid = this.mMimeTypePluginSelections[mimetype];
1240
- var pluginInfoItem = this.mPluginPidArray[pid];
1241
+ for (var mimetype in this.mMimeTypePluginSelections) {
1242
+ var pluginInfoItem = this.mPluginPidArray[this.mMimeTypePluginSelections[mimetype]];
1243
// [plugin image] [Plugin_Name Plugin_Version] [Success/Failed] [Manual Install (if Failed)]
1245
var myPluginItem = pluginInfoItem; //this.mPluginInfoArray[pluginInfoItem];
1246
@@ -651,7 +636,7 @@ nsPluginInstallerWizard.prototype.showPl
1247
notInstalledList += "&mimetype=" + pluginInfoItem;
1248
} else if (myPluginItem.licenseURL && !myPluginItem.licenseAccepted) {
1249
statusMsg = this.getString("pluginInstallationSummary.licenseNotAccepted");
1250
- } else if (!myPluginItem.XPILocation) {
1251
+ } else if (!myPluginItem.XPILocation && !myPluginItem.InstallerLocation) {
1252
statusMsg = this.getString("pluginInstallationSummary.notAvailable");
1253
notInstalledList += "&mimetype=" + pluginInfoItem;
1255
@@ -660,12 +645,12 @@ nsPluginInstallerWizard.prototype.showPl
1257
// only check needsRestart if the plugin was successfully installed.
1258
if (myPluginItem.needsRestart)
1259
- this.mNeedsRestart = false;
1260
+ this.mNeedsRestart = true;
1263
// manual url - either returned from the webservice or the pluginspage attribute
1265
- if ((myPluginItem.error || !myPluginItem.XPILocation) && (myPluginItem.manualInstallationURL || this.mPluginRequestArray[myPluginItem.requestedMimetype].pluginsPage)){
1266
+ if ((myPluginItem.error || (!myPluginItem.XPILocation && !myPluginItem.InstallerLocation)) && (myPluginItem.manualInstallationURL || this.mPluginRequestArray[myPluginItem.requestedMimetype].pluginsPage)){
1267
manualUrl = myPluginItem.manualInstallationURL ? myPluginItem.manualInstallationURL : this.mPluginRequestArray[myPluginItem.requestedMimetype].pluginsPage;
1270
@@ -680,10 +665,10 @@ nsPluginInstallerWizard.prototype.showPl
1272
// handle plugins we couldn't find
1273
for (pluginInfoItem in this.mPluginNotFoundArray){
1274
- var pluginRequest = this.mPluginRequestArray[pluginInfoItem];
1275
+ var pluginRequest = this.mPluginNotFoundArray[pluginInfoItem];
1277
// if there is a pluginspage, show UI
1278
- if (pluginRequest) {
1279
+ if (pluginRequest.pluginsPage) {
1280
this.addPluginResultRow(
1282
this.getFormattedString("pluginInstallation.unknownPlugin", [pluginInfoItem]),
1283
@@ -716,28 +701,43 @@ nsPluginInstallerWizard.prototype.showPl
1284
"&appID=" + app.ID +
1285
"&appVersion=" + app.platformBuildID +
1286
"&clientOS=" + this.getOS() +
1287
- "&chromeLocale=" + this.getChromeLocale();
1288
+ "&chromeLocale=" + this.getChromeLocale() +
1289
+ "&appRelease=" + app.version;
1291
document.getElementById("moreInfoLink").addEventListener("click", function() { gPluginInstaller.loadURL("https://pfs.mozilla.org/plugins/" + notInstalledList) }, false);
1293
+ if (this.mNeedsRestart) {
1294
+ var cancel = document.getElementById("plugin-installer-wizard").getButton("cancel");
1295
+ cancel.label = this.getString("pluginInstallation.close.label");
1296
+ cancel.accessKey = this.getString("pluginInstallation.close.accesskey");
1297
+ var finish = document.getElementById("plugin-installer-wizard").getButton("finish");
1298
+ finish.label = this.getFormattedString("pluginInstallation.restart.label", [app.name]);
1299
+ finish.accessKey = this.getString("pluginInstallation.restart.accesskey");
1300
+ this.canCancel(true);
1303
+ this.canCancel(false);
1306
this.canAdvance(true);
1307
this.canRewind(false);
1308
- this.canCancel(false);
1311
nsPluginInstallerWizard.prototype.loadURL = function (aUrl){
1312
// Check if the page where the plugin came from can load aUrl before
1313
- // loading it, and do *not* allow loading javascript: or data: URIs.
1314
- var pluginPage = window.opener.content.location.href;
1315
+ // loading it, and do *not* allow loading URIs that would inherit our
1318
+ var pluginPagePrincipal =
1319
+ window.opener.content.document.nodePrincipal;
1321
const nsIScriptSecurityManager =
1322
Components.interfaces.nsIScriptSecurityManager;
1324
- Components.classes["@mozilla.org/scriptsecuritymanager;1"]
1325
- .getService(nsIScriptSecurityManager);
1326
+ var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
1327
+ .getService(nsIScriptSecurityManager);
1329
- secMan.checkLoadURIStr(pluginPage, aUrl,
1330
- nsIScriptSecurityManager.DISALLOW_SCRIPT_OR_DATA);
1331
+ secMan.checkLoadURIStrWithPrincipal(pluginPagePrincipal, aUrl,
1332
+ nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL);
1334
window.opener.open(aUrl);
1336
@@ -792,6 +792,8 @@ function PluginInfo(aResult) {
1337
this.pid = aResult.pid;
1338
this.version = aResult.version;
1339
this.IconUrl = aResult.IconUrl;
1340
+ this.InstallerLocation = aResult.InstallerLocation;
1341
+ this.InstallerHash = aResult.InstallerHash;
1342
this.XPILocation = aResult.XPILocation;
1343
this.XPIHash = aResult.XPIHash;
1344
this.InstallerShowsUI = aResult.InstallerShowsUI;
1345
@@ -816,7 +818,6 @@ function wizardInit(){
1348
function wizardFinish(){
1349
- // we restart if we have no choice ...
1350
if (gPluginInstaller.mNeedsRestart) {
1351
// Notify all windows that an application quit has been requested.
1352
var os = Components.classes["@mozilla.org/observer-service;1"]
1353
@@ -835,21 +836,26 @@ function wizardFinish(){
1357
- if (gPluginInstaller.mBrowser) { // ffox 3 code can autoscan ...
1359
- var event = document.createEvent("Events");
1360
- event.initEvent("NewPluginInstalled", true, true);
1361
- var dispatched = gPluginInstaller.mBrowser.dispatchEvent(event);
1363
- else if (gPluginInstaller.mTab) { // ffox 2 code can autoscan ...
1364
- if ((gPluginInstaller.mSuccessfullPluginInstallation > 0) &&
1365
- (gPluginInstaller.mPluginInfoArrayLength != 0)) {
1366
- // clear the tab's plugin list only if we installed at least one plugin
1367
- gPluginInstaller.mTab.missingPlugins = null;
1369
- window.opener.gMissingPluginInstaller.closeNotification();
1370
- // reload the browser to make the new plugin show
1371
- window.opener.getBrowser().reloadTab(gPluginInstaller.mTab);
1372
+ // don't refresh if no plugins were found or installed
1373
+ if ((gPluginInstaller.mSuccessfullPluginInstallation > 0) &&
1374
+ (gPluginInstaller.mPluginInfoArray.length != 0)) {
1376
+ // reload plugins so JS detection works immediately
1378
+ var ph = Components.classes["@mozilla.org/plugin/host;1"]
1379
+ .getService(Components.interfaces.nsIPluginHost);
1380
+ ph.reloadPlugins(false);
1383
+ // reloadPlugins throws an exception if there were no plugins to load
1386
+ if (gPluginInstaller.mBrowser) {
1387
+ // notify listeners that a plugin is installed,
1388
+ // so that they can reset the UI and update the browser.
1389
+ var event = document.createEvent("Events");
1390
+ event.initEvent("NewPluginInstalled", true, true);
1391
+ gPluginInstaller.mBrowser.dispatchEvent(event);
1395
--- a/content/pluginInstallerWizard.xul
1396
+++ b/content/pluginInstallerWizard.xul
1398
onload="wizardInit()"
1399
onwizardfinish="return wizardFinish();">
1401
- <script type="application/x-javascript" src="chrome://ubufox/content/pluginInstallerWizard.js"/>
1402
- <script type="application/x-javascript" src="chrome://ubufox/content/pluginInstallerDatasource.js"/>
1403
- <script type="application/x-javascript" src="chrome://ubufox/content/pluginInstallerService.js"/>
1404
+ <script type="application/javascript" src="chrome://ubufox/content/pluginInstallerWizard.js"/>
1405
+ <script type="application/javascript" src="chrome://ubufox/content/pluginInstallerDatasource.js"/>
1406
+ <script type="application/javascript" src="chrome://ubufox/content/pluginInstallerService.js"/>
1408
<stringbundleset id="pluginSet">
1409
<stringbundle id="brandStrings" src="chrome://branding/locale/brand.properties"/>
1410
--- a/content/ubuntuAddonsOverlay.ffox2.xul
1413
-<?xml version="1.0" encoding="UTF-8"?>
1414
-<!-- ***** BEGIN LICENSE BLOCK *****
1415
- - Version: MPL 1.1/GPL 2.0/LGPL 2.1
1417
- - The contents of this file are subject to the Mozilla Public License Version
1418
- - 1.1 (the "License"); you may not use this file except in compliance with
1419
- - the License. You may obtain a copy of the License at
1420
- - http://www.mozilla.org/MPL/
1422
- - Software distributed under the License is distributed on an "AS IS" basis,
1423
- - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
1424
- - for the specific language governing rights and limitations under the
1427
- - The Original Code is distro-mods.
1429
- - The Initial Developer of the Original Code is
1431
- - Portions created by the Initial Developer are Copyright (C) 2007
1432
- - the Initial Developer. All Rights Reserved.
1436
- - Alternatively, the contents of this file may be used under the terms of
1437
- - either the GNU General Public License Version 2 or later (the "GPL"), or
1438
- - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
1439
- - in which case the provisions of the GPL or the LGPL are applicable instead
1440
- - of those above. If you wish to allow use of your version of this file only
1441
- - under the terms of either the GPL or the LGPL, and not to allow others to
1442
- - use your version of this file under the terms of the MPL, indicate your
1443
- - decision by deleting the provisions above and replace them with the notice
1444
- - and other provisions required by the GPL or the LGPL. If you do not delete
1445
- - the provisions above, a recipient may use your version of this file under
1446
- - the terms of any one of the MPL, the GPL or the LGPL.
1448
- - ***** END LICENSE BLOCK ***** -->
1450
-<?xml-stylesheet href="chrome://ubufox/skin/overlay.css" type="text/css"?>
1451
-<!DOCTYPE overlay SYSTEM "chrome://ubufox/locale/ubufox.dtd">
1452
-<overlay id="ubufox-overlay"
1453
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
1454
- <script src="overlay.js"/>
1455
- <stringbundleset id="stringbundleset">
1456
- <stringbundle id="ubufox-strings" src="chrome://ubufox/locale/ubufox.properties"/>
1457
- </stringbundleset>
1459
- <hbox id="commandBarBottom">
1460
- <label id="getUbuntu" getMoreURL="http://www.google.com" class="text-link"
1461
- onclick="return startUbuntuAddonsWizard(event);"
1462
- onload="ubufoxCheckExecutable();"
1463
- value="&ubufox.getubuntuextension;"/>
1466
--- a/content/ubuntuAddonsOverlay.xul
1469
-<?xml version="1.0" encoding="UTF-8"?>
1470
-<!-- ***** BEGIN LICENSE BLOCK *****
1471
- - Version: MPL 1.1/GPL 2.0/LGPL 2.1
1473
- - The contents of this file are subject to the Mozilla Public License Version
1474
- - 1.1 (the "License"); you may not use this file except in compliance with
1475
- - the License. You may obtain a copy of the License at
1476
- - http://www.mozilla.org/MPL/
1478
- - Software distributed under the License is distributed on an "AS IS" basis,
1479
- - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
1480
- - for the specific language governing rights and limitations under the
1483
- - The Original Code is distro-mods.
1485
- - The Initial Developer of the Original Code is
1487
- - Portions created by the Initial Developer are Copyright (C) 2007
1488
- - the Initial Developer. All Rights Reserved.
1492
- - Alternatively, the contents of this file may be used under the terms of
1493
- - either the GNU General Public License Version 2 or later (the "GPL"), or
1494
- - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
1495
- - in which case the provisions of the GPL or the LGPL are applicable instead
1496
- - of those above. If you wish to allow use of your version of this file only
1497
- - under the terms of either the GPL or the LGPL, and not to allow others to
1498
- - use your version of this file under the terms of the MPL, indicate your
1499
- - decision by deleting the provisions above and replace them with the notice
1500
- - and other provisions required by the GPL or the LGPL. If you do not delete
1501
- - the provisions above, a recipient may use your version of this file under
1502
- - the terms of any one of the MPL, the GPL or the LGPL.
1504
- - ***** END LICENSE BLOCK ***** -->
1506
-<?xml-stylesheet href="chrome://ubufox/skin/overlay.css" type="text/css"?>
1507
-<!DOCTYPE overlay SYSTEM "chrome://ubufox/locale/ubufox.dtd">
1508
-<overlay id="ubufox-overlay"
1509
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
1510
- <script src="overlay.js"/>
1511
- <stringbundleset id="stringbundleset">
1512
- <stringbundle id="ubufox-strings" src="chrome://ubufox/locale/ubufox.properties"/>
1513
- </stringbundleset>
1515
- <hbox id="searchPanel">
1516
- <label id="getUbuntu3" getMoreURL="http://www.google.com" class="text-link"
1517
- onclick="return startUbuntuAddonsWizard(event);"
1518
- onload="ubufoxCheckExecutable();"
1519
- value="&ubufox.getubuntuextension;" />
1522
--- a/content/updateRestart.js
1523
+++ b/content/updateRestart.js
1524
@@ -78,23 +78,20 @@ function String_startsWith (base, str)
1525
function checkUpdate()
1527
var resReqFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
1528
- var versionString = null;
1530
- versionString = Components.classes["@mozilla.org/fuel/application;1"].getService(Components.interfaces.extIApplication).version;
1533
- if (versionString != null && String_startsWith (versionString, "3.0"))
1534
- resReqFile.initWithPath("/var/lib/update-notifier/user.d/firefox-3.0-restart-required");
1535
- else if (versionString != null && String_startsWith (versionString, "3.5"))
1536
- resReqFile.initWithPath("/var/lib/update-notifier/user.d/firefox-3.5-restart-required");
1537
- else if (versionString != null && String_startsWith (versionString, "3.6"))
1538
- resReqFile.initWithPath("/var/lib/update-notifier/user.d/firefox-3.6-restart-required");
1539
- else if (versionString != null && String_startsWith (versionString, "3.7"))
1540
- resReqFile.initWithPath("/var/lib/update-notifier/user.d/firefox-3.7-restart-required");
1541
- else { // not supported version - skip restart notification
1542
+ var launcher = Components.classes["@mozilla.org/process/environment;1"].getService(Components.interfaces.nsIEnvironment).get("MOZ_APP_LAUNCHER");
1543
+ if(launcher == null) {
1548
+ // If the launcher is a full path, just get the basename
1549
+ resReqFile.initWithPath(launcher);
1550
+ launcher = resReqFile.leafName;
1551
+ } catch (e) { // initWithPath will throw if the path is relative
1554
+ resReqFile.initWithPath("/var/run/" + launcher + "-restart-required");
1556
if(resReqFile.exists())
1558
var dateResReq = resReqFile.lastModifiedTime;
1559
--- a/defaults/preferences/ubufox-pfs.js
1560
+++ b/defaults/preferences/ubufox-pfs.js
1563
// use ubuntu plugin finder service
1564
-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");
1565
+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%");
1566
pref ("pfs.filehint.url", "https://mozilla-pfs.ubuntu.com/plugin-finder?op=filehint2name&distributionID=10.04");
1571
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
1572
<Description about="urn:mozilla:install-manifest">
1573
<em:id>ubufox@ubuntu.com</em:id>
1574
+ <em:unpack>true</em:unpack>
1575
<em:name>Ubuntu Firefox Modifications</em:name>
1576
<em:version>0.9rc2</em:version>
1577
<em:creator>Canonical Ltd.</em:creator>
1579
<em:targetApplication>
1581
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> <!-- firefox -->
1582
- <em:minVersion>1.5</em:minVersion>
1583
- <em:maxVersion>3.7.*</em:maxVersion>
1584
+ <em:minVersion>4.0b6</em:minVersion>
1585
+ <em:maxVersion>4.0.*</em:maxVersion>
1587
</em:targetApplication>
1589
--- a/locale/af-ZA/ubufox.properties
1590
+++ b/locale/af-ZA/ubufox.properties
1591
@@ -4,7 +4,7 @@ prefMessage=Int Voork Waarde: %d
1592
extensions.ubufox@ubuntu.com.description=Ubuntu Firefox Pak
1593
ubufox.pluginWizard.availablePluginsPage.description.label=Kies bykomstighede vir media tipe
1594
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1595
-browser.startup.homepage=about:home
1596
+browser.startup.homepage=about:startpage
1597
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1598
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1599
startup.homepage_override_url=about:blank
1600
--- a/locale/ar/ubufox.properties
1601
+++ b/locale/ar/ubufox.properties
1602
@@ -4,7 +4,7 @@ prefMessage=قيمة التفضيل ال
1603
extensions.ubufox@ubuntu.com.description=حزمة فايرفوكس من أوبونتو.
1604
ubufox.pluginWizard.availablePluginsPage.description.label=اختر ملحقة لنوع الوسائط
1605
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1606
-browser.startup.homepage=about:home
1607
+browser.startup.homepage=about:startpage
1608
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1609
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1610
startup.homepage_override_url=about:blank
1611
--- a/locale/bg/ubufox.properties
1612
+++ b/locale/bg/ubufox.properties
1613
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1614
extensions.ubufox@ubuntu.com.description=Ubuntu Firefox Pack.
1615
ubufox.pluginWizard.availablePluginsPage.description.label=Избор на приставка за тип медия
1616
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1617
-browser.startup.homepage=about:home
1618
+browser.startup.homepage=about:startpage
1619
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1620
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1621
startup.homepage_override_url=about:blank
1622
--- a/locale/ca/ubufox.properties
1623
+++ b/locale/ca/ubufox.properties
1624
@@ -4,7 +4,7 @@ prefMessage=Valor pref int: %d
1625
extensions.ubufox@ubuntu.com.description=Paquet del Firefox de l'Ubuntu.
1626
ubufox.pluginWizard.availablePluginsPage.description.label=Trieu un connector per al tipus multimèdia
1627
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1628
-browser.startup.homepage=about:home
1629
+browser.startup.homepage=about:startpage
1630
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1631
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1632
startup.homepage_override_url=about:blank
1633
--- a/locale/cs-CZ/ubufox.properties
1634
+++ b/locale/cs-CZ/ubufox.properties
1635
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1636
extensions.ubufox@ubuntu.com.description=Ubuntu rozšíření pro Firefox.
1637
ubufox.pluginWizard.availablePluginsPage.description.label=Zvolte zásuvný modul pro daný typ média
1638
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1639
-browser.startup.homepage=about:home
1640
+browser.startup.homepage=about:startpage
1641
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1642
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1643
startup.homepage_override_url=about:blank
1644
--- a/locale/de-DE/ubufox.properties
1645
+++ b/locale/de-DE/ubufox.properties
1646
@@ -3,7 +3,7 @@ helloMessageTitle=Hello
1647
extensions.ubufox@ubuntu.com.description=Ubuntu Firefox Paket.
1648
ubufox.pluginWizard.availablePluginsPage.description.label=Wähle ein plugin für Medien Typ
1649
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1650
-browser.startup.homepage=about:home
1651
+browser.startup.homepage=about:startpage
1652
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1653
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1654
startup.homepage_override_url=about:blank
1655
--- a/locale/el-GR/ubufox.properties
1656
+++ b/locale/el-GR/ubufox.properties
1657
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1658
extensions.ubufox@ubuntu.com.description=Πακέτο του Ubuntu για το Firefox.
1659
ubufox.pluginWizard.availablePluginsPage.description.label=Επιλέξτε ένα πρόσθετο για τη μορφή του πολυμέσου
1660
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1661
-browser.startup.homepage=about:home
1662
+browser.startup.homepage=about:startpage
1663
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1664
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1665
startup.homepage_override_url=about:blank
1666
--- a/locale/en-US/ubufox.properties
1667
+++ b/locale/en-US/ubufox.properties
1668
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1669
extensions.ubufox@ubuntu.com.description=Ubuntu Firefox Pack.
1670
ubufox.pluginWizard.availablePluginsPage.description.label=Choose a plugin for media type
1671
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1672
-browser.startup.homepage=about:home
1673
+browser.startup.homepage=about:startpage
1674
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1675
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1676
startup.homepage_override_url=about:blank
1677
--- a/locale/es/ubufox.properties
1678
+++ b/locale/es/ubufox.properties
1679
@@ -4,7 +4,7 @@ prefMessage=Valor de Pref Int: %d
1680
extensions.ubufox@ubuntu.com.description=Paquete de Ubuntu para Firefox.
1681
ubufox.pluginWizard.availablePluginsPage.description.label=Seleccione un complemento para el tipo de medio
1682
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1683
-browser.startup.homepage=about:home
1684
+browser.startup.homepage=about:startpage
1685
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1686
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1687
startup.homepage_override_url=about:blank
1688
--- a/locale/eu/ubufox.properties
1689
+++ b/locale/eu/ubufox.properties
1690
@@ -5,7 +5,7 @@ extensions.ubufox@ubuntu.com.description
1691
ubufox.pluginWizard.availablePluginsPage.description.label=Multimedia mota horrentzako plugina hautatu
1693
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
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
--- a/locale/fi-FI/ubufox.properties
1700
+++ b/locale/fi-FI/ubufox.properties
1701
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1702
extensions.ubufox@ubuntu.com.description=Ubuntun Firefox-paketti
1703
ubufox.pluginWizard.availablePluginsPage.description.label=Valitse mediatyypille sopiva liit\u00e4nn\u00e4inen
1704
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1705
-browser.startup.homepage=about:home
1706
+browser.startup.homepage=about:startpage
1707
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1708
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1709
startup.homepage_override_url=about:blank
1710
--- a/locale/fr/ubufox.properties
1711
+++ b/locale/fr/ubufox.properties
1712
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1713
extensions.ubufox@ubuntu.com.description=Paquet Firefox Pour Ubuntu.
1714
ubufox.pluginWizard.availablePluginsPage.description.label=Sélectionnez un plugin pour le type de média
1715
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1716
-browser.startup.homepage=about:home
1717
+browser.startup.homepage=about:startpage
1718
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1719
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1720
startup.homepage_override_url=about:blank
1721
--- a/locale/gl-ES/ubufox.properties
1722
+++ b/locale/gl-ES/ubufox.properties
1723
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1724
extensions.ubufox@ubuntu.com.description=Paquete de Ubuntu para Firefox.
1725
ubufox.pluginWizard.availablePluginsPage.description.label=Escoller un plugin para o tipo de contido
1726
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1727
-browser.startup.homepage=about:home
1728
+browser.startup.homepage=about:startpage
1729
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1730
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1731
startup.homepage_override_url=about:blank
1732
--- a/locale/hu-HU/ubufox.properties
1733
+++ b/locale/hu-HU/ubufox.properties
1734
@@ -4,7 +4,7 @@ prefMessage=Egész tulajdonságérték:
1735
extensions.ubufox@ubuntu.com.description=Ubuntu Firefox csomag
1736
ubufox.pluginWizard.availablePluginsPage.description.label=Válasszon egy bővítményt a médiatípushoz
1737
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1738
-browser.startup.homepage=about:home
1739
+browser.startup.homepage=about:startpage
1740
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1741
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1742
startup.homepage_override_url=about:blank
1743
--- a/locale/it-IT/ubufox.properties
1744
+++ b/locale/it-IT/ubufox.properties
1745
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1746
extensions.ubufox@ubuntu.com.description=Pacchetto Firefox Ubuntu.
1747
ubufox.pluginWizard.availablePluginsPage.description.label=Scegliere un plugin per il tipo di media
1748
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1749
-browser.startup.homepage=about:home
1750
+browser.startup.homepage=about:startpage
1751
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1752
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1753
startup.homepage_override_url=about:blank
1754
--- a/locale/ja/ubufox.properties
1755
+++ b/locale/ja/ubufox.properties
1756
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1757
extensions.ubufox@ubuntu.com.description=Ubuntu Firefox Pack.
1758
ubufox.pluginWizard.availablePluginsPage.description.label=メディアの種類でプラグインを選択する
1759
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1760
-browser.startup.homepage=about:home
1761
+browser.startup.homepage=about:startpage
1762
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1763
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1764
startup.homepage_override_url=about:blank
1765
--- a/locale/lt-LT/ubufox.properties
1766
+++ b/locale/lt-LT/ubufox.properties
1767
@@ -4,7 +4,7 @@ prefMessage=Int parinkties reikšmė: %d
1768
extensions.ubufox@ubuntu.com.description=Ubuntu Firefox paketas
1769
ubufox.pluginWizard.availablePluginsPage.description.label=Pasirinkite įskiepį failo tipui
1770
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1771
-browser.startup.homepage=about:home
1772
+browser.startup.homepage=about:startpage
1773
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1774
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1775
startup.homepage_override_url=about:blank
1776
--- a/locale/nl-NL/ubufox.properties
1777
+++ b/locale/nl-NL/ubufox.properties
1778
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1779
extensions.ubufox@ubuntu.com.description=Ubuntu Firefox-pakket.
1780
ubufox.pluginWizard.availablePluginsPage.description.label=Kies een plug-in voor het mediatype
1781
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1782
-browser.startup.homepage=about:home
1783
+browser.startup.homepage=about:startpage
1784
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/locales/index-nl.html
1785
app.update.url.details=file:///usr/share/ubuntu-artwork/home/locales/index-nl.html
1786
startup.homepage_override_url=about:blank
1787
--- a/locale/pl-PL/ubufox.properties
1788
+++ b/locale/pl-PL/ubufox.properties
1789
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1790
extensions.ubufox@ubuntu.com.description=Pakiet Ubuntu Firefox.
1791
ubufox.pluginWizard.availablePluginsPage.description.label=Wybór wtyczki dla typu pliku
1792
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1793
-browser.startup.homepage=about:home
1794
+browser.startup.homepage=about:startpage
1795
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1796
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1797
startup.homepage_override_url=about:blank
1798
--- a/locale/pt-BR/ubufox.properties
1799
+++ b/locale/pt-BR/ubufox.properties
1800
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1801
extensions.ubufox@ubuntu.com.description=Ubuntu Firefox Pacocte
1802
ubufox.pluginWizard.availablePluginsPage.description.label=Escolha um plug-in para o tipo de mídia
1803
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1804
-browser.startup.homepage=about:home
1805
+browser.startup.homepage=about:startpage
1806
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1807
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1808
startup.homepage_override_url=about:blank
1809
--- a/locale/ro/ubufox.properties
1810
+++ b/locale/ro/ubufox.properties
1811
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1812
extensions.ubufox@ubuntu.com.description=Pachetul Ubuntu Firefox.
1813
ubufox.pluginWizard.availablePluginsPage.description.label=Alegeți un modul pentru acest tip media
1814
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1815
-browser.startup.homepage=about:home
1816
+browser.startup.homepage=about:startpage
1817
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1818
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1819
startup.homepage_override_url=about:blank
1820
--- a/locale/ru-RU/ubufox.properties
1821
+++ b/locale/ru-RU/ubufox.properties
1822
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1823
extensions.ubufox@ubuntu.com.description=Расширения Firefox для Ubuntu
1824
ubufox.pluginWizard.availablePluginsPage.description.label=Выберите плагин для типа содержимого
1825
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1826
-browser.startup.homepage=about:home
1827
+browser.startup.homepage=about:startpage
1828
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1829
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1830
startup.homepage_override_url=about:blank
1831
--- a/locale/sl-SI/ubufox.properties
1832
+++ b/locale/sl-SI/ubufox.properties
1833
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1834
extensions.ubufox@ubuntu.com.description=Ubuntu razširitve za Firefox.
1835
ubufox.pluginWizard.availablePluginsPage.description.label=Izberite vtičnik za vrsto datoteke
1836
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1837
-browser.startup.homepage=about:home
1838
+browser.startup.homepage=about:startpage
1839
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1840
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1841
startup.homepage_override_url=about:blank
1842
--- a/locale/sv-SE/ubufox.properties
1843
+++ b/locale/sv-SE/ubufox.properties
1844
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1845
extensions.ubufox@ubuntu.com.description=Ubuntu-paket för Firefox.
1846
ubufox.pluginWizard.availablePluginsPage.description.label=Välj ett instick för mediatypen
1847
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1848
-browser.startup.homepage=about:home
1849
+browser.startup.homepage=about:startpage
1850
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1851
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1852
startup.homepage_override_url=about:blank
1853
--- a/locale/uk/ubufox.properties
1854
+++ b/locale/uk/ubufox.properties
1855
@@ -4,7 +4,7 @@ prefMessage=Int Pref Value: %d
1856
extensions.ubufox@ubuntu.com.description=Убунтівські доповнення до Firefox.
1857
ubufox.pluginWizard.availablePluginsPage.description.label=Оберіть модуль для цього типу файлів
1858
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1859
-browser.startup.homepage=about:home
1860
+browser.startup.homepage=about:startpage
1861
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1862
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1863
startup.homepage_override_url=about:blank
1864
--- a/locale/zh-CN/ubufox.properties
1865
+++ b/locale/zh-CN/ubufox.properties
1866
@@ -4,7 +4,7 @@ prefMessage=整数偏好值: %d
1867
extensions.ubufox@ubuntu.com.description=Ubuntu 火狐扩展包.
1868
ubufox.pluginWizard.availablePluginsPage.description.label=选择打开媒体的插件
1869
app.releaseNotesURL=http://www.ubuntu.com/getubuntu/releasenotes/1010
1870
-browser.startup.homepage=about:home
1871
+browser.startup.homepage=about:startpage
1872
browser.throbber.url=file:///usr/share/ubuntu-artwork/home/index.html
1873
app.update.url.details=file:///usr/share/ubuntu-artwork/home/index.html
1874
startup.homepage_override_url=about:blank
1876
+++ b/pfs/db/sources.list.10.10
1878
+deb http://archive.ubuntu.com/ubuntu/ maverick main restricted universe multiverse
1881
+++ b/pfs/db/sources.list.11.04
1883
+deb http://archive.ubuntu.com/ubuntu/ natty main restricted universe multiverse