| 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 cbac155401277d806f165d977c049bed80ea769c..b3343913c9f4c00279fba772581d009985573310 100644
|
| --- a/chrome/browser/resources/extensions/extension_list.js
|
| +++ b/chrome/browser/resources/extensions/extension_list.js
|
| @@ -281,11 +281,7 @@ cr.define('extensions', function() {
|
| case EventType.UNINSTALLED:
|
| var index = this.getIndexOfExtension_(eventData.item_id);
|
| this.extensions_.splice(index, 1);
|
| - var childNode = $(eventData.item_id);
|
| - childNode.parentNode.removeChild(childNode);
|
| - this.focusGrid_.removeRow(assertInstanceof(childNode,
|
| - ExtensionFocusRow));
|
| - this.focusGrid_.ensureRowActive();
|
| + this.removeNode_(getRequiredElement(eventData.item_id));
|
| break;
|
| default:
|
| assertNotReached();
|
| @@ -406,22 +402,10 @@ cr.define('extensions', function() {
|
|
|
| // Remove extensions that are no longer installed.
|
| var nodes = document.querySelectorAll('.extension-list-item-wrapper[id]');
|
| - for (var i = 0; i < nodes.length; ++i) {
|
| - var node = nodes[i];
|
| - if (seenIds.indexOf(node.id) < 0) {
|
| - if (node.contains(document.activeElement)) {
|
| - var focusableNode = nodes[i + 1] || nodes[i - 1];
|
| - if (focusableNode) {
|
| - focusableNode.getEquivalentElement(
|
| - document.activeElement).focus();
|
| - }
|
| - }
|
| -
|
| - node.parentElement.removeChild(node);
|
| - // Unregister the removed node from events.
|
| - assertInstanceof(node, ExtensionFocusRow).destroy();
|
| - }
|
| - }
|
| + Array.prototype.forEach.call(nodes, function(node) {
|
| + if (seenIds.indexOf(node.id) < 0)
|
| + this.removeNode_(node);
|
| + }, this);
|
| },
|
|
|
| /** Updates each row's focusable elements without rebuilding the grid. */
|
| @@ -433,6 +417,30 @@ cr.define('extensions', function() {
|
| },
|
|
|
| /**
|
| + * Removes the node from the DOM, and updates the focused element if needed.
|
| + * @param {!HTMLElement} node
|
| + * @private
|
| + */
|
| + removeNode_: function(node) {
|
| + if (node.contains(document.activeElement)) {
|
| + var nodes =
|
| + document.querySelectorAll('.extension-list-item-wrapper[id]');
|
| + var index = Array.prototype.indexOf.call(nodes, node);
|
| + assert(index != -1);
|
| + var focusableNode = nodes[index + 1] || nodes[index - 1];
|
| + if (focusableNode)
|
| + focusableNode.getEquivalentElement(document.activeElement).focus();
|
| + }
|
| + node.parentNode.removeChild(node);
|
| + this.focusGrid_.removeRow(assertInstanceof(node, ExtensionFocusRow));
|
| +
|
| + // Unregister the removed node from events.
|
| + assertInstanceof(node, ExtensionFocusRow).destroy();
|
| +
|
| + this.focusGrid_.ensureRowActive();
|
| + },
|
| +
|
| + /**
|
| * Scrolls the page down to the extension node with the given id.
|
| * @param {string} extensionId The id of the extension to scroll to.
|
| * @private
|
|
|