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