diff --git a/toolkit/mozapps/extensions/content/extensions.js b/toolkit/mozapps/extensions/content/extensions.js index b5d06323690..55b22990ae0 100644 --- a/toolkit/mozapps/extensions/content/extensions.js +++ b/toolkit/mozapps/extensions/content/extensions.js @@ -378,7 +378,8 @@ var gExtensionsViewController = { .createInstance(Components.interfaces.nsIExtensionItem); item.init(aItemID, this.getExtensionProperty(aItemID, "version"), this.getExtensionProperty(aItemID, "name"), - -1, "", Components.interfaces.nsIExtensionItem.TYPE_EXTENSION); // XXXben + -1, "", "", + Components.interfaces.nsIExtensionItem.TYPE_EXTENSION); // XXXben items.push(item); } else { @@ -394,7 +395,8 @@ var gExtensionsViewController = { .createInstance(Components.interfaces.nsIExtensionItem); item.init(id, this.getExtensionProperty(id, "version"), this.getExtensionProperty(id, "name"), - -1, "", Components.interfaces.nsIExtensionItem.TYPE_EXTENSION); // XXXben + -1, "", "", + Components.interfaces.nsIExtensionItem.TYPE_EXTENSION); // XXXben items.push(item); } } diff --git a/toolkit/mozapps/extensions/public/nsIExtensionManager.idl b/toolkit/mozapps/extensions/public/nsIExtensionManager.idl index 12869169de6..46a43c38a3a 100644 --- a/toolkit/mozapps/extensions/public/nsIExtensionManager.idl +++ b/toolkit/mozapps/extensions/public/nsIExtensionManager.idl @@ -60,7 +60,7 @@ interface nsIExtensionItem : nsISupports void init(in string aID, in string aVersion, in wstring aName, in long aRow, in wstring aXPIURL, in long aType); - nsIVariant toObject(); + readonly attribute wstring objectSource; }; [scriptable, uuid(c3515b0f-99f4-453b-805e-1fdf5724d6d9)] @@ -88,3 +88,9 @@ interface nsIExtensionManager : nsISupports readonly attribute nsIRDFDataSource datasource; }; +[scriptable, uuid(c0b7517f-0b3a-41a2-bde8-ba3ac8a5af47)] +interface nsIExtensionItemUpdater : nsISupports +{ + void checkForUpdates(); +}; + diff --git a/toolkit/mozapps/extensions/service/ExtensionItem.java b/toolkit/mozapps/extensions/service/ExtensionItem.java index 1c61462aa31..e69de29bb2d 100644 --- a/toolkit/mozapps/extensions/service/ExtensionItem.java +++ b/toolkit/mozapps/extensions/service/ExtensionItem.java @@ -1,90 +0,0 @@ -package org.mozilla.update.extensions; - -public class ExtensionItem -{ - private int row; - private java.lang.String id; - private java.lang.String version; - private java.lang.String name; - private java.lang.String xpiURL; - private int type; - - public ExtensionItem() - { - } - - public int getRow() - { - return row; - } - - public void setRow(int row) - { - this.row = row; - } - - public java.lang.String getId() - { - return id; - } - - public void setId(java.lang.String id) - { - this.id = id; - } - - public java.lang.String getVersion() - { - return version; - } - - public void setVersion(java.lang.String version) - { - this.version = version; - } - - public java.lang.String getName() - { - return name; - } - - public void setName(java.lang.String name) - { - this.name = name; - } - - public java.lang.String getXpiURL() - { - return xpiURL; - } - - public void setXpiURL(java.lang.String xpiURL) - { - this.xpiURL = xpiURL; - } - - public int getType() - { - return type; - } - - public void setType(int type) - { - this.type = type; - } -} - -//public class ExtensionType -//{ -// public ExtensionType() -// { -// } -// -// public int row; -// public String id; -// public String version; -// public String name; -// public String xpiURL; -// public int type; -//} - diff --git a/toolkit/mozapps/extensions/service/VersionCheck.java b/toolkit/mozapps/extensions/service/VersionCheck.java index dc131f41161..ac514da2d35 100644 --- a/toolkit/mozapps/extensions/service/VersionCheck.java +++ b/toolkit/mozapps/extensions/service/VersionCheck.java @@ -70,6 +70,7 @@ public class VersionCheck e.setName(getProperty(row, "name")); e.setVersion(getProperty(row, "version")); e.setXpiURL(getProperty(row, "xpiurl")); + e.setIconURL(getProperty(row, "iconurl")); results.add(e); } } @@ -94,6 +95,7 @@ public class VersionCheck e.setName(getProperty(row, "name")); e.setVersion(getProperty(row, "version")); e.setXpiURL(getProperty(row, "xpiurl")); + e.setIconURL(getProperty(row, "iconurl")); } return e; } diff --git a/toolkit/mozapps/extensions/src/nsExtensionManager.js.in b/toolkit/mozapps/extensions/src/nsExtensionManager.js.in index f3dd7802378..7d2935a3816 100644 --- a/toolkit/mozapps/extensions/src/nsExtensionManager.js.in +++ b/toolkit/mozapps/extensions/src/nsExtensionManager.js.in @@ -49,13 +49,14 @@ function ExtensionItem () } ExtensionItem.prototype = { - init: function (aID, aVersion, aName, aRow, aXPIURL, aType) + init: function (aID, aVersion, aName, aRow, aXPIURL, aIconURL, aType) { this._id = aID; this._version = aVersion; this._name = aName; this._row = aRow; this._xpiURL = aXPIURL; + this._iconURL = aIconURL; this._type = aType; }, @@ -64,12 +65,14 @@ ExtensionItem.prototype = { get name() { return this._name; }, get row() { return this._row; }, get xpiURL() { return this._xpiURL; }, + get iconURL() { return this._iconURL }, get type() { return this._type; }, - toObject: function () + get objectSource() { return { id: this._id, version: this._version, name: this._name, - row: this._row, xpiURL: this._xpiURL, type: this._type }; + row: this._row, xpiURL: this._xpiURL, iconURL: this._iconURL, + type: this._type }.toSource(); }, ///////////////////////////////////////////////////////////////////////////// @@ -251,7 +254,7 @@ nsExtensionManager.prototype = { var appID = pref.getCharPref(PREF_EM_APP_ID); var appVersion = pref.getCharPref(PREF_EM_APP_VERSION); - var updater = new nsItemUpdater(aItems, appID, appVersion); + var updater = new nsExtensionItemUpdater(aItems, appID, appVersion); switch (aUpdateType) { case Components.interfaces.nsIExtensionManager.UPDATE_TYPE_MISMATCH: @@ -318,7 +321,7 @@ nsExtensionManager.prototype = { } }; -function nsItemUpdater(aItems, aTargetAppID, aTargetAppVersion) +function nsExtensionItemUpdater(aItems, aTargetAppID, aTargetAppVersion) { this._items = aItems; this._count = aItems.length; @@ -329,9 +332,9 @@ function nsItemUpdater(aItems, aTargetAppID, aTargetAppVersion) .getService(Components.interfaces.nsIObserverService); } -nsItemUpdater.prototype = { +nsExtensionItemUpdater.prototype = { ///////////////////////////////////////////////////////////////////////////// - // + // nsIExtensionItemUpdater checkForUpdates: function () { this._os.notifyObservers(null, "update-started", ""); @@ -341,6 +344,8 @@ nsItemUpdater.prototype = { "VersionCheck", "", true, this); }, + ///////////////////////////////////////////////////////////////////////////// + // nsExtensionItemUpdater _proxy: null, _checkForUpdates: function () @@ -348,7 +353,8 @@ nsItemUpdater.prototype = { for (var i = 0; i < this._items.length; ++i) { var e = this._items[i]; this._os.notifyObservers(null, "update-item-started", e.name + " " + e.version); - this._proxy.getNewestExtension(e, this._appID, this._appVersion); + dump("*** obj = " + e.objectSource + "\n"); // goats + this._proxy.getNewestExtension(eval(e.objectSource), this._appID, this._appVersion); } }, @@ -381,7 +387,17 @@ nsItemUpdater.prototype = { if (--this._count == 0) this._os.notifyObservers(null, "update-ended", ""); - } + }, + + ///////////////////////////////////////////////////////////////////////////// + // nsISupports + QueryInterface: function (aIID) + { + if (!aIID.equals(Components.interfaces.nsIExtensionItemUpdater) && + !aIID.equals(Components.interfaces.nsISupports)) + throw Components.results.NS_ERROR_NO_INTERFACE; + return this; + } }; @@ -432,7 +448,8 @@ nsExtensionsDataSource.prototype = { .createInstance(Components.interfaces.nsIExtensionItem); item.init(id, this.getExtensionProperty(id, "version"), this.getExtensionProperty(id, "name"), - -1, "", Components.interfaces.nsIExtensionItem.TYPE_EXTENSION); + -1, "", "", + Components.interfaces.nsIExtensionItem.TYPE_EXTENSION); items.push(item); } } diff --git a/toolkit/mozapps/jar.mn b/toolkit/mozapps/jar.mn index 5ae526bae58..231cd6175d1 100755 --- a/toolkit/mozapps/jar.mn +++ b/toolkit/mozapps/jar.mn @@ -21,6 +21,8 @@ toolkit.jar: * content/mozapps/extensions/about.js (extensions/content/about.js) * content/mozapps/update/update.xul (update/content/update.xul) * content/mozapps/update/update.js (update/content/update.js) +* content/mozapps/update/updateItem.xml (update/content/updateItem.xml) +* content/mozapps/update/update.css (update/content/update.css) * content/mozapps/shared/richview.xml (shared/content/richview.xml) content/mozapps/contents.rdf (contents-content.rdf) @@ -36,6 +38,7 @@ en-US.jar: locale/en-US/mozapps/extensions/extensions.properties (extensions/locale/extensions.properties) locale/en-US/mozapps/extensions/about.dtd (extensions/locale/about.dtd) locale/en-US/mozapps/update/update.dtd (update/locale/update.dtd) + locale/en-US/mozapps/update/update.properties (update/locale/update.properties) locale/en-US/mozapps/contents.rdf (contents-locale.rdf) classic.jar: @@ -43,6 +46,7 @@ classic.jar: skin/classic/mozapps/extensions/about.css (extensions/skin/about.css) skin/classic/mozapps/extensions/placeholder.gif (extensions/skin/placeholder.gif) skin/classic/mozapps/extensions/viewWatermark.png (extensions/skin/viewWatermark.png) + skin/classic/mozapps/update/update.css (update/skin/update.css) skin/classic/mozapps/shared/richview.xml (shared/skin/richview.xml) skin/classic/mozapps/shared/richview.css (shared/skin/richview.css) skin/classic/mozapps/shared/viewFader.png (shared/skin/viewFader.png) diff --git a/toolkit/mozapps/update/content/update.css b/toolkit/mozapps/update/content/update.css new file mode 100644 index 00000000000..76264197c17 --- /dev/null +++ b/toolkit/mozapps/update/content/update.css @@ -0,0 +1,5 @@ +updateitem { + -moz-binding: url("chrome://mozapps/content/update/updateItem.xml#updateItem"); + display: -moz-box; +} + diff --git a/toolkit/mozapps/update/content/update.js b/toolkit/mozapps/update/content/update.js index 46a651c8202..b5fa5c3a346 100644 --- a/toolkit/mozapps/update/content/update.js +++ b/toolkit/mozapps/update/content/update.js @@ -47,12 +47,13 @@ var gUpdater = null; var gUpdateWizard = { _items: [], + _itemsToUpdate: [], init: function () { - gUpdater = window.arguments[0]; - for (var i = 1; i < window.argments.length; ++i) - this._items.push(window.arguments[i].QueryInterface(Components.interfaces.nsIExtensionItem)); + gUpdater = window.arguments[0].QueryInterface(Components.interfaces.nsIExtensionItemUpdater); + for (var i = 1; i < window.arguments.length; ++i) + this._items.push(window.arguments[i].QueryInterface(nsIExtensionItem)); gMismatchPage.init(); }, @@ -76,7 +77,7 @@ var gMismatchPage = { incompatible.appendChild(listitem); } - var strings = document.getElementById("extensionsStrings"); + var strings = document.getElementById("updateStrings"); var next = document.documentElement.getButton("next"); next.label = strings.getString("mismatchCheckNow"); var cancel = document.documentElement.getButton("cancel"); @@ -90,7 +91,7 @@ var gMismatchPage = { }; var gUpdatePage = { - _itemsToUpdate: [], + _completeCount: 0, _messages: ["update-started", "update-ended", "update-item-started", @@ -99,31 +100,22 @@ var gUpdatePage = { onPageShow: function () { + var strings = document.getElementById("updateStrings"); + var next = document.documentElement.getButton("next"); + next.label = strings.getString("nextButtonText"); + next.disabled = true; + var cancel = document.documentElement.getButton("cancel"); + cancel.label = strings.getString("cancelButtonText"); + cancel.disabled = true; + var back = document.documentElement.getButton("back"); + back.disabled = true; + var os = Components.classes["@mozilla.org/observer-service;1"] .getService(Components.interfaces.nsIObserverService); for (var i = 0; i < this._messages.length; ++i) os.addObserver(this, this._messages[i], false); - var extensions = []; - var themes = []; - for (i = 0; i < gExtensionItems.length; ++i) { - switch (gExtensionItems[i].type) { - case nsIExtensionItem.TYPE_EXTENSION: - extensions.push(gExtensionItems[i]); - break; - case nsIExtensionItem.TYPE_THEME: - themes.push(gExtensionItems[i]); - break; - } - } - - var em = Components.classes["@mozilla.org/extensions/manager;1"] - .getService(Components.interfaces.nsIExtensionManager); - if (this._updateType == "extensions") - em.updateExtensions(extensions); - else if (gUpdateType == "themes") - em.updateTheme(this._extensionID); - + gUpdater.checkForUpdates(); }, uninit: function () @@ -142,23 +134,49 @@ var gUpdatePage = { case "update-item-started": break; case "update-item-ended": - this._extensionsToUpdate.push(aSubject); + dump("*** update-item-ended\n"); + gUpdateWizard._itemsToUpdate.push(aSubject); + + ++this._completeCount; + + var progress = document.getElementById("checking.progress"); + progress.value = Math.ceil(this._completeCount / gUpdateWizard._itemsToUpdate.length) * 100; + break; case "update-ended": - var installObj = { }; - for (var i = 0; i < this._extensionsToUpdate.length; ++i) { - var e = this._extensionsToUpdate[i]; - installObj[e.name + " " + e.version] = e.xpiURL; - } - if (InstallTrigger.updateEnabled()) - InstallTrigger.install(installObj); - - document.documentElement.acceptDialog(); + if (gUpdateWizard._itemsToUpdate.length > 0) + document.getElementById("checking").setAttribute("next", "found"); + document.documentElement.advance(); break; } } }; +var gFoundPage = { + + onPageShow: function () + { + var strings = document.getElementById("updateStrings"); + var next = document.documentElement.getButton("next"); + next.label = strings.getString("installButtonText"); + next.disabled = false; + var back = document.documentElement.getButton("back"); + back.disabled = true; + + var list = document.getElementById("foundList"); + for (var i = 0; i < gUpdateWizard._itemsToUpdate.length; ++i) { + var updateitem = document.createElement("updateitem"); + list.appendChild(updateitem); + + var item = gUpdateWizard._itemsToUpdate[i]; + updateitem.name = item.name + " " + item.version; + updateitem.url = item.xpiURL; + if (item.iconURL != "") + updateitem.icon = item.iconURL; + } + }, +}; + # -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- diff --git a/toolkit/mozapps/update/content/update.xul b/toolkit/mozapps/update/content/update.xul index 681c7183e8e..521bf48759f 100644 --- a/toolkit/mozapps/update/content/update.xul +++ b/toolkit/mozapps/update/content/update.xul @@ -37,6 +37,8 @@ # ***** END LICENSE BLOCK ***** + + @@ -57,10 +59,10 @@ - + - @@ -79,29 +81,38 @@ - - + + + - + - + + + + + + + + - diff --git a/toolkit/mozapps/update/content/updateItem.xml b/toolkit/mozapps/update/content/updateItem.xml new file mode 100644 index 00000000000..3972057679c --- /dev/null +++ b/toolkit/mozapps/update/content/updateItem.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + &from.label; + + + + + + + + + + + + + + diff --git a/toolkit/mozapps/update/locale/update.dtd b/toolkit/mozapps/update/locale/update.dtd index 16fcdcd5510..9b902498690 100644 --- a/toolkit/mozapps/update/locale/update.dtd +++ b/toolkit/mozapps/update/locale/update.dtd @@ -2,20 +2,24 @@ + of &brandShortName; you have just installed:"> - + - + + + + + - + \ No newline at end of file diff --git a/toolkit/mozapps/update/locale/update.properties b/toolkit/mozapps/update/locale/update.properties new file mode 100644 index 00000000000..ed77ae66b41 --- /dev/null +++ b/toolkit/mozapps/update/locale/update.properties @@ -0,0 +1,5 @@ +mismatchCheckNow=Check Now +mismatchDontCheck=Don't Check +installButtonText=Install Now +nextButtonText=Next > +cancelButtonText=Cancel diff --git a/toolkit/mozapps/update/skin/update.css b/toolkit/mozapps/update/skin/update.css new file mode 100644 index 00000000000..52d22533127 --- /dev/null +++ b/toolkit/mozapps/update/skin/update.css @@ -0,0 +1,41 @@ +#foundList { + -moz-appearance: listbox; + margin: 10px 4px 10px 4px; +} + +updateitem { + padding: 5px 0px 5px 5px; + border-bottom: 1px dotted #C0C0C0; + margin-bottom: 5px; +} + +.warning { + font-weight: bold; +} + +.updateItemIcon { + width: 32px; + height: 32px; + max-width: 32px !important; + max-height: 32px !important; + margin-right: 5px; +} + +.updateItemName { + font-weight: bold; +} + +.updateItemNameRow { + padding-bottom: 3px; +} + +.updateItemURL { + -moz-appearance: none; + border: none; + background-color: Window; +} + +.updateItemIcon { + list-style-image: url("chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png"); +} + diff --git a/toolkit/mozapps/xpinstall/content/xpinstallConfirm.xul b/toolkit/mozapps/xpinstall/content/xpinstallConfirm.xul index 77e24113582..1bf15aa4aa0 100644 --- a/toolkit/mozapps/xpinstall/content/xpinstallConfirm.xul +++ b/toolkit/mozapps/xpinstall/content/xpinstallConfirm.xul @@ -57,7 +57,7 @@ - + &warningText2.label; &warningText3.label; diff --git a/toolkit/mozapps/xpinstall/skin/xpinstallConfirm.css b/toolkit/mozapps/xpinstall/skin/xpinstallConfirm.css index e2af210d0eb..e69de29bb2d 100644 --- a/toolkit/mozapps/xpinstall/skin/xpinstallConfirm.css +++ b/toolkit/mozapps/xpinstall/skin/xpinstallConfirm.css @@ -1,59 +0,0 @@ -#xpinstallIcon { - list-style-image: url("chrome://mozapps/skin/xpinstall/xpinstallIcon.png"); -} - -#itemList { - -moz-appearance: listbox; - margin: 10px 4px 10px 4px; -} - -#dialogContentBox { - padding: 5px; -} - -installitem { - padding: 5px 0px 5px 5px; - border-bottom: 1px dotted #C0C0C0; - margin-bottom: 5px; -} - -.warning { - font-weight: bold; -} - -.xpinstallItemIcon { - width: 32px; - height: 32px; - max-width: 32px !important; - max-height: 32px !important; - margin-right: 5px; -} - -.xpinstallItemName { - font-weight: bold; -} - -.xpinstallItemSigned { - font-style: italic; -} - -.xpinstallItemSigned[signed=false] { - color: #ED1C24; - font-style: normal; - font-weight: bold; -} - -.xpinstallItemNameRow { - padding-bottom: 3px; -} - -.xpinstallItemURL { - -moz-appearance: none; - border: none; - background-color: Window; -} - -.xpinstallItemIcon { - list-style-image: url("chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png"); -} -