diff options
Diffstat (limited to 'chromium/chrome/browser/resources/local_ntp/most_visited_thumbnail.js')
-rw-r--r-- | chromium/chrome/browser/resources/local_ntp/most_visited_thumbnail.js | 98 |
1 files changed, 38 insertions, 60 deletions
diff --git a/chromium/chrome/browser/resources/local_ntp/most_visited_thumbnail.js b/chromium/chrome/browser/resources/local_ntp/most_visited_thumbnail.js index 9201259e31e..789f754650e 100644 --- a/chromium/chrome/browser/resources/local_ntp/most_visited_thumbnail.js +++ b/chromium/chrome/browser/resources/local_ntp/most_visited_thumbnail.js @@ -14,90 +14,68 @@ window.addEventListener('DOMContentLoaded', function() { function logEvent(eventName) { chrome.embeddedSearch.newTabPage.logEvent(eventName); } - function logImpression(tileIndex, provider) { - chrome.embeddedSearch.newTabPage.logImpression(tileIndex, provider); + function logMostVisitedImpression(tileIndex, provider) { + chrome.embeddedSearch.newTabPage.logMostVisitedImpression( + tileIndex, provider); + } + function displayLink(link) { + document.body.appendChild(link); + window.parent.postMessage('linkDisplayed', '{{ORIGIN}}'); } function showDomainElement() { - logEvent(NTP_LOGGING_EVENT_TYPE.NTP_THUMBNAIL_ERROR); var link = createMostVisitedLink( - params, data.url, data.title, undefined, data.ping, data.provider); + params, data.url, data.title, undefined, data.provider); var domain = document.createElement('div'); domain.textContent = data.domain; link.appendChild(domain); - document.body.appendChild(link); + displayLink(link); } // Called on intentionally empty tiles for which the visuals are handled // externally by the page itself. function showEmptyTile() { - var link = createMostVisitedLink( - params, data.url, data.title, undefined, data.ping, data.provider); - document.body.appendChild(link); - logEvent(NTP_LOGGING_EVENT_TYPE.NTP_EXTERNAL_TILE); + displayLink(createMostVisitedLink( + params, data.url, data.title, undefined, data.provider)); } - function createAndAppendThumbnail(isVisible) { - var image = new Image(); + // Creates and adds an image. + function createThumbnail(src) { + var image = document.createElement('img'); image.onload = function() { var shadow = document.createElement('span'); - shadow.classList.add('shadow'); + shadow.className = 'shadow'; var link = createMostVisitedLink( - params, data.url, data.title, undefined, data.ping, data.provider); + params, data.url, data.title, undefined, data.provider); link.appendChild(shadow); link.appendChild(image); - // We add 'position: absolute' in anticipation that there could be more - // than one thumbnail. This will superpose the elements. - link.style.position = 'absolute'; - document.body.appendChild(link); + displayLink(link); }; - if (!isVisible) { - image.style.visibility = 'hidden'; - } - return image; - } - // Log an impression if we know the position of the tile. - if (isFinite(params.pos) && data.provider) { - logImpression(parseInt(params.pos, 10), data.provider); + image.onerror = function() { + if (data.domain) { + showDomainElement(); + logEvent(NTP_LOGGING_EVENT_TYPE.NTP_GRAY_TILE_FALLBACK); + } else { + showEmptyTile(); + logEvent(NTP_LOGGING_EVENT_TYPE.NTP_EXTERNAL_TILE_FALLBACK); + } + logEvent(NTP_LOGGING_EVENT_TYPE.NTP_THUMBNAIL_ERROR); + }; + image.src = src; } if (data.thumbnailUrl) { - var image = createAndAppendThumbnail(true); - // If a backup thumbnail URL was provided, preload it in case the first - // thumbnail errors. The backup thumbnail is always preloaded so that the - // server can't gain knowledge on the local thumbnail DB by specifying a - // second URL that is only sometimes fetched. - if (data.thumbnailUrl2) { - var image2 = createAndAppendThumbnail(false); - var imageFailed = false; - var image2Failed = false; - image2.onerror = function() { - image2Failed = true; - image2.style.visibility = 'hidden'; - if (imageFailed) { - showDomainElement(); - } - }; - image2.src = data.thumbnailUrl2; - // The first thumbnail's onerror function will swap the visibility of - // the two thumbnails. - image.onerror = function() { - logEvent(NTP_LOGGING_EVENT_TYPE.NTP_FALLBACK_THUMBNAIL_USED); - imageFailed = true; - image.style.visibility = 'hidden'; - if (image2Failed) { - showDomainElement(); - } else { - image2.style.visibility = 'visible'; - } - }; - logEvent(NTP_LOGGING_EVENT_TYPE.NTP_FALLBACK_THUMBNAIL_REQUESTED); - } else { - image.onerror = showDomainElement; - } - image.src = data.thumbnailUrl; - logEvent(NTP_LOGGING_EVENT_TYPE.NTP_THUMBNAIL_ATTEMPT); + createThumbnail(data.thumbnailUrl); + logEvent(NTP_LOGGING_EVENT_TYPE.NTP_THUMBNAIL_TILE); } else if (data.domain) { showDomainElement(); + logEvent(NTP_LOGGING_EVENT_TYPE.NTP_GRAY_TILE); } else { showEmptyTile(); + logEvent(NTP_LOGGING_EVENT_TYPE.NTP_EXTERNAL_TILE); + } + logEvent(NTP_LOGGING_EVENT_TYPE.NTP_TILE); + + // Log an impression if we know the position of the tile. + if (isFinite(params.pos) && data.provider) { + logMostVisitedImpression(parseInt(params.pos, 10), data.provider); } }); }); |