diff --git a/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd b/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
index 65591894a480..6f2c9035f122 100644
--- a/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
+++ b/toolkit/locales/en-US/chrome/mozapps/extensions/extensions.dtd
@@ -138,6 +138,7 @@
+
diff --git a/toolkit/mozapps/extensions/content/extensions.css b/toolkit/mozapps/extensions/content/extensions.css
index 356849ee1826..78dd16a3f7c9 100644
--- a/toolkit/mozapps/extensions/content/extensions.css
+++ b/toolkit/mozapps/extensions/content/extensions.css
@@ -205,10 +205,15 @@ richlistitem[action] .addonInstallButton {
display: none;
}
-.searchResultInstalling, .searchResultFailed, .searchResultInstalled {
+.searchResultInstalling, .searchResultFailed,
+.searchResultInstalled, .searchResultConnecting {
display: none;
}
+richlistitem[action="connecting"] .searchResultConnecting {
+ display: -moz-box;
+}
+
richlistitem[action="installing"] .searchResultInstalling {
display: -moz-box;
}
diff --git a/toolkit/mozapps/extensions/content/extensions.js b/toolkit/mozapps/extensions/content/extensions.js
index 8a0b78409fae..8eec99a1066e 100644
--- a/toolkit/mozapps/extensions/content/extensions.js
+++ b/toolkit/mozapps/extensions/content/extensions.js
@@ -73,7 +73,7 @@ var gShowGetAddonsPane = false;
var gRetrievedResults = false;
var gRecommendedAddons = null;
var gRDF = null;
-var gPendingInstalls = [];
+var gPendingInstalls = {};
const PREF_EM_CHECK_COMPATIBILITY = "extensions.checkCompatibility";
const PREF_EM_CHECK_UPDATE_SECURITY = "extensions.checkUpdateSecurity";
@@ -1222,11 +1222,17 @@ XPInstallDownloadManager.prototype = {
var certName = aParams.GetString(i++);
// Check whether the install was triggered from the Get Add-ons pane.
- var pos = gPendingInstalls.indexOf(url);
- if (pos >= 0)
- gPendingInstalls.splice(pos, 1);
- else
+ if (url in gPendingInstalls) {
+ // Update the installation status
+ gSearchDS.Assert(gRDF.GetResource(gPendingInstalls[url]),
+ gRDF.GetResource(PREFIX_NS_EM + "action"),
+ gRDF.GetLiteral("installing"),
+ true);
+ delete gPendingInstalls[url];
+ }
+ else {
switchPane = true;
+ }
}
gExtensionManager.addDownloads(items, items.length, aManager);
@@ -2217,31 +2223,33 @@ function confirmOperation(aName, aTitle, aQueryMsg, aAcceptBtn, aCancelBtn,
function installCallback(item, status) {
var resultNode = gRDF.GetResource(item.id);
+ var actionArc = gRDF.GetResource(PREFIX_NS_EM + "action");
// Strip out old status
- gSearchDS.Unassert(resultNode,
- gRDF.GetResource(PREFIX_NS_EM + "action"),
- gRDF.GetLiteral("installing"),
- true);
+ var targets = gSearchDS.GetTargets(resultNode, actionArc, true);
+ while (targets.hasMoreElements()) {
+ var value = targets.getNext().QueryInterface(Components.interfaces.nsIRDFNode);
+ if (value)
+ gSearchDS.Unassert(resultNode, actionArc, value);
+ }
if (status == -210) {
// User cancelled
- var pos = gPendingInstalls.indexOf(item.getAttribute("xpiURL"));
- if (pos >= 0)
- gPendingInstalls.splice(pos, 1);
+ if (item.getAttribute("xpiURL") in gPendingInstalls)
+ delete gPendingInstalls[item.getAttribute("xpiURL")];
return;
}
if (status < 0) {
// Some other failure
gSearchDS.Assert(resultNode,
- gRDF.GetResource(PREFIX_NS_EM + "action"),
+ actionArc,
gRDF.GetLiteral("failed"),
true);
}
else {
// Success
gSearchDS.Assert(resultNode,
- gRDF.GetResource(PREFIX_NS_EM + "action"),
+ actionArc,
gRDF.GetLiteral("installed"),
true);
}
@@ -2385,10 +2393,10 @@ var gExtensionsViewController = {
gSearchDS.Assert(gRDF.GetResource(aSelectedItem.id),
gRDF.GetResource(PREFIX_NS_EM + "action"),
- gRDF.GetLiteral("installing"),
+ gRDF.GetLiteral("connecting"),
true);
- // Remember that we don't want to change panes for this install
- gPendingInstalls.push(details.URL);
+ // Remember this install so we can update the status when install starts
+ gPendingInstalls[details.URL] = aSelectedItem.id;
InstallTrigger.install(params, function(url, status) { installCallback(aSelectedItem, status); });
},
diff --git a/toolkit/mozapps/extensions/content/extensions.xml b/toolkit/mozapps/extensions/content/extensions.xml
index 0372abc707b1..6648c39ca219 100644
--- a/toolkit/mozapps/extensions/content/extensions.xml
+++ b/toolkit/mozapps/extensions/content/extensions.xml
@@ -506,6 +506,10 @@
+
+
+
+