| Index: chrome/browser/resources/ntp4/apps_page.js
|
| diff --git a/chrome/browser/resources/ntp4/apps_page.js b/chrome/browser/resources/ntp4/apps_page.js
|
| index bc98db8ce4b5626454216947eec8c2acb2b0c7f1..88f02e73a8622a0a4f3c237b44ad6c4deec18236 100644
|
| --- a/chrome/browser/resources/ntp4/apps_page.js
|
| +++ b/chrome/browser/resources/ntp4/apps_page.js
|
| @@ -189,8 +189,12 @@ cr.define('ntp4', function() {
|
| this.useSmallIcon_ = true;
|
|
|
| var appImg = this.ownerDocument.createElement('img');
|
| + // This is temporary (setIcon_/loadIcon will overwrite it) but is visible
|
| + // before the page is shown (e.g. if switching from most visited to
|
| + // bookmarks).
|
| + appImg.src = 'chrome://theme/IDR_APP_DEFAULT_ICON';
|
| this.appImg_ = appImg;
|
| - this.setIcon();
|
| + this.setIcon_();
|
| appImgContainer.appendChild(appImg);
|
|
|
| if (this.useSmallIcon_) {
|
| @@ -266,16 +270,30 @@ cr.define('ntp4', function() {
|
| },
|
|
|
| /**
|
| - * Set the app's icon image from the appData.
|
| + * Set the URL of the icon from |appData_|. This won't actually show the
|
| + * icon until loadIcon() is called (for performance reasons; we don't want
|
| + * to load icons until we have to).
|
| * @private
|
| */
|
| - setIcon: function() {
|
| - this.appImg_.src = this.useSmallIcon_ ? this.appData_.icon_small :
|
| - this.appData_.icon_big;
|
| + setIcon_: function() {
|
| + var src = this.useSmallIcon_ ? this.appData_.icon_small :
|
| + this.appData_.icon_big;
|
| if (!this.appData_.enabled ||
|
| (!this.appData_.offline_enabled && !navigator.onLine)) {
|
| - this.appImg_.src += '?grayscale=true';
|
| + src += '?grayscale=true';
|
| }
|
| +
|
| + this.appImgSrc_ = src;
|
| + },
|
| +
|
| + /**
|
| + * Shows the icon for the app. That is, it causes chrome to load the app
|
| + * icon resource.
|
| + */
|
| + loadIcon: function() {
|
| + if (this.appImgSrc_)
|
| + this.appImg_.src = this.appImgSrc_;
|
| + this.appImgSrc_ = null;
|
| },
|
|
|
| // Shows a notification text below the app icon and stuffs the attributes
|
| @@ -283,12 +301,8 @@ cr.define('ntp4', function() {
|
| // text.
|
| setupNotification_: function(notification) {
|
| // Remove the old notification from this node (if any).
|
| - for (var i = 0; i < this.childNodes.length; i++) {
|
| - if (this.childNodes[i].classList.contains('app-notification')) {
|
| - this.removeChild(this.childNodes[i]);
|
| - break;
|
| - }
|
| - }
|
| + if (this.appNotification_)
|
| + this.appNotification_.parentNode.removeChild(this.appNotification_);
|
|
|
| if (notification) {
|
| // Add a new notification to this node.
|
| @@ -453,7 +467,8 @@ cr.define('ntp4', function() {
|
| */
|
| replaceAppData: function(appData) {
|
| this.appData_ = appData;
|
| - this.setIcon();
|
| + this.setIcon_();
|
| + this.loadIcon();
|
| },
|
|
|
| /**
|
| @@ -548,6 +563,8 @@ cr.define('ntp4', function() {
|
|
|
| initialize: function() {
|
| this.classList.add('apps-page');
|
| +
|
| + this.addEventListener('cardselected', this.onCardSelected_);
|
| },
|
|
|
| /**
|
| @@ -566,6 +583,22 @@ cr.define('ntp4', function() {
|
| this.appendTile(new App(appData), animate);
|
| },
|
|
|
| + /**
|
| + * Handler for 'cardselected' event, fired when |this| is selected. The
|
| + * first time this is called, we load all the app icons.
|
| + * @private
|
| + */
|
| + onCardSelected_: function(e) {
|
| + if (this.hasBeenSelected_)
|
| + return;
|
| + this.hasBeenSelected_ = true;
|
| +
|
| + var apps = this.querySelectorAll('.app');
|
| + for (var i = 0; i < apps.length; i++) {
|
| + apps[i].loadIcon();
|
| + }
|
| + },
|
| +
|
| /** @inheritdoc */
|
| doDragOver: function(e) {
|
| var tile = ntp4.getCurrentlyDraggingTile();
|
| @@ -682,7 +715,6 @@ cr.define('ntp4', function() {
|
| store.setAppsPromoData(data);
|
| };
|
|
|
| -
|
| /**
|
| * Callback invoked by chrome whenever an app preference changes.
|
| * @param {Object} data An object with all the data on available
|
|
|