diff --git a/mozilla/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd b/mozilla/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
index 6ca3a82ed2f..d8f6db2f3b7 100644
--- a/mozilla/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
+++ b/mozilla/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
@@ -67,12 +67,22 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/mozilla/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.properties b/mozilla/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.properties
index de5a892f018..73a380f9348 100644
--- a/mozilla/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.properties
+++ b/mozilla/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.properties
@@ -27,6 +27,14 @@ moreInfoText=More information
uninstallTitle=Uninstall %S
uninstallWarnDependMsg=%S is required by one or more add-ons. If you continue, the following items will be disabled:
uninstallQueryMessage=Do you want to uninstall %S?
+cancelInstallTitle=Cancel Install of %S
+cancelInstallQueryMessage=Are you sure you want to cancel the install of %S?
+cancelInstallButton=Yes
+cancelCancelInstallButton=No
+cancelUpgradeTitle=Cancel Upgrade of %S
+cancelUpgradeQueryMessage=Are you sure you want to cancel the upgrade of %S?
+cancelUpgradeButton=Yes
+cancelCancelUpgradeButton=No
disableTitle=Disable %S
disableWarningDependMessage=If you disable %S, the following items that require this extension will also be disabled:
disableQueryMessage=Do you want to disable %S?
diff --git a/mozilla/toolkit/mozapps/extensions/content/extensions.js b/mozilla/toolkit/mozapps/extensions/content/extensions.js
index 6a3d7e0455c..75c276ac877 100644
--- a/mozilla/toolkit/mozapps/extensions/content/extensions.js
+++ b/mozilla/toolkit/mozapps/extensions/content/extensions.js
@@ -1130,7 +1130,8 @@ function onAddonSelect(aEvent)
// View Context Menus
var gAddonContextMenus = ["menuitem_useTheme", "menuitem_options", "menuitem_homepage",
"menuitem_about", "menuseparator_1", "menuitem_uninstall",
- "menuitem_cancelUninstall", "menuitem_checkUpdate",
+ "menuitem_cancelUninstall", "menuitem_cancelInstall",
+ "menuitem_cancelUpgrade", "menuitem_checkUpdate",
"menuitem_enable", "menuitem_disable"];
var gUpdateContextMenus = ["menuitem_homepage", "menuitem_about", "menuseparator_1",
"menuitem_installUpdate", "menuitem_includeUpdate"];
@@ -1174,11 +1175,17 @@ function buildContextMenu(aEvent)
var name = selectedItem ? selectedItem.getAttribute("name") : "";
menuitem_about.setAttribute("label", getExtensionString("aboutAddon", [name]));
- // When performing update or install tasks we don't support uninstall
+ /* When an update or install is pending allow canceling the update or install
+ and don't allow uninstall. When an uninstall is pending allow canceling the
+ uninstall.*/
if (gView != "updates" && gView != "installs") {
var canEnable = gExtensionsViewController.isCommandEnabled("cmd_cancelUninstall");
document.getElementById("menuitem_cancelUninstall_clone").hidden = !canEnable;
- document.getElementById("menuitem_uninstall_clone").hidden = canEnable;
+ var canCancelInstall = gExtensionsViewController.isCommandEnabled("cmd_cancelInstall");
+ document.getElementById("menuitem_cancelInstall_clone").hidden = !canCancelInstall;
+ var canCancelUpgrade = gExtensionsViewController.isCommandEnabled("cmd_cancelUpgrade");
+ document.getElementById("menuitem_cancelUpgrade_clone").hidden = !canCancelUpgrade;
+ document.getElementById("menuitem_uninstall_clone").hidden = canEnable || canCancelInstall || canCancelUpgrade;
}
switch (gView) {
@@ -1200,16 +1207,16 @@ function buildContextMenu(aEvent)
document.getElementById("menuitem_options_clone").hidden = true;
document.getElementById("menuitem_disable_clone").hidden = true;
break;
- case "locales":
case "plugins":
+ document.getElementById("menuitem_about_clone").hidden = true;
+ document.getElementById("menuitem_uninstall_clone").hidden = true;
+ document.getElementById("menuitem_checkUpdate_clone").hidden = true;
+ case "locales":
canEnable = gExtensionsViewController.isCommandEnabled("cmd_reallyEnable");
document.getElementById("menuitem_enable_clone").hidden = !canEnable;
document.getElementById("menuitem_disable_clone").hidden = canEnable;
document.getElementById("menuitem_useTheme_clone").hidden = true;
document.getElementById("menuitem_options_clone").hidden = true;
- document.getElementById("menuitem_about_clone").hidden = true;
- document.getElementById("menuitem_uninstall_clone").hidden = true;
- document.getElementById("menuitem_checkUpdate_clone").hidden = true;
break;
case "updates":
var includeUpdate = document.getAnonymousElementByAttribute(selectedItem, "anonid", "includeUpdate");
@@ -1597,6 +1604,27 @@ function closeEM() {
closeWindow(true);
}
+function confirmOperation(aName, aTitle, aQueryMsg, aAcceptBtn, aCancelBtn,
+ aWarnMsg, aDependantItems) {
+ var params = {
+ message2: getExtensionString(aQueryMsg, [aName]),
+ title: getExtensionString(aTitle, [aName]),
+ buttons: {
+ accept: { label: getExtensionString(aAcceptBtn) },
+ cancel: { label: getExtensionString(aCancelBtn), focused: true }
+ }
+ }
+ if (aDependantItems.length > 0)
+ params.message1 = getExtensionString(aWarnMsg, [aName]);
+ var names = [];
+ for (var i = 0; i < aDependantItems.length; ++i)
+ names.push(aDependantItems[i].name + " " + aDependantItems[i].version);
+
+ window.openDialog("chrome://mozapps/content/extensions/list.xul", "",
+ "titlebar,modal,centerscreen", names, params);
+ return params.result == "accept";
+}
+
var gExtensionsViewController = {
supportsCommand: function (aCommand)
{
@@ -1643,6 +1671,10 @@ var gExtensionsViewController = {
!gExtensionsView.hasAttribute("update-operation");
case "cmd_cancelUninstall":
return selectedItem.opType == OP_NEEDS_UNINSTALL;
+ case "cmd_cancelInstall":
+ return selectedItem.opType == OP_NEEDS_INSTALL;
+ case "cmd_cancelUpgrade":
+ return selectedItem.opType == OP_NEEDS_UPGRADE;
case "cmd_checkUpdate":
return selectedItem.getAttribute("updateable") != "false" &&
!gExtensionsView.hasAttribute("update-operation");
@@ -1829,24 +1861,10 @@ var gExtensionsViewController = {
var name = aSelectedItem.getAttribute("name");
var id = getIDFromResourceURI(aSelectedItem.id);
var dependentItems = gExtensionManager.getDependentItemListForID(id, true, { });
- var params = {
- message2: getExtensionString("uninstallQueryMessage", [name]),
- title: getExtensionString("uninstallTitle", [name]),
- buttons: {
- accept: { label: getExtensionString("uninstallButton"),
- focused: true },
- cancel: { label: getExtensionString("cancelButton") }
- }
- }
- if (dependentItems.length > 0)
- params.message1 = getExtensionString("uninstallWarnDependMsg", [name]);
- var names = [];
- for (var i = 0; i < dependentItems.length; ++i)
- names.push(dependentItems[i].name + " " + dependentItems[i].version);
-
- window.openDialog("chrome://mozapps/content/extensions/list.xul", "",
- "titlebar,modal,centerscreen", names, params);
- if (params.result != "accept")
+ var result = confirmOperation(name, "uninstallTitle", "uninstallQueryMessage",
+ "uninstallButton", "cancelButton",
+ "uninstallWarnDependMsg", dependentItems);
+ if (!result)
return;
if (aSelectedItem.type == nsIUpdateItem.TYPE_THEME) {
@@ -1876,6 +1894,39 @@ var gExtensionsViewController = {
updateOptionalViews();
},
+ cmd_cancelInstall: function (aSelectedItem)
+ {
+ var name = aSelectedItem.getAttribute("name");
+ var result = false;
+ // Confirm cancelling the operation
+ switch (aSelectedItem.opType)
+ {
+ case OP_NEEDS_INSTALL:
+ result = confirmOperation(name, "cancelInstallTitle", "cancelInstallQueryMessage",
+ "cancelInstallButton", "cancelCancelInstallButton",
+ null, []);
+ break;
+ case OP_NEEDS_UPGRADE:
+ result = confirmOperation(name, "cancelUpgradeTitle", "cancelUpgradeQueryMessage",
+ "cancelUpgradeButton", "cancelCancelUpgradeButton",
+ null, []);
+ break;
+ }
+ if (!result)
+ return;
+
+ gExtensionManager.cancelInstallItem(getIDFromResourceURI(aSelectedItem.id));
+ gExtensionsViewController.onCommandUpdate();
+ updateGlobalCommands();
+ gExtensionsView.selectedItem.focus();
+ updateOptionalViews();
+ },
+
+ cmd_cancelUpgrade: function (aSelectedItem)
+ {
+ this.cmd_cancelInstall(aSelectedItem);
+ },
+
cmd_disable: function (aSelectedItem)
{
if (aSelectedItem.getAttribute("plugin") == "true") {
@@ -1888,24 +1939,10 @@ var gExtensionsViewController = {
if (dependentItems.length > 0) {
var name = aSelectedItem.getAttribute("name");
- var message = getExtensionString("disableWarningDependMessage", [name]);
- var params = {
- message1: message,
- message2: getExtensionString("disableQueryMessage", [name]),
- title: getExtensionString("disableTitle", [name]),
- buttons: {
- accept: { label: getExtensionString("disableButton"),
- focused: true },
- cancel: { label: getExtensionString("cancelButton") }
- }
- }
- var names = [];
- for (var i = 0; i < dependentItems.length; ++i)
- names.push(dependentItems[i].name + " " + dependentItems[i].version);
-
- window.openDialog("chrome://mozapps/content/extensions/list.xul", "",
- "titlebar,modal,centerscreen", names, params);
- if (params.result != "accept")
+ var result = confirmOperation(name, "disableTitle", "disableQueryMessage",
+ "disableButton", "cancelButton",
+ "disableWarningDependMessage", dependentItems);
+ if (!result)
return;
}
gExtensionManager.disableItem(id);
diff --git a/mozilla/toolkit/mozapps/extensions/content/extensions.xml b/mozilla/toolkit/mozapps/extensions/content/extensions.xml
index 8bf4b5d2aa2..2682e398069 100644
--- a/mozilla/toolkit/mozapps/extensions/content/extensions.xml
+++ b/mozilla/toolkit/mozapps/extensions/content/extensions.xml
@@ -274,6 +274,12 @@
+
+
diff --git a/mozilla/toolkit/mozapps/extensions/content/extensions.xul b/mozilla/toolkit/mozapps/extensions/content/extensions.xul
index eeaca243cdd..b8f290a62ea 100644
--- a/mozilla/toolkit/mozapps/extensions/content/extensions.xul
+++ b/mozilla/toolkit/mozapps/extensions/content/extensions.xul
@@ -93,6 +93,8 @@
+
+
@@ -128,6 +130,10 @@
label="&cmd.uninstall.label;" accesskey="&cmd.uninstall2.accesskey;"/>
+
+