1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5 6/** 7 * @fileoverview Rendering for iframed most visited thumbnails. 8 */ 9 10window.addEventListener('DOMContentLoaded', function() { 11 'use strict'; 12 13 fillMostVisited(document.location, function(params, data) { 14 function logEvent(eventName) { 15 chrome.embeddedSearch.newTabPage.logEvent(eventName); 16 } 17 function logMostVisitedImpression(tileIndex, provider) { 18 chrome.embeddedSearch.newTabPage.logMostVisitedImpression( 19 tileIndex, provider); 20 } 21 function displayLink(link) { 22 document.body.appendChild(link); 23 window.parent.postMessage('linkDisplayed', '{{ORIGIN}}'); 24 } 25 function showDomainElement() { 26 var link = createMostVisitedLink( 27 params, data.url, data.title, undefined, data.direction, 28 data.provider); 29 var domain = document.createElement('div'); 30 domain.textContent = data.domain; 31 link.appendChild(domain); 32 displayLink(link); 33 } 34 // Called on intentionally empty tiles for which the visuals are handled 35 // externally by the page itself. 36 function showEmptyTile() { 37 displayLink(createMostVisitedLink( 38 params, data.url, data.title, undefined, data.direction, 39 data.provider)); 40 } 41 // Creates and adds an image. 42 function createThumbnail(src) { 43 var image = document.createElement('img'); 44 image.onload = function() { 45 var link = createMostVisitedLink( 46 params, data.url, data.title, undefined, data.direction, 47 data.provider); 48 // Use blocker to prevent context menu from showing image-related items. 49 var blocker = document.createElement('span'); 50 blocker.className = 'blocker'; 51 link.appendChild(blocker); 52 link.appendChild(image); 53 displayLink(link); 54 }; 55 image.onerror = function() { 56 // If no external thumbnail fallback (etfb), and have domain. 57 if (!params.etfb && data.domain) { 58 showDomainElement(); 59 logEvent(NTP_LOGGING_EVENT_TYPE.NTP_GRAY_TILE_FALLBACK); 60 } else { 61 showEmptyTile(); 62 logEvent(NTP_LOGGING_EVENT_TYPE.NTP_EXTERNAL_TILE_FALLBACK); 63 } 64 logEvent(NTP_LOGGING_EVENT_TYPE.NTP_THUMBNAIL_ERROR); 65 }; 66 image.src = src; 67 } 68 69 if (data.thumbnailUrl) { 70 createThumbnail(data.thumbnailUrl); 71 logEvent(NTP_LOGGING_EVENT_TYPE.NTP_THUMBNAIL_TILE); 72 } else if (data.domain) { 73 showDomainElement(); 74 logEvent(NTP_LOGGING_EVENT_TYPE.NTP_GRAY_TILE); 75 } else { 76 showEmptyTile(); 77 logEvent(NTP_LOGGING_EVENT_TYPE.NTP_EXTERNAL_TILE); 78 } 79 logEvent(NTP_LOGGING_EVENT_TYPE.NTP_TILE); 80 81 // Log an impression if we know the position of the tile. 82 if (isFinite(params.pos) && data.provider) { 83 logMostVisitedImpression(parseInt(params.pos, 10), data.provider); 84 } 85 }); 86}); 87