OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 | 5 |
6 /** | 6 /** |
7 * @fileoverview Utilities for rendering most visited thumbnails and titles. | 7 * @fileoverview Utilities for rendering most visited thumbnails and titles. |
8 */ | 8 */ |
9 | 9 |
10 <include src="instant_iframe_validation.js"> | 10 <include src="instant_iframe_validation.js"> |
11 | 11 |
12 | 12 |
| 13 // TODO(treib): A number of things from this file (e.g. the "enums" below) are |
| 14 // duplicated in most_visited_single.js. Pull those out into a shared file. |
| 15 |
| 16 |
13 /** | 17 /** |
14 * The different types of events that are logged from the NTP. This enum is | 18 * The different types of events that are logged from the NTP. This enum is |
15 * used to transfer information from the NTP javascript to the renderer and is | 19 * used to transfer information from the NTP javascript to the renderer and is |
16 * not used as a UMA enum histogram's logged value. | 20 * not used as a UMA enum histogram's logged value. |
17 * Note: Keep in sync with common/ntp_logging_events.h | 21 * Note: Keep in sync with common/ntp_logging_events.h |
18 * @enum {number} | 22 * @enum {number} |
19 * @const | 23 * @const |
20 */ | 24 */ |
21 var NTP_LOGGING_EVENT_TYPE = { | 25 var NTP_LOGGING_EVENT_TYPE = { |
22 // The suggestion is coming from the server. | 26 // The suggestion is coming from the server. |
(...skipping 17 matching lines...) Expand all Loading... |
40 NTP_GRAY_TILE_FALLBACK: 7, | 44 NTP_GRAY_TILE_FALLBACK: 7, |
41 // The visuals of that tile's fallback are handled externally. | 45 // The visuals of that tile's fallback are handled externally. |
42 NTP_EXTERNAL_TILE_FALLBACK: 8, | 46 NTP_EXTERNAL_TILE_FALLBACK: 8, |
43 // The user moused over an NTP tile or title. | 47 // The user moused over an NTP tile or title. |
44 NTP_MOUSEOVER: 9, | 48 NTP_MOUSEOVER: 9, |
45 // A NTP Tile has finished loading (successfully or failing). | 49 // A NTP Tile has finished loading (successfully or failing). |
46 NTP_TILE_LOADED: 10, | 50 NTP_TILE_LOADED: 10, |
47 }; | 51 }; |
48 | 52 |
49 /** | 53 /** |
50 * Type of the impression provider for a generic client-provided suggestion. | 54 * The different sources that an NTP tile can have. |
51 * @type {string} | 55 * Note: Keep in sync with common/ntp_logging_events.h |
| 56 * @enum {number} |
52 * @const | 57 * @const |
53 */ | 58 */ |
54 var CLIENT_PROVIDER_NAME = 'client'; | 59 var NTPLoggingTileSource = { |
55 | 60 CLIENT: 0, |
56 /** | 61 SERVER: 1, |
57 * Type of the impression provider for a generic server-provided suggestion. | 62 }; |
58 * @type {string} | |
59 * @const | |
60 */ | |
61 var SERVER_PROVIDER_NAME = 'server'; | |
62 | 63 |
63 /** | 64 /** |
64 * The origin of this request. | 65 * The origin of this request. |
65 * @const {string} | 66 * @const {string} |
66 */ | 67 */ |
67 var DOMAIN_ORIGIN = '{{ORIGIN}}'; | 68 var DOMAIN_ORIGIN = '{{ORIGIN}}'; |
68 | 69 |
69 /** | 70 /** |
70 * Parses query parameters from Location. | 71 * Parses query parameters from Location. |
71 * @param {string} location The URL to generate the CSS url for. | 72 * @param {string} location The URL to generate the CSS url for. |
(...skipping 19 matching lines...) Expand all Loading... |
91 } | 92 } |
92 | 93 |
93 | 94 |
94 /** | 95 /** |
95 * Creates a new most visited link element. | 96 * Creates a new most visited link element. |
96 * @param {Object} params URL parameters containing styles for the link. | 97 * @param {Object} params URL parameters containing styles for the link. |
97 * @param {string} href The destination for the link. | 98 * @param {string} href The destination for the link. |
98 * @param {string} title The title for the link. | 99 * @param {string} title The title for the link. |
99 * @param {string|undefined} text The text for the link or none. | 100 * @param {string|undefined} text The text for the link or none. |
100 * @param {string|undefined} direction The text direction. | 101 * @param {string|undefined} direction The text direction. |
101 * @param {string|undefined} provider A provider name (max 8 alphanumeric | 102 * @param {number} tileSource The source from NTPLoggingTileSource. |
102 * characters) used for logging. Undefined if suggestion is not coming from | |
103 * the server. | |
104 * @return {HTMLAnchorElement} A new link element. | 103 * @return {HTMLAnchorElement} A new link element. |
105 */ | 104 */ |
106 function createMostVisitedLink(params, href, title, text, direction, provider) { | 105 function createMostVisitedLink( |
| 106 params, href, title, text, direction, tileSource) { |
107 var styles = getMostVisitedStyles(params, !!text); | 107 var styles = getMostVisitedStyles(params, !!text); |
108 var link = document.createElement('a'); | 108 var link = document.createElement('a'); |
109 link.style.color = styles.color; | 109 link.style.color = styles.color; |
110 link.style.fontSize = styles.fontSize + 'px'; | 110 link.style.fontSize = styles.fontSize + 'px'; |
111 if (styles.fontFamily) | 111 if (styles.fontFamily) |
112 link.style.fontFamily = styles.fontFamily; | 112 link.style.fontFamily = styles.fontFamily; |
113 if (styles.textAlign) | 113 if (styles.textAlign) |
114 link.style.textAlign = styles.textAlign; | 114 link.style.textAlign = styles.textAlign; |
115 if (styles.textFadePos) { | 115 if (styles.textFadePos) { |
116 var dir = /^rtl$/i.test(direction) ? 'to left' : 'to right'; | 116 var dir = /^rtl$/i.test(direction) ? 'to left' : 'to right'; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 var isServerSuggestion = 'url' in params; | 151 var isServerSuggestion = 'url' in params; |
152 | 152 |
153 // Ping are only populated for server-side suggestions, never for MV. | 153 // Ping are only populated for server-side suggestions, never for MV. |
154 if (isServerSuggestion && params.ping) { | 154 if (isServerSuggestion && params.ping) { |
155 generatePing(DOMAIN_ORIGIN + params.ping); | 155 generatePing(DOMAIN_ORIGIN + params.ping); |
156 } | 156 } |
157 | 157 |
158 var ntpApiHandle = chrome.embeddedSearch.newTabPage; | 158 var ntpApiHandle = chrome.embeddedSearch.newTabPage; |
159 if ('pos' in params && isFinite(params.pos)) { | 159 if ('pos' in params && isFinite(params.pos)) { |
160 ntpApiHandle.logMostVisitedNavigation(parseInt(params.pos, 10), | 160 ntpApiHandle.logMostVisitedNavigation(parseInt(params.pos, 10), |
161 provider || ''); | 161 tileSource); |
162 } | 162 } |
163 | 163 |
164 // Follow <a> normally, so transition type will be LINK. | 164 // Follow <a> normally, so transition type will be LINK. |
165 }; | 165 }; |
166 | 166 |
167 link.addEventListener('click', navigateFunction); | 167 link.addEventListener('click', navigateFunction); |
168 link.addEventListener('keydown', function(event) { | 168 link.addEventListener('keydown', function(event) { |
169 if (event.keyCode == 46 /* DELETE */ || | 169 if (event.keyCode == 46 /* DELETE */ || |
170 event.keyCode == 8 /* BACKSPACE */) { | 170 event.keyCode == 8 /* BACKSPACE */) { |
171 event.preventDefault(); | 171 event.preventDefault(); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 var data; | 270 var data; |
271 if (params.url) { | 271 if (params.url) { |
272 // Means that the suggestion data comes from the server. Create data object. | 272 // Means that the suggestion data comes from the server. Create data object. |
273 data = { | 273 data = { |
274 url: params.url, | 274 url: params.url, |
275 largeIconUrl: params.liu || '', | 275 largeIconUrl: params.liu || '', |
276 thumbnailUrl: params.tu || '', | 276 thumbnailUrl: params.tu || '', |
277 title: params.ti || '', | 277 title: params.ti || '', |
278 direction: params.di || '', | 278 direction: params.di || '', |
279 domain: params.dom || '', | 279 domain: params.dom || '', |
280 provider: params.pr || SERVER_PROVIDER_NAME | 280 tileSource: NTPLoggingTileSource.SERVER |
281 }; | 281 }; |
282 } else { | 282 } else { |
283 var apiHandle = chrome.embeddedSearch.searchBox; | 283 var apiHandle = chrome.embeddedSearch.searchBox; |
284 data = apiHandle.getMostVisitedItemData(params.rid); | 284 data = apiHandle.getMostVisitedItemData(params.rid); |
285 if (!data) | 285 if (!data) |
286 return; | 286 return; |
287 // Allow server-side provider override. | 287 data.tileSource: NTPLoggingTileSource.CLIENT; |
288 data.provider = params.pr || CLIENT_PROVIDER_NAME; | |
289 } | 288 } |
290 | 289 |
291 if (isFinite(params.dummy) && parseInt(params.dummy, 10)) { | 290 if (isFinite(params.dummy) && parseInt(params.dummy, 10)) { |
292 data.dummy = true; | 291 data.dummy = true; |
293 } | 292 } |
294 if (/^javascript:/i.test(data.url) || | 293 if (/^javascript:/i.test(data.url) || |
295 /^javascript:/i.test(data.thumbnailUrl) || | 294 /^javascript:/i.test(data.thumbnailUrl)) |
296 !/^[a-z0-9]{0,8}$/i.test(data.provider)) | |
297 return; | 295 return; |
298 if (data.direction) | 296 if (data.direction) |
299 document.body.dir = data.direction; | 297 document.body.dir = data.direction; |
300 fill(params, data); | 298 fill(params, data); |
301 } | 299 } |
302 | 300 |
303 | 301 |
304 /** | 302 /** |
305 * Sends a POST request to ping url. | 303 * Sends a POST request to ping url. |
306 * @param {string} url URL to be pinged. | 304 * @param {string} url URL to be pinged. |
307 */ | 305 */ |
308 function generatePing(url) { | 306 function generatePing(url) { |
309 if (navigator.sendBeacon) { | 307 if (navigator.sendBeacon) { |
310 navigator.sendBeacon(url); | 308 navigator.sendBeacon(url); |
311 } else { | 309 } else { |
312 // if sendBeacon is not enabled, we fallback for "a ping". | 310 // if sendBeacon is not enabled, we fallback for "a ping". |
313 var a = document.createElement('a'); | 311 var a = document.createElement('a'); |
314 a.href = '#'; | 312 a.href = '#'; |
315 a.ping = url; | 313 a.ping = url; |
316 a.click(); | 314 a.click(); |
317 } | 315 } |
318 } | 316 } |
OLD | NEW |