• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.provider);
28      var domain = document.createElement('div');
29      domain.textContent = data.domain;
30      link.appendChild(domain);
31      displayLink(link);
32    }
33    // Called on intentionally empty tiles for which the visuals are handled
34    // externally by the page itself.
35    function showEmptyTile() {
36      displayLink(createMostVisitedLink(
37          params, data.url, data.title, undefined, data.provider));
38    }
39    // Creates and adds an image.
40    function createThumbnail(src) {
41      var image = document.createElement('img');
42      image.onload = function() {
43        var shadow = document.createElement('span');
44        shadow.className = 'shadow';
45        var link = createMostVisitedLink(
46            params, data.url, data.title, undefined, data.provider);
47        link.appendChild(shadow);
48        link.appendChild(image);
49        displayLink(link);
50      };
51      image.onerror = function() {
52        if (data.domain) {
53          showDomainElement();
54          logEvent(NTP_LOGGING_EVENT_TYPE.NTP_GRAY_TILE_FALLBACK);
55        } else {
56          showEmptyTile();
57          logEvent(NTP_LOGGING_EVENT_TYPE.NTP_EXTERNAL_TILE_FALLBACK);
58        }
59        logEvent(NTP_LOGGING_EVENT_TYPE.NTP_THUMBNAIL_ERROR);
60      };
61      image.src = src;
62    }
63
64    if (data.thumbnailUrl) {
65      createThumbnail(data.thumbnailUrl);
66      logEvent(NTP_LOGGING_EVENT_TYPE.NTP_THUMBNAIL_TILE);
67    } else if (data.domain) {
68      showDomainElement();
69      logEvent(NTP_LOGGING_EVENT_TYPE.NTP_GRAY_TILE);
70    } else {
71      showEmptyTile();
72      logEvent(NTP_LOGGING_EVENT_TYPE.NTP_EXTERNAL_TILE);
73    }
74    logEvent(NTP_LOGGING_EVENT_TYPE.NTP_TILE);
75
76    // Log an impression if we know the position of the tile.
77    if (isFinite(params.pos) && data.provider) {
78      logMostVisitedImpression(parseInt(params.pos, 10), data.provider);
79    }
80  });
81});
82