Index: chrome/browser/resources/print_preview/search/destination_list_item.js |
diff --git a/chrome/browser/resources/print_preview/search/destination_list_item.js b/chrome/browser/resources/print_preview/search/destination_list_item.js |
index a8c19aa9d075f9e10189880c7f589e363bb776bc..48b5b8174f78e0a73664a44c4eb5a44e321edc1c 100644 |
--- a/chrome/browser/resources/print_preview/search/destination_list_item.js |
+++ b/chrome/browser/resources/print_preview/search/destination_list_item.js |
@@ -132,6 +132,34 @@ cr.define('print_preview', function() { |
} |
nameEl.title = textContent; |
+ if (this.destination_.isExtension) { |
+ var extensionNameEl = this.getChildElement('.extension-name'); |
+ var extensionName = this.destination_.extensionName; |
+ extensionNameEl.title = this.destination_.extensionName; |
+ if (this.query_) { |
+ extensionNameEl.textContent = ''; |
+ this.addTextWithHighlight_(extensionNameEl, extensionName); |
+ } else { |
+ extensionNameEl.textContent = this.destination_.extensionName; |
+ } |
+ |
+ var extensionIconEl = this.getChildElement('.extension-icon'); |
+ extensionIconEl.style.backgroundImage = '-webkit-image-set(' + |
+ 'url(chrome://extension-icon/' + |
+ this.destination_.extensionId + '/24/1) 1x,' + |
+ 'url(chrome://extension-icon/' + |
+ this.destination_.extensionId + '/48/1) 2x)'; |
+ extensionIconEl.title = loadTimeData.getStringF( |
+ 'extensionDestinationIconTooltip', |
+ this.destination_.extensionName); |
+ extensionIconEl.onclick = this.onExtensionIconClicked_.bind(this); |
+ extensionIconEl.onkeydown = this.onExtensionIconKeyDown_.bind(this); |
+ } |
+ |
+ var extensionIndicatorEl = |
+ this.getChildElement('.extension-controlled-indicator'); |
+ setIsVisible(extensionIndicatorEl, this.destination_.isExtension); |
+ |
// Initialize the element which renders the destination's offline status. |
this.getElement().classList.toggle('stale', this.destination_.isOffline); |
var offlineStatusEl = this.getChildElement('.offline-status'); |
@@ -232,6 +260,32 @@ cr.define('print_preview', function() { |
DestinationListItem.EventType.REGISTER_PROMO_CLICKED); |
promoClickedEvent.destination = this.destination_; |
this.eventTarget_.dispatchEvent(promoClickedEvent); |
+ }, |
+ |
+ /** |
+ * Handles click and 'Enter' key down events for the extension icon element. |
+ * It opens extensions page with the extension associated with the |
+ * destination highlighted. |
+ * @param {MouseEvent|KeyboardEvent} e The event to handle. |
+ * @private |
+ */ |
+ onExtensionIconClicked_: function(e) { |
+ e.stopPropagation(); |
+ window.open('chrome://extensions?id=' + this.destination_.extensionId); |
+ }, |
+ |
+ /** |
+ * Handles key down event for the extensin icon element. Keys different than |
+ * 'Enter' are ignored. |
+ * @param {KeyboardEvent} e The event to handle. |
+ * @private |
+ */ |
+ onExtensionIconKeyDown_: function(e) { |
+ if (e.shiftKey || e.ctrlKey || e.altKey || e.metaKey) |
+ return; |
+ if (e.keyCode != 13 /* Enter */) |
+ return; |
+ this.onExtensionIconClicked_(event); |
} |
}; |