Index: chrome/browser/resources/extensions/extension_list.js |
diff --git a/chrome/browser/resources/extensions/extension_list.js b/chrome/browser/resources/extensions/extension_list.js |
index 35eea3414ddc7a06f35e288132525dddf6acdeb4..8067aa1f00d6f351fdfd4cb2530d8760b4d4ebc6 100644 |
--- a/chrome/browser/resources/extensions/extension_list.js |
+++ b/chrome/browser/resources/extensions/extension_list.js |
@@ -235,6 +235,9 @@ cr.define('extensions', function() { |
/** @private {!Array<ExtensionInfo>} */ |
this.extensions_ = []; |
+ /** @type {?function()} */ |
+ this.onExtensionCountChanged = null; |
Dan Beam
2015/04/27 16:17:05
why does this need to ever be assigned/created dyn
Devlin
2015/04/27 18:28:30
Per offline conversation, extracted this into a de
|
+ |
/** |
* |loadFinished| should be used for testing purposes and will be |
* fulfilled when this list has finished loading the first time. |
@@ -260,12 +263,20 @@ cr.define('extensions', function() { |
this.updateExtension_(eventData.extensionInfo); |
break; |
case EventType.UNINSTALLED: |
+ var index = this.getIndexOfExtension_(eventData.item_id); |
+ this.extensions_.splice(index, 1); |
var childNode = $(eventData.item_id); |
childNode.parentNode.removeChild(childNode); |
break; |
default: |
assertNotReached(); |
} |
+ |
+ if ((eventData.event_type == EventType.INSTALLED || |
+ eventData.event_type == EventType.UNINSTALLED) && |
+ this.onExtensionCountChanged) { |
+ this.onExtensionCountChanged(); |
+ } |
}.bind(this)); |
}, |
@@ -334,6 +345,19 @@ cr.define('extensions', function() { |
return this.extensions_.length; |
}, |
+ /** |
+ * @param {string} id The id of the extension. |
+ * @return {number} The index of the extension with the given id. |
+ * @private |
+ */ |
+ getIndexOfExtension_: function(id) { |
+ for (var i = 0; i < this.extensions_.length; ++i) { |
+ if (this.extensions_[i].id == id) |
+ return i; |
+ } |
+ return -1; |
+ }, |
+ |
getIdQueryParam_: function() { |
return parseQueryParams(document.location)['id']; |
}, |
@@ -1063,13 +1087,7 @@ cr.define('extensions', function() { |
* @private |
*/ |
updateExtension_: function(extension) { |
- var currIndex = -1; |
- for (var i = 0; i < this.extensions_.length; ++i) { |
- if (this.extensions_[i].id == extension.id) { |
- currIndex = i; |
- break; |
- } |
- } |
+ var currIndex = this.getIndexOfExtension_(extension.id); |
if (currIndex != -1) { |
// If there is a current version of the extension, update it with the |
// new version. |