Index: chrome/browser/resources/downloads/manager.js |
diff --git a/chrome/browser/resources/downloads/manager.js b/chrome/browser/resources/downloads/manager.js |
index 89a5aac0a88e7bfd1d37c5124b81f955ec92e433..36b2fa0a3ebef299b60d85110ddf07c0b2719a98 100644 |
--- a/chrome/browser/resources/downloads/manager.js |
+++ b/chrome/browser/resources/downloads/manager.js |
@@ -102,7 +102,14 @@ cr.define('downloads', function() { |
/** @param {!downloads.Data} data Info about the item to update. */ |
updateItem: function(data) { |
- this.idMap_[data.id].render(data); |
+ var activeElement = document.activeElement; |
+ |
+ var item = this.idMap_[data.id]; |
+ item.render(data); |
+ var focusRow = this.decorateItem_(item); |
+ |
+ if (activeElement != document.activeElement) |
+ focusRow.getEquivalentElement(activeElement).focus(); |
}, |
/** |
@@ -117,17 +124,25 @@ cr.define('downloads', function() { |
this.focusGrid_.destroy(); |
this.items_.forEach(function(item) { |
- downloads.FocusRow.decorate(item.view.node, item.view, this.node_); |
- var focusRow = assertInstanceof(item.view.node, downloads.FocusRow); |
+ var focusRow = this.decorateItem_(item); |
this.focusGrid_.addRow(focusRow); |
- // Focus the equivalent element in the focusRow because the active |
- // element may no longer be visible. |
- if (focusRow.contains(activeElement)) |
+ if (activeElement != document.activeElement && |
+ focusRow.contains(activeElement)) { |
focusRow.getEquivalentElement(activeElement).focus(); |
+ } |
}, this); |
}, |
+ /** |
+ * @param {!downloads.Item} item An item to decorate as a FocusRow. |
+ * @return {!downloads.FocusRow} |item| decorated as a FocusRow. |
+ */ |
+ decorateItem_: function(item) { |
+ downloads.FocusRow.decorate(item.view.node, item.view, this.node_); |
+ return assertInstanceof(item.view.node, downloads.FocusRow); |
+ }, |
+ |
/** @return {number} The number of downloads shown on the page. */ |
size: function() { |
return this.items_.length; |