diff --git a/browser/app/nsBrowserApp.cpp b/browser/app/nsBrowserApp.cpp
index 78cb08a47e3b..54532f7f8e99 100644
--- a/browser/app/nsBrowserApp.cpp
+++ b/browser/app/nsBrowserApp.cpp
@@ -45,7 +45,7 @@
static const nsXREAppData kAppData = {
"Mozilla",
- "Firefox",
+ "Firefox Debug",
NS_STRINGIFY(APP_VERSION),
NS_STRINGIFY(BUILD_ID),
// ec8030f7-c20a-464f-9b0e-13a3a9e97384
diff --git a/browser/app/profile/extensions/Extensions.rdf b/browser/app/profile/extensions/Extensions.rdf
index a2a8d97c5077..5b98f5dacefc 100644
--- a/browser/app/profile/extensions/Extensions.rdf
+++ b/browser/app/profile/extensions/Extensions.rdf
@@ -3,7 +3,6 @@
-
-
+
diff --git a/browser/app/profile/extensions/Makefile.in b/browser/app/profile/extensions/Makefile.in
index a3817783132a..7ddb0b96184b 100644
--- a/browser/app/profile/extensions/Makefile.in
+++ b/browser/app/profile/extensions/Makefile.in
@@ -54,8 +54,6 @@ FILES := $(addprefix $(srcdir)/, $(FILES))
libs::
$(INSTALL) $(FILES) $(DIST)/bin/defaults/profile/extensions
- $(INSTALL) $(srcdir)/"installed-extensions.txt" $(DIST)/bin/defaults/profile/extensions
install::
$(SYSINSTALL) $(IFLAGS1) $(FILES) $(DESTDIR)$(mozappdir)/defaults/profile/extensions
- $(SYSINSTALL) $(IFLAGS1) $(srcdir)/"installed-extensions.txt" $(DESTDIR)$(mozappdir)/defaults/profile/extensions
diff --git a/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/Makefile.in b/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/Makefile.in
index 5ecc52ec942d..9c9eccc40e17 100644
--- a/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/Makefile.in
+++ b/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/Makefile.in
@@ -49,7 +49,7 @@ FILES := \
libs::
$(PERL) $(MOZILLA_DIR)/config/preprocessor.pl $(DEFINES) $(ACDEFINES) $(srcdir)/install.rdf.in > install.rdf
- $(INSTALL) $(FILES) $(DIST)/bin/defaults/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
+ $(INSTALL) $(FILES) $(DIST)/bin/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
install::
- $(SYSINSTALL) $(IFLAGS1) $(FILES) $(DESTDIR)$(mozappdir)/defaults/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
+ $(SYSINSTALL) $(IFLAGS1) $(FILES) $(DESTDIR)$(mozappdir)/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}
diff --git a/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf.in b/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf.in
index 580666907ee1..d25336ace2b2 100644
--- a/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf.in
+++ b/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf.in
@@ -12,8 +12,8 @@
{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
- 1.0
- 1.0
+ 1.1
+ 1.1
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
index acdefd38813f..34e604a94d15 100644
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -66,6 +66,13 @@ pref("update.extensions.enabled", true);
pref("update.extensions.wsdl", "chrome://mozapps/locale/extensions/extensions.properties");
pref("extensions.getMoreExtensionsURL", "chrome://mozapps/locale/extensions/extensions.properties");
pref("extensions.getMoreThemesURL", "chrome://mozapps/locale/extensions/extensions.properties");
+// Developers can set this to |true| if they are constantly changing files in their
+// extensions directory so that the extension system does not constantly think that
+// their extensions are being updated and thus reregistered every time the app is
+// started.
+pref("extensions.ignoreMTimeChanges", false);
+// Enables some extra Extension System Logging (can reduce performance)
+pref("extensions.logging.enabled", false);
// App-specific update preferences
pref("app.update.enabled", true); // Whether or not app updates are enabled
diff --git a/browser/installer/unix/packages-static b/browser/installer/unix/packages-static
index dc7c54a66443..756111927610 100644
--- a/browser/installer/unix/packages-static
+++ b/browser/installer/unix/packages-static
@@ -24,9 +24,6 @@ bin/defaults/profile/localstore.rdf
bin/defaults/profile/prefs.js
bin/defaults/profile/search.rdf
bin/defaults/profile/mimeTypes.rdf
-bin/defaults/profile/extensions/Extensions.rdf
-bin/defaults/profile/extensions/installed-extensions.txt
-bin/defaults/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf
bin/defaults/profile/chrome/*
[xpcom]
@@ -204,6 +201,7 @@ bin/components/mozgnome.xpt
; [Browser Chrome Files]
bin/chrome/browser.jar
bin/chrome/classic.jar
+bin/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf
bin/chrome/comm.jar
bin/chrome/toolkit.jar
bin/chrome/toolkit.manifest
diff --git a/browser/installer/windows/packages-static b/browser/installer/windows/packages-static
index 7bf5df026321..cbbdddedd4fd 100644
--- a/browser/installer/windows/packages-static
+++ b/browser/installer/windows/packages-static
@@ -23,10 +23,6 @@ bin\defaults\profile\localstore.rdf
bin\defaults\profile\prefs.js
bin\defaults\profile\search.rdf
bin\defaults\profile\mimeTypes.rdf
-bin\defaults\profile\extensions\Extensions.rdf
-bin\defaults\profile\extensions\installed-extensions.txt
-bin\defaults\profile\extensions\{641d8d09-7dda-4850-8228-ac0ab65e2ac9}\install.rdf
-bin\defaults\profile\extensions\{972ce4c6-7e08-4474-a285-3208198ce6fd}\install.rdf
bin\defaults\profile\chrome\*
[xpcom]
@@ -199,6 +195,7 @@ bin\components\update.xpt
; [Browser Chrome Files]
bin\chrome\browser.jar
bin\chrome\classic.jar
+bin\extensions\{972ce4c6-7e08-4474-a285-3208198ce6fd}\install.rdf
bin\chrome\comm.jar
bin\chrome\toolkit.jar
bin\chrome\toolkit.manifest
diff --git a/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd b/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
index 1372a7a79813..9e2de292d1b1 100644
--- a/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
+++ b/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
@@ -46,14 +46,6 @@
-
-
-
-
-
-
-
-
diff --git a/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.properties b/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.properties
index 38213488110b..1143839953f5 100644
--- a/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.properties
+++ b/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.properties
@@ -8,9 +8,15 @@ restartBeforeEnableMessage=%S will be enabled the next time you restart %S.
restartBeforeDisableMessage=%S will be disabled the next time you restart %S.
restartBeforeUninstallTitle=Uninstall
restartBeforeUninstallMessage=%S will be uninstalled the next time you restart %S.
+restartBeforeInstallMessage=%S will be installed the next time you restart %S.
+restartBeforeUpgradeMessage=%S will be upgraded the next time you restart %S.
queryUninstallExtensionMessage=If you uninstall %S, the functionality it offers will no longer be available. Do you want to uninstall %S?
queryUninstallThemeMessage=Do you want to uninstall %S?
queryUninstallTitle=Uninstall %S
+installSuccess=Install completed successfully
+installWaiting=Waiting...
+installInstalling=Installing...
+droppedInWarning=The following items were found in your Extensions folder. Do you want to install them?
extensions.update.url=https://addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%
extensions.getMoreExtensionsURL=https://addons.mozilla.org/extensions/?application=%APPID%
@@ -24,8 +30,6 @@ globalItemList=The following items are available to all users. \nYou can start F
globalItemListExtensions=\n\nGlobally Available Extensions:\n==============================\n\n
globalItemListThemes=\n\nGlobally Available Themes:\n==========================\n\n
-installSuccess=Installed Successfully
-
statusFormatKBKB=#1 of #2 KB
statusFormatKBMB=#1 KB of #2 MB
statusFormatMBMB=#1 of #2 MB
@@ -33,30 +37,27 @@ statusFormatMBMB=#1 of #2 MB
disabledObsoleteTitle=Old Extensions
disabledObsoleteMessage=Any old extensions that you have installed have been disabled.
-theme=Theme
-extension=Extension
+type-4=Theme
+type-2=Extension
incompatibleTitle=Incompatible %S
incompatibleMsg=%S %S could not be installed because it is not compatible with %S %S. (%S %S will only work with %S versions from %S to %S)
-incompatibleMsgSingleAppVersion=%S %S could not be installed because it is not compatible %S %S. (%S %S will only work with %S %S)
+incompatibleMsgSingleAppVersion=%S %S could not be installed because it is not compatible with %S %S. (%S %S will only work with %S %S)
incompatibleMessageNoApp=%S %S could not be installed because it is not compatible with %S.
incompatibleOlder=versions 0.8 or older.
incompatibleThemeName=this Theme
incompatibleExtension=Disabled - not compatible with %S %S
+invalidGUIDMessage="%S" could not be installed because of an error in its Install Manifest ("%S" is not a valid GUID). Please contact the author of this item about the problem.
+invalidVersionMessage="%S" could not be installed because of an error in its Install Manifest ("%S" is not a valid Version String). Please contact the author of this item about the problem.
missingFileTitle=Missing File
missingFileMessage=%S could not load this item because the file %S was missing.
missingFileConsoleMessage=Failed to install from %S because %S was not provided at the top level of the jar/xpi file.
-malformedMessage=%S could not install this item because "%S" (provided by the item) is malformed. Please contact the author about this problem.
+malformedMessage=%S could not install this item because "%S" (provided by the item) is not well-formed or does not exist. Please contact the author about this problem.
malformedTitle=Malformed File
malformedRegistrationTitle=Chrome Registration Failed
-malformedRegistrationMessage=%S could not install this item because of a failure in Chrome Registration. Please contact the author about this problem, or click View Details for more information.
-malformedRegistrationConsoleMessage=Chrome Registration failed for Extension '%S' when calling nsIXULChromeRegistry::%S with this chrome path: %S (profile extension = %S). Perhaps this path does not exist within the chrome JAR file, or the contents.rdf file at that location is malformed?
-malformedRegistrationDetailsButton=View Details
-
-invalidVersionMessage=%S could not install "%S" because its version information ("%S") is invalid. Please contact the author about this problem.
-invalidVersionTitle=Invalid Version
+malformedRegistrationMessage=%S could not install this item because of a failure in Chrome Registration. Please contact the author about this problem..
errorInstallTitle=Error
errorInstallMessage=%S could not download the file at \n\n%S\n\nbecause: %S
diff --git a/toolkit/locales/en-US/chrome/mozapps/xpinstall/xpinstallConfirm.properties b/toolkit/locales/en-US/chrome/mozapps/xpinstall/xpinstallConfirm.properties
index c1903d566e63..ed8e3a46d0e7 100644
--- a/toolkit/locales/en-US/chrome/mozapps/xpinstall/xpinstallConfirm.properties
+++ b/toolkit/locales/en-US/chrome/mozapps/xpinstall/xpinstallConfirm.properties
@@ -6,4 +6,6 @@ installButtonDisabledLabel=Install (%S)
installButtonLabel=Install Now
installComplete=Software Installation is complete. You will have to restart %S for changes to take effect.
-installCompleteTitle=Installation Complete
\ No newline at end of file
+installCompleteTitle=Installation Complete
+
+error-203=Error Installing Item
diff --git a/toolkit/mozapps/extensions/content/extensions.css b/toolkit/mozapps/extensions/content/extensions.css
index 28b434dbb129..db938cf64ade 100644
--- a/toolkit/mozapps/extensions/content/extensions.css
+++ b/toolkit/mozapps/extensions/content/extensions.css
@@ -8,60 +8,18 @@ extension {
-moz-box-orient: vertical;
}
-extension[state="waiting"] {
- -moz-binding: url("chrome://mozapps/content/extensions/extensions.xml#extension-waiting");
-}
-
extension[state="downloading"] {
-moz-binding: url("chrome://mozapps/content/extensions/extensions.xml#extension-downloading");
}
-extension[state="installing"] {
- -moz-binding: url("chrome://mozapps/content/extensions/extensions.xml#extension-installing");
-}
-
-extension[state="done"] {
- -moz-binding: url("chrome://mozapps/content/extensions/extensions.xml#extension-done");
-}
-
-extension[toBeDisabled="true"] {
- -moz-binding: url("chrome://mozapps/content/extensions/extensions.xml#extension-tobedisabled");
-}
-
-extension[toBeEnabled="true"] {
- -moz-binding: url("chrome://mozapps/content/extensions/extensions.xml#extension-tobeenabled");
-}
-
-extension[toBeInstalled="true"] {
- -moz-binding: url("chrome://mozapps/content/extensions/extensions.xml#extension-tobeinstalled");
-}
-
-extension[toBeUninstalled="true"] {
- -moz-binding: url("chrome://mozapps/content/extensions/extensions.xml#extension-tobeuninstalled");
-}
-
-
-
extension[itemType="theme"] {
-moz-binding: url("chrome://mozapps/content/extensions/extensions.xml#theme");
}
-extension[itemType="theme"][state="waiting"] {
- -moz-binding: url("chrome://mozapps/content/extensions/extensions.xml#theme-waiting");
-}
-
extension[itemType="theme"][state="downloading"] {
-moz-binding: url("chrome://mozapps/content/extensions/extensions.xml#theme-downloading");
}
-extension[itemType="theme"][state="installing"] {
- -moz-binding: url("chrome://mozapps/content/extensions/extensions.xml#theme-installing");
-}
-
-extension[itemType="theme"][state="done"] {
- -moz-binding: url("chrome://mozapps/content/extensions/extensions.xml#theme-done");
-}
-
.themePreviewArea {
width: 0px;
}
diff --git a/toolkit/mozapps/extensions/content/extensions.js b/toolkit/mozapps/extensions/content/extensions.js
index 06df5d73f493..24d2bd1b1aea 100644
--- a/toolkit/mozapps/extensions/content/extensions.js
+++ b/toolkit/mozapps/extensions/content/extensions.js
@@ -19,7 +19,7 @@
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
-# Ben Goodger
+# Ben Goodger
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -44,8 +44,6 @@ const nsIUpdateItem = Components.interfaces.nsIUpdateItem;
var gExtensionManager = null;
var gExtensionsView = null;
var gWindowState = "";
-var gURIPrefix = ""; // extension or theme prefix
-var gDSRoot = ""; // extension or theme root
var gGetMoreURL = "";
var gCurrentTheme = "";
var gDownloadManager = null;
@@ -61,33 +59,17 @@ const PREF_GENERAL_SKINS_SELECTEDSKIN = "general.skins.selectedSkin";
const KEY_DEFAULT_THEME = "classic/1.0";
+const RDFURI_ITEM_ROOT = "urn:mozilla:item:root";
+const PREFIX_ITEM_URI = "urn:mozilla:item:";
+
///////////////////////////////////////////////////////////////////////////////
// Utility Functions
-const PREFIX_EXTENSION = "urn:mozilla:extension:";
-const PREFIX_THEME = "urn:mozilla:theme:";
-
-function getItemPrefix(aItemType)
+function getIDFromResourceURI(aURI)
{
- var prefix = "";
- if (aItemType & nsIUpdateItem.TYPE_EXTENSION)
- prefix = PREFIX_EXTENSION;
- else if (aItemType & nsIUpdateItem.TYPE_THEME)
- prefix = PREFIX_THEME;
- return prefix;
-}
-
-function stripPrefix(aURI, aItemType)
-{
- var val = aURI;
- if (aItemType == nsIUpdateItem.TYPE_ADDON)
- val = stripPrefix(aURI, getItemType(aURI));
- else {
- var prefix = getItemPrefix(aItemType);
- if (prefix && aURI.substr(0, prefix.length) == prefix)
- val = aURI.substr(prefix.length, aURI.length);
- }
- return val;
+ if (aURI.substring(0, PREFIX_ITEM_URI.length) == PREFIX_ITEM_URI)
+ return aURI.substring(PREFIX_ITEM_URI.length);
+ return aURI;
}
function openURL(aURL)
@@ -124,7 +106,15 @@ function setRestartMessage(aItem)
var themeName = aItem.getAttribute("name");
var restartMessage = extensionStrings.formatStringFromName("dssSwitchAfterRestart",
[brandShortName], 1);
- aItem.setAttribute("creator", restartMessage);
+ for (var i = 0; i < gExtensionsView.childNodes.length; ++i) {
+ var item = gExtensionsView.childNodes[i];
+ if (item.hasAttribute("oldDescription")) {
+ item.setAttribute("description", item.getAttribute("oldDescription"));
+ item.removeAttribute("oldDescription");
+ }
+ }
+ aItem.setAttribute("oldDescription", aItem.getAttribute("description"));
+ aItem.setAttribute("description", restartMessage);
}
///////////////////////////////////////////////////////////////////////////////
@@ -144,9 +134,9 @@ function Startup()
gWindowState = window.location.search.substr("?type=".length, window.location.search.length);
var isExtensions = gWindowState == "extensions";
- gURIPrefix = isExtensions ? "urn:mozilla:extension:" : "urn:mozilla:theme:";
- gDSRoot = isExtensions ? "urn:mozilla:extension:root" : "urn:mozilla:theme:root";
gItemType = isExtensions ? nsIUpdateItem.TYPE_EXTENSION : nsIUpdateItem.TYPE_THEME;
+ var typeCondition = document.getElementById("typeCondition");
+ typeCondition.setAttribute("object", gItemType);
document.documentElement.setAttribute("windowtype", document.documentElement.getAttribute("windowtype") + "-" + gWindowState);
@@ -163,7 +153,7 @@ function Startup()
// Finally, update the UI.
gExtensionsView.database.AddDataSource(gExtensionManager.datasource);
- gExtensionsView.setAttribute("ref", gDSRoot);
+ gExtensionsView.setAttribute("ref", RDFURI_ITEM_ROOT);
gExtensionsView.focus();
var pref = Components.classes["@mozilla.org/preferences-service;1"]
@@ -171,11 +161,13 @@ function Startup()
if (!isExtensions) {
gExtensionsView.addEventListener("richview-select", onThemeSelect, false);
- if (pref.prefHasUserValue(PREF_GENERAL_SKINS_SELECTEDSKIN))
+ if (pref.prefHasUserValue(PREF_EM_LAST_SELECTED_SKIN))
+ gCurrentTheme = pref.getCharPref(PREF_EM_LAST_SELECTED_SKIN);
+ else if (pref.prefHasUserValue(PREF_GENERAL_SKINS_SELECTEDSKIN))
gCurrentTheme = pref.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN);
- else
+ if (!gCurrentTheme)
gCurrentTheme = KEY_DEFAULT_THEME;
-
+
var useThemeButton = document.getElementById("useThemeButton");
useThemeButton.hidden = false;
@@ -185,15 +177,15 @@ function Startup()
var pref = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
if (!pref.getBoolPref(PREF_EXTENSIONS_DSS_ENABLED) &&
- pref.getBoolPref(PREF_EXTENSIONS_DSS_SWITCHPENDING)) {
+ pref.getBoolPref(PREF_EXTENSIONS_DSS_SWITCHPENDING) &&
+ pref.prefHasUserValue(PREF_EM_LAST_SELECTED_SKIN)) {
var lastSelectedSkin = pref.getCharPref(PREF_EM_LAST_SELECTED_SKIN);
for (var i = 0; i < gExtensionsView.childNodes.length; ++i) {
var item = gExtensionsView.childNodes[i];
- if (item.getAttribute("internalName") == lastSelectedSkin) {
- setRestartMessage(item);
+ if (item.getAttribute("internalName") == lastSelectedSkin)
break;
- }
}
+ setRestartMessage(item);
}
}
@@ -333,7 +325,7 @@ XPInstallDownloadManager.prototype = {
// gExtensionManager.addDownload(displayName, url, iconURL, type);
var item = Components.classes["@mozilla.org/updates/item;1"]
.createInstance(Components.interfaces.nsIUpdateItem);
- item.init(url, " ", "", "", displayName, -1, url, iconURL, "", type);
+ item.init(url, " ", "app-profile", "", "", displayName, url, iconURL, "", type);
items.push(item);
// Advance the enumerator
@@ -349,7 +341,7 @@ XPInstallDownloadManager.prototype = {
},
/////////////////////////////////////////////////////////////////////////////
- // nsIExtensionDownloadProgressListener
+ // nsIExtensionDownloadListener
onStateChange: function (aURL, aState, aValue)
{
const nsIXPIProgressDialog = Components.interfaces.nsIXPIProgressDialog;
@@ -358,6 +350,11 @@ XPInstallDownloadManager.prototype = {
switch (aState) {
case nsIXPIProgressDialog.DOWNLOAD_START:
element.setAttribute("state", "waiting");
+
+ var extensionsStrings = document.getElementById("extensionsStrings");
+ element.setAttribute("description",
+ extensionsStrings.getString("installWaiting"));
+
element.setAttribute("progress", "0");
break;
case nsIXPIProgressDialog.DOWNLOAD_DONE:
@@ -365,10 +362,17 @@ XPInstallDownloadManager.prototype = {
break;
case nsIXPIProgressDialog.INSTALL_START:
element.setAttribute("state", "installing");
+
+ var extensionsStrings = document.getElementById("extensionsStrings");
+ element.setAttribute("description",
+ extensionsStrings.getString("installInstalling"));
break;
case nsIXPIProgressDialog.INSTALL_DONE:
dump("*** state change = " + aURL + ", state = " + aState + ", value = " + aValue + "\n");
element.setAttribute("state", "done");
+ var extensionsStrings = document.getElementById("extensionsStrings");
+ element.setAttribute("description",
+ extensionsStrings.getString("installSuccess"));
var msg;
if (aValue != 0) {
var xpinstallStrings = document.getElementById("xpinstallStrings");
@@ -392,12 +396,11 @@ XPInstallDownloadManager.prototype = {
.getService(Components.interfaces.nsIPromptService);
ps.alert(window, title, message);
element.setAttribute("status", msg);
-
}
// Remove the dummy, since we installed successfully
var type = gWindowState == "extensions" ? nsIUpdateItem.TYPE_EXTENSION
: nsIUpdateItem.TYPE_THEME;
- gExtensionManager.removeDownload(aURL, type);
+ gExtensionManager.removeDownload(aURL);
break;
case nsIXPIProgressDialog.DIALOG_CLOSE:
break;
@@ -466,7 +469,7 @@ XPInstallDownloadManager.prototype = {
// nsISupports
QueryInterface: function (aIID)
{
- if (!aIID.equals(Components.interfaces.nsIExtensionDownloadProgressListener) &&
+ if (!aIID.equals(Components.interfaces.nsIExtensionDownloadListener) &&
!aIID.equals(Components.interfaces.nsISupports))
throw Components.results.NS_ERROR_NO_INTERFACE;
return this;
@@ -673,6 +676,17 @@ var gExtensionsDNDObserver =
///////////////////////////////////////////////////////////////////////////////
// Command Updating and Command Handlers
+function canWriteToLocation(element)
+{
+ var installLocation = null;
+ if (element) {
+ var id = getIDFromResourceURI(element.id)
+ installLocation = gExtensionManager.getInstallLocation(id);
+ }
+ return installLocation ? installLocation.canAccess : false;
+}
+
+
var gExtensionsViewController = {
supportsCommand: function (aCommand)
{
@@ -697,7 +711,9 @@ var gExtensionsViewController = {
selectedItem.getAttribute("toBeUninstalled") != "true" &&
selectedItem.getAttribute("optionsURL") != "";
case "cmd_about":
- return selectedItem && (selectedItem.disabled ? selectedItem.getAttribute("aboutURL") == "" : true);
+ return selectedItem &&
+ selectedItem.getAttribute("toBeInstalled") != "true" &&
+ (selectedItem.disabled ? selectedItem.getAttribute("aboutURL") == "" : true);
case "cmd_homepage":
return selectedItem && selectedItem.getAttribute("homepageURL") != "";
case "cmd_uninstall":
@@ -709,12 +725,15 @@ var gExtensionsViewController = {
}
return selectedItem &&
selectedItem.getAttribute("toBeUninstalled") != "true" &&
- selectedItem.getAttribute("locked") != "true";
+ selectedItem.getAttribute("toBeInstalled") != "true" &&
+ selectedItem.getAttribute("locked") != "true" &&
+ canWriteToLocation(selectedItem);
case "cmd_update":
return !selectedItem ||
(selectedItem &&
selectedItem.getAttribute("toBeUninstalled") != "true" &&
- selectedItem.getAttribute("toBeInstalled") != "true");
+ selectedItem.getAttribute("toBeInstalled") != "true") &&
+ canWriteToLocation(selectedItem);
case "cmd_reallyEnable":
// controls whether to show Enable or Disable in extensions' context menu
return selectedItem &&
@@ -730,8 +749,8 @@ var gExtensionsViewController = {
case "cmd_disable":
return selectedItem &&
!selectedItem.disabled &&
- selectedItem.getAttribute("toBeUninstalled") != "true" &&
- selectedItem.getAttribute("locked") != "true";
+ selectedItem.getAttribute("toBeUninstalled") != "true" &&
+ selectedItem.getAttribute("toBeInstalled") != "true";
case "cmd_movetop":
return selectedItem && (gExtensionsView.children[0] != selectedItem);
case "cmd_moveup":
@@ -825,29 +844,29 @@ var gExtensionsViewController = {
cmd_movetop: function (aSelectedItem)
{
var movingID = aSelectedItem.id;
- gExtensionManager.moveTop(stripPrefix(movingID, gItemType));
+ gExtensionManager.moveTop(getIDFromResourceURI(movingID));
gExtensionsView.selected = document.getElementById(movingID);
},
cmd_moveup: function (aSelectedItem)
{
var movingID = aSelectedItem.id;
- gExtensionManager.moveUp(stripPrefix(movingID, gItemType));
+ gExtensionManager.moveUp(getIDFromResourceURI(movingID));
gExtensionsView.selected = document.getElementById(movingID);
},
cmd_movedn: function (aSelectedItem)
{
var movingID = aSelectedItem.id;
- gExtensionManager.moveDown(stripPrefix(movingID, gItemType));
+ gExtensionManager.moveDown(getIDFromResourceURI(movingID));
gExtensionsView.selected = document.getElementById(movingID);
},
cmd_update: function (aSelectedItem)
{
- var id = aSelectedItem ? stripPrefix(aSelectedItem.id, gItemType) : null;
+ var id = aSelectedItem ? getIDFromResourceURI(aSelectedItem.id) : null;
var itemType = gWindowState == "extensions" ? nsIUpdateItem.TYPE_EXTENSION : nsIUpdateItem.TYPE_THEME;
- var items = gExtensionManager.getItemList(id, itemType, { });
+ var items = id ? [gExtensionManager.getItemForID(id)] : [];
var updates = Components.classes["@mozilla.org/updates/update-service;1"]
.getService(Components.interfaces.nsIUpdateService);
updates.checkForUpdates(items, items.length, itemType,
@@ -881,9 +900,7 @@ var gExtensionsViewController = {
nextElement = selectedElement.previousSibling;
nextElement = nextElement.id;
- if (gWindowState == "extensions")
- gExtensionManager.uninstallExtension(stripPrefix(selectedID, gItemType));
- else if (gWindowState == "themes") {
+ if (gWindowState == "themes") {
// If the theme being uninstalled is the current theme, we need to reselect
// the default.
var pref = Components.classes["@mozilla.org/preferences-service;1"]
@@ -891,27 +908,20 @@ var gExtensionsViewController = {
var currentTheme = pref.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN);
if (aSelectedItem.getAttribute("internalName") == currentTheme)
this.cmd_useTheme(document.getElementById("urn:mozilla:theme:{972ce4c6-7e08-4474-a285-3208198ce6fd}"));
- gExtensionManager.uninstallTheme(stripPrefix(selectedID, gItemType));
-
}
+ gExtensionManager.uninstallItem(getIDFromResourceURI(selectedID));
gExtensionsView.selected = document.getElementById(nextElement);
},
cmd_disable: function (aSelectedItem)
{
- if (gWindowState == "extensions")
- gExtensionManager.disableExtension(stripPrefix(aSelectedItem.id, gItemType));
- else
- gExtensionManager.disableTheme(stripPrefix(aSelectedItem.id, gItemType));
+ gExtensionManager.disableItem(getIDFromResourceURI(aSelectedItem.id));
},
cmd_enable: function (aSelectedItem)
{
- if (gWindowState == "extensions")
- gExtensionManager.enableExtension(stripPrefix(aSelectedItem.id, gItemType));
- else
- gExtensionManager.enableTheme(stripPrefix(aSelectedItem.id, gItemType));
+ gExtensionManager.enableItem(getIDFromResourceURI(aSelectedItem.id));
#ifdef MOZ_PHOENIX
}
}
diff --git a/toolkit/mozapps/extensions/content/extensions.xml b/toolkit/mozapps/extensions/content/extensions.xml
index 1863adf4ebb3..597ab9f72117 100644
--- a/toolkit/mozapps/extensions/content/extensions.xml
+++ b/toolkit/mozapps/extensions/content/extensions.xml
@@ -72,137 +72,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- &extensionItem.toBeDisabled.label;
-
-
-
-
-
- "extension-"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- &extensionItem.toBeEnabled.label;
-
-
-
-
-
- "extension-"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- &extensionItem.toBeInstalled.label;
-
-
-
-
-
- "extension-"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- &extensionItem.toBeUninstalled.label;
-
-
-
-
-
- "extension-"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- &extensionItem.waiting.label;
-
-
-
-
-
-
- "extension-"
-
-
-
@@ -228,178 +97,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- &extensionItem.installing.label;
-
-
-
-
-
-
- "extension-"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "extension-"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "extension-"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- &extensionItem.waiting.label;
-
-
-
-
- "extension-"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- "extension-"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- &extensionItem.installing.label;
-
-
-
-
- "extension-"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- &extensionItem.done.label;
-
-
-
-
- "extension-"
-
-
-
diff --git a/toolkit/mozapps/extensions/content/extensions.xul b/toolkit/mozapps/extensions/content/extensions.xul
index 018c79afb37a..21f98cfe70b6 100644
--- a/toolkit/mozapps/extensions/content/extensions.xul
+++ b/toolkit/mozapps/extensions/content/extensions.xul
@@ -153,74 +153,77 @@
+
+ predicate="http://www.mozilla.org/2004/em-rdf#iconURL"
+ object="?icon"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#previewImage"
+ object="?previewImage"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#optionsURL"
+ object="?options-url"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#aboutURL"
+ object="?about-url"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#updateURL"
+ object="?update-url"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#disabled"
+ object="?disabled"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#compatible"
+ object="?compatible"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#homepageURL"
+ object="?homepage-url"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#description"
+ object="?description"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#displayDescription"
+ object="?displayDescription"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#locked"
+ object="?locked"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#toBeInstalled"
+ object="?toBeInstalled"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#toBeUpgraded"
+ object="?toBeUpgraded"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#toBeUninstalled"
+ object="?toBeUninstalled"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#toBeEnabled"
+ object="?toBeEnabled"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#toBeDisabled"
+ object="?toBeDisabled"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#internalName"
+ object="?internalName"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#downloadURL"
+ object="?downloadURL"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#state"
+ object="?state"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#progress"
+ object="?progress"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#status"
+ object="?status"/>
+ predicate="http://www.mozilla.org/2004/em-rdf#hidden"
+ object="?hidden"/>