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

Side by Side Diff: chrome/browser/resources/ntp4/other_sessions.js

Issue 9838064: Add a sign-in promo message to the Other Devices menu. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 * @fileoverview The menu that shows tabs from sessions on other devices. 6 * @fileoverview The menu that shows tabs from sessions on other devices.
7 */ 7 */
8 8
9 cr.define('ntp', function() { 9 cr.define('ntp', function() {
10 'use strict'; 10 'use strict';
11 11
12 var localStrings = new LocalStrings(); 12 var localStrings = new LocalStrings();
13 var Menu = cr.ui.Menu; 13 var Menu = cr.ui.Menu;
14 var MenuItem = cr.ui.MenuItem; 14 var MenuItem = cr.ui.MenuItem;
15 var MenuButton = cr.ui.MenuButton; 15 var MenuButton = cr.ui.MenuButton;
16 var OtherSessionsMenuButton = cr.ui.define('button'); 16 var OtherSessionsMenuButton = cr.ui.define('button');
17 17
18 // Histogram buckets for UMA tracking of menu usage. 18 // Histogram buckets for UMA tracking of menu usage.
19 var HISTOGRAM_EVENT = { 19 var HISTOGRAM_EVENT = {
20 INITIALIZED: 0, 20 INITIALIZED: 0,
21 SHOW_MENU: 1, 21 SHOW_MENU: 1,
22 LINK_CLICKED: 2, 22 LINK_CLICKED: 2,
23 LINK_RIGHT_CLICKED: 3 23 LINK_RIGHT_CLICKED: 3
24 }; 24 };
25 var HISTOGRAM_EVENT_LIMIT = HISTOGRAM_EVENT.LINK_RIGHT_CLICKED + 1; 25 var HISTOGRAM_EVENT_LIMIT = HISTOGRAM_EVENT.LINK_RIGHT_CLICKED + 1;
26 26
27 var isUserSignedIn = false;
28
29 // Function to show the sync sign-in UI.
30 var showSignInUI;
Dan Beam 2012/03/23 21:12:47 s/UI/Ui/ (and if it's like this anywhere else, fix
Patrick Dubroy 2012/03/26 15:16:46 Hmmm. The style guide says, "Prefer to capitalize
Dan Beam 2012/03/26 17:08:33 Then we need to eventually update those to *Ui* if
Patrick Dubroy 2012/03/26 19:36:46 I'm pretty sure "prefer" != "must". There is also
31
27 OtherSessionsMenuButton.prototype = { 32 OtherSessionsMenuButton.prototype = {
28 __proto__: MenuButton.prototype, 33 __proto__: MenuButton.prototype,
29 34
30 decorate: function() { 35 decorate: function() {
31 MenuButton.prototype.decorate.call(this); 36 MenuButton.prototype.decorate.call(this);
32 this.menu = new Menu; 37 this.menu = new Menu;
33 cr.ui.decorate(this.menu, Menu); 38 cr.ui.decorate(this.menu, Menu);
34 this.menu.classList.add('footer-menu'); 39 this.menu.classList.add('footer-menu');
35 this.menu.addEventListener('contextmenu', 40 this.menu.addEventListener('contextmenu',
36 this.onContextMenu_.bind(this), true); 41 this.onContextMenu_.bind(this), true);
37 document.body.appendChild(this.menu); 42 document.body.appendChild(this.menu);
38 43
39 this.sessions_ = []; 44 this.sessions_ = [];
40 this.anchorType = cr.ui.AnchorType.ABOVE; 45 this.anchorType = cr.ui.AnchorType.ABOVE;
41 this.invertLeftRight = true; 46 this.invertLeftRight = true;
42 47
43 chrome.send('getForeignSessions');
44 this.recordUmaEvent_(HISTOGRAM_EVENT.INITIALIZED); 48 this.recordUmaEvent_(HISTOGRAM_EVENT.INITIALIZED);
49 this.classList.remove('invisible');
45 }, 50 },
46 51
47 /** 52 /**
53 * Initialize the menu.
54 * @param {Boolean} signedIn Is the current user signed in?
Dan Beam 2012/03/23 21:12:47 s/Boolean/boolean/
Patrick Dubroy 2012/03/26 15:16:46 Done.
55 * @param {function} signInCallback A function to open the sign-in UI.
56 */
57 initialize: function(signedIn, signInCallback) {
58 isUserSignedIn = signedIn;
59 if (signInCallback)
60 showSignInUI = signInCallback;
61
62 // Always show the promo, because getForeignSessions can be a no-op.
63 this.showPromo_();
64 if (signedIn)
65 chrome.send('getForeignSessions');
66 },
67
68 /**
48 * Record an event in the UMA histogram. 69 * Record an event in the UMA histogram.
49 * @param {Number} eventId The id of the event to be recorded. 70 * @param {Number} eventId The id of the event to be recorded.
50 */ 71 */
51 recordUmaEvent_: function(eventId) { 72 recordUmaEvent_: function(eventId) {
52 chrome.send('metricsHandler:recordInHistogram', 73 chrome.send('metricsHandler:recordInHistogram',
53 ['NewTabPage.OtherSessionsMenu', eventId, HISTOGRAM_EVENT_LIMIT]); 74 ['NewTabPage.OtherSessionsMenu', eventId, HISTOGRAM_EVENT_LIMIT]);
54 }, 75 },
55 76
56 /** 77 /**
57 * Handle a context menu event for an object in the menu's DOM subtree. 78 * Handle a context menu event for an object in the menu's DOM subtree.
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 var clickHandler = this.makeClickHandler_( 137 var clickHandler = this.makeClickHandler_(
117 session.tag, String(window.sessionId), String(tab.sessionId)); 138 session.tag, String(window.sessionId), String(tab.sessionId));
118 a.addEventListener('click', clickHandler); 139 a.addEventListener('click', clickHandler);
119 section.appendChild(a); 140 section.appendChild(a);
120 } 141 }
121 } 142 }
122 }, 143 },
123 144
124 /** 145 /**
125 * Create the UI for the promo and place it inside the menu. 146 * Create the UI for the promo and place it inside the menu.
126 * The promo is shown instead of foreign session data when tab sync is 147 * The promo is shown when there is no foreign session data available.
127 * not enabled for a profile.
128 */ 148 */
129 showPromo_: function() { 149 showPromo_: function() {
130 var message = localStrings.getString('otherSessionsEmpty'); 150 // Clear the current contents of the menu.
131 this.menu.appendChild(this.ownerDocument.createTextNode(message)); 151 this.menu.innerHTML = '';
152
153 var emptyMessage = localStrings.getString('otherSessionsEmpty');
154 var doc = this.ownerDocument;
155 this.menu.appendChild(doc.createTextNode(emptyMessage));
Dan Beam 2012/03/23 21:12:47 eh, just put this in the markup and hide/unhide, w
Patrick Dubroy 2012/03/26 15:16:46 I put it into the markup in the template section.
156 this.menu.appendChild(doc.createElement('p'));
157 var link = doc.createElement('span');
158 link.classList.add('link-span');
159 link.textContent = localStrings.getString('otherSessionsSignInText');
160 link.addEventListener('click', function(e) {
161 console.log(showSignInUI);
Dan Beam 2012/03/23 21:12:47 remove
Patrick Dubroy 2012/03/26 15:16:46 Done.
162 showSignInUI(this);
Dan Beam 2012/03/23 21:12:47 use e.currentTarget, don't use |this| in JavaScrip
Patrick Dubroy 2012/03/26 15:16:46 Done. Thanks, that's a good thing to remember for
163 e.preventDefault();
164 });
165 this.menu.appendChild(link);
132 }, 166 },
133 167
134 /** 168 /**
135 * Sets the menu model data. 169 * Sets the menu model data.
136 * @param {Array} sessionList Array of objects describing the sessions 170 * @param {Array} sessionList Array of objects describing the sessions
137 * from other devices. 171 * from other devices.
138 */ 172 */
139 set sessions(sessionList) { 173 set sessions(sessionList) {
140 // Clear the current contents of the menu. 174 this.sessions_ = sessionList;
141 this.menu.innerHTML = ''; 175 if (sessionList.length == 0) {
176 this.showPromo_();
177 } else {
178 // Clear the current contents of the menu.
179 this.menu.innerHTML = '';
Dan Beam 2012/03/23 21:12:47 can you move this to central function that's calle
Patrick Dubroy 2012/03/26 15:16:46 Done.
142 180
143 // Rebuild the menu with the new data. 181 // Rebuild the menu with the new data.
144 for (var i = 0; i < sessionList.length; i++) { 182 for (var i = 0; i < sessionList.length; i++) {
145 this.addSession_(sessionList[i]); 183 this.addSession_(sessionList[i]);
184 }
146 } 185 }
186 },
147 187
148 if (sessionList.length == 0) 188 /**
149 this.classList.add('invisible'); 189 * Called from the new tab page when the user's signed in state changes.
Dan Beam 2012/03/23 21:12:47 doc param
Patrick Dubroy 2012/03/26 15:16:46 Done.
150 else 190 */
151 this.classList.remove('invisible'); 191 updateSignInState: function(signedIn) {
152 192 this.initialize(signedIn);
153 this.sessions_ = sessionList;
154 }, 193 },
155 }; 194 };
156 195
157 return { 196 return {
158 OtherSessionsMenuButton: OtherSessionsMenuButton, 197 OtherSessionsMenuButton: OtherSessionsMenuButton,
159 }; 198 };
160 }); 199 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698