Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: chrome/browser/resources/local_ntp/most_visited_util.js

Issue 2429523002: Cleanup desktop NTP metrics recording (Closed)
Patch Set: . Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
17 /**
18 * The different types of events that are logged from the NTP. This enum is
19 * used to transfer information from the NTP javascript to the renderer and is
20 * not used as a UMA enum histogram's logged value.
21 * Note: Keep in sync with common/ntp_logging_events.h
22 * @enum {number}
23 * @const
24 */
25 var NTP_LOGGING_EVENT_TYPE = {
26 // The suggestion is coming from the server.
27 NTP_SERVER_SIDE_SUGGESTION: 0,
28 // The suggestion is coming from the client.
29 NTP_CLIENT_SIDE_SUGGESTION: 1,
30 // Indicates a tile was rendered, no matter if it's a thumbnail, a gray tile
31 // or an external tile.
32 NTP_TILE: 2,
33 // A NTP Tile has finished loading (successfully or failing).
34 NTP_TILE_LOADED: 10,
35 };
36
37 /**
38 * The different sources that an NTP tile can have.
39 * Note: Keep in sync with common/ntp_logging_events.h
40 * @enum {number}
41 * @const
42 */
43 var NTPLoggingTileSource = {
44 CLIENT: 0,
45 SERVER: 1,
46 };
47
48 /** 13 /**
49 * The origin of this request. 14 * The origin of this request.
50 * @const {string} 15 * @const {string}
51 */ 16 */
52 var DOMAIN_ORIGIN = '{{ORIGIN}}'; 17 var DOMAIN_ORIGIN = '{{ORIGIN}}';
53 18
54 /** 19 /**
55 * Parses query parameters from Location. 20 * Parses query parameters from Location.
56 * @param {string} location The URL to generate the CSS url for. 21 * @param {string} location The URL to generate the CSS url for.
57 * @return {Object} Dictionary containing name value pairs for URL. 22 * @return {Object} Dictionary containing name value pairs for URL.
(...skipping 18 matching lines...) Expand all
76 } 41 }
77 42
78 43
79 /** 44 /**
80 * Creates a new most visited link element. 45 * Creates a new most visited link element.
81 * @param {Object} params URL parameters containing styles for the link. 46 * @param {Object} params URL parameters containing styles for the link.
82 * @param {string} href The destination for the link. 47 * @param {string} href The destination for the link.
83 * @param {string} title The title for the link. 48 * @param {string} title The title for the link.
84 * @param {string|undefined} text The text for the link or none. 49 * @param {string|undefined} text The text for the link or none.
85 * @param {string|undefined} direction The text direction. 50 * @param {string|undefined} direction The text direction.
86 * @param {number} tileSource The source from NTPLoggingTileSource.
87 * @return {HTMLAnchorElement} A new link element. 51 * @return {HTMLAnchorElement} A new link element.
88 */ 52 */
89 function createMostVisitedLink( 53 function createMostVisitedLink(params, href, title, text, direction) {
90 params, href, title, text, direction, tileSource) {
91 var styles = getMostVisitedStyles(params, !!text); 54 var styles = getMostVisitedStyles(params, !!text);
92 var link = document.createElement('a'); 55 var link = document.createElement('a');
93 link.style.color = styles.color; 56 link.style.color = styles.color;
94 link.style.fontSize = styles.fontSize + 'px'; 57 link.style.fontSize = styles.fontSize + 'px';
95 if (styles.fontFamily) 58 if (styles.fontFamily)
96 link.style.fontFamily = styles.fontFamily; 59 link.style.fontFamily = styles.fontFamily;
97 if (styles.textAlign) 60 if (styles.textAlign)
98 link.style.textAlign = styles.textAlign; 61 link.style.textAlign = styles.textAlign;
99 if (styles.textFadePos) { 62 if (styles.textFadePos) {
100 var dir = /^rtl$/i.test(direction) ? 'to left' : 'to right'; 63 var dir = /^rtl$/i.test(direction) ? 'to left' : 'to right';
(...skipping 27 matching lines...) Expand all
128 }); 91 });
129 92
130 var navigateFunction = function handleNavigation(e) { 93 var navigateFunction = function handleNavigation(e) {
131 var isServerSuggestion = 'url' in params; 94 var isServerSuggestion = 'url' in params;
132 95
133 // Ping are only populated for server-side suggestions, never for MV. 96 // Ping are only populated for server-side suggestions, never for MV.
134 if (isServerSuggestion && params.ping) { 97 if (isServerSuggestion && params.ping) {
135 generatePing(DOMAIN_ORIGIN + params.ping); 98 generatePing(DOMAIN_ORIGIN + params.ping);
136 } 99 }
137 100
138 var ntpApiHandle = chrome.embeddedSearch.newTabPage;
139 if ('pos' in params && isFinite(params.pos)) {
140 ntpApiHandle.logMostVisitedNavigation(parseInt(params.pos, 10),
141 tileSource);
142 }
143
144 // Follow <a> normally, so transition type will be LINK. 101 // Follow <a> normally, so transition type will be LINK.
145 }; 102 };
146 103
147 link.addEventListener('click', navigateFunction); 104 link.addEventListener('click', navigateFunction);
148 link.addEventListener('keydown', function(event) { 105 link.addEventListener('keydown', function(event) {
149 if (event.keyCode == 46 /* DELETE */ || 106 if (event.keyCode == 46 /* DELETE */ ||
150 event.keyCode == 8 /* BACKSPACE */) { 107 event.keyCode == 8 /* BACKSPACE */) {
151 event.preventDefault(); 108 event.preventDefault();
152 window.parent.postMessage('tileBlacklisted,' + params.pos, DOMAIN_ORIGIN); 109 window.parent.postMessage('tileBlacklisted,' + params.pos, DOMAIN_ORIGIN);
153 } else if (event.keyCode == 13 /* ENTER */ || 110 } else if (event.keyCode == 13 /* ENTER */ ||
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 /** 193 /**
237 * @param {string} location A location containing URL parameters. 194 * @param {string} location A location containing URL parameters.
238 * @param {function(Object, Object)} fill A function called with styles and 195 * @param {function(Object, Object)} fill A function called with styles and
239 * data to fill. 196 * data to fill.
240 */ 197 */
241 function fillMostVisited(location, fill) { 198 function fillMostVisited(location, fill) {
242 var params = parseQueryParams(location); 199 var params = parseQueryParams(location);
243 params.rid = parseInt(params.rid, 10); 200 params.rid = parseInt(params.rid, 10);
244 if (!isFinite(params.rid) && !params.url) 201 if (!isFinite(params.rid) && !params.url)
245 return; 202 return;
246 // Log whether the suggestion was obtained from the server or the client.
247 chrome.embeddedSearch.newTabPage.logEvent(params.url ?
248 NTP_LOGGING_EVENT_TYPE.NTP_SERVER_SIDE_SUGGESTION :
249 NTP_LOGGING_EVENT_TYPE.NTP_CLIENT_SIDE_SUGGESTION);
250 var data; 203 var data;
251 if (params.url) { 204 if (params.url) {
252 // Means that the suggestion data comes from the server. Create data object. 205 // Means that the suggestion data comes from the server. Create data object.
253 data = { 206 data = {
254 url: params.url, 207 url: params.url,
255 largeIconUrl: params.liu || '', 208 largeIconUrl: params.liu || '',
256 thumbnailUrl: params.tu || '', 209 thumbnailUrl: params.tu || '',
257 title: params.ti || '', 210 title: params.ti || '',
258 direction: params.di || '', 211 direction: params.di || '',
259 domain: params.dom || '', 212 domain: params.dom || ''
260 tileSource: NTPLoggingTileSource.SERVER
261 }; 213 };
262 } else { 214 } else {
263 var apiHandle = chrome.embeddedSearch.searchBox; 215 var apiHandle = chrome.embeddedSearch.searchBox;
264 data = apiHandle.getMostVisitedItemData(params.rid); 216 data = apiHandle.getMostVisitedItemData(params.rid);
265 if (!data) 217 if (!data)
266 return; 218 return;
267 data.tileSource = NTPLoggingTileSource.CLIENT;
268 } 219 }
269 220
270 if (isFinite(params.dummy) && parseInt(params.dummy, 10)) { 221 if (isFinite(params.dummy) && parseInt(params.dummy, 10)) {
271 data.dummy = true; 222 data.dummy = true;
272 } 223 }
273 if (/^javascript:/i.test(data.url) || 224 if (/^javascript:/i.test(data.url) ||
274 /^javascript:/i.test(data.thumbnailUrl)) 225 /^javascript:/i.test(data.thumbnailUrl))
275 return; 226 return;
276 if (data.direction) 227 if (data.direction)
277 document.body.dir = data.direction; 228 document.body.dir = data.direction;
278 fill(params, data); 229 fill(params, data);
279 } 230 }
280 231
281 232
282 /** 233 /**
283 * Sends a POST request to ping url. 234 * Sends a POST request to ping url.
284 * @param {string} url URL to be pinged. 235 * @param {string} url URL to be pinged.
285 */ 236 */
286 function generatePing(url) { 237 function generatePing(url) {
287 if (navigator.sendBeacon) { 238 if (navigator.sendBeacon) {
288 navigator.sendBeacon(url); 239 navigator.sendBeacon(url);
289 } else { 240 } else {
290 // if sendBeacon is not enabled, we fallback for "a ping". 241 // if sendBeacon is not enabled, we fallback for "a ping".
291 var a = document.createElement('a'); 242 var a = document.createElement('a');
292 a.href = '#'; 243 a.href = '#';
293 a.ping = url; 244 a.ping = url;
294 a.click(); 245 a.click();
295 } 246 }
296 } 247 }
OLDNEW
« no previous file with comments | « chrome/browser/resources/local_ntp/most_visited_title.js ('k') | chrome/browser/ui/search/search_ipc_router_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698