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

Side by Side Diff: chrome/browser/resources/sync_promo.js

Issue 8502042: Sync Promo: Fix up focus. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: and deleting stale ntp3 resources Created 9 years 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
(Empty)
1 // Copyright (c) 2011 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 // TODO(sail): Refactor options_page and remove this include.
6 <include src="options/options_page.js"/>
7 <include src="sync_setup_overlay.js"/>
8
9 cr.define('sync_promo', function() {
10 /**
11 * SyncPromo class
12 * Subclass of options.SyncSetupOverlay that customizes the sync setup
13 * overlay for use in the new tab page.
14 * @class
15 */
16 function SyncPromo() {
17 options.SyncSetupOverlay.call(this, 'syncSetup',
18 templateData.syncSetupOverlayTitle,
19 'sync-setup-overlay');
20 }
21
22 // Replicating enum from chrome/common/extensions/extension_constants.h.
23 const actions = (function() {
24 var i = 0;
25 return {
26 VIEWED: i++,
27 LEARN_MORE_CLICKED: i++,
28 ACCOUNT_HELP_CLICKED: i++,
29 CREATE_ACCOUNT_CLICKED: i++,
30 SKIP_CLICKED: i++,
31 SIGN_IN_ATTEMPTED: i++,
32 SIGNED_IN_SUCCESSFULLY: i++,
33 ADVANCED_CLICKED: i++,
34 ENCRYPTION_HELP_CLICKED: i++,
35 CANCELLED_AFTER_SIGN_IN: i++,
36 CONFIRMED_AFTER_SIGN_IN: i++,
37 CLOSED_TAB: i++,
38 CLOSED_WINDOW: i++,
39 LEFT_DURING_THROBBER: i++,
40 };
41 }());
42
43 cr.addSingletonGetter(SyncPromo);
44
45 SyncPromo.prototype = {
46 __proto__: options.SyncSetupOverlay.prototype,
47
48 showOverlay_: function() {
49 $('sync-setup-overlay').hidden = false;
50 },
51
52 closeOverlay_: function() {
53 chrome.send('SyncPromo:Close');
54 },
55
56 // Initializes the page.
57 initializePage: function() {
58 localStrings = new LocalStrings();
59
60 options.SyncSetupOverlay.prototype.initializePage.call(this);
61
62 // Hide parts of the login UI and show the promo UI.
63 this.hideOuterLoginUI_();
64 $('sync-setup-login-promo-column').hidden = false;
65 $('promo-skip').hidden = false;
66
67 this.showSetupUI_();
68 chrome.send('SyncPromo:Initialize');
69
70 var self = this;
71
72 $('promo-skip-button').addEventListener('click', function() {
73 chrome.send('SyncPromo:UserSkipped');
74 self.closeOverlay_();
75 });
76
77 var learnMoreClickedAlready = false;
78 $('promo-learn-more-show').addEventListener('click', function() {
79 self.showLearnMore_(true);
80 if (!learnMoreClickedAlready)
81 chrome.send('SyncPromo:UserFlowAction', [actions.LEARN_MORE_CLICKED]);
82 learnMoreClickedAlready = true;
83 });
84
85 $('promo-learn-more-hide').addEventListener('click', function() {
86 self.showLearnMore_(false);
87 });
88
89 $('promo-advanced').addEventListener('click', function() {
90 chrome.send('SyncPromo:ShowAdvancedSettings');
91 });
92
93 var accountHelpClickedAlready = false;
94 $('cannot-access-account-link').addEventListener('click', function() {
95 if (!accountHelpClickedAlready)
96 chrome.send('SyncPromo:UserFlowAction',
97 [actions.ACCOUNT_HELP_CLICKED]);
98 accountHelpClickedAlready = true;
99 });
100
101 var createAccountClickedAlready = false;
102 $('create-account-link').addEventListener('click', function() {
103 if (!createAccountClickedAlready)
104 chrome.send('SyncPromo:UserFlowAction',
105 [actions.CREATE_ACCOUNT_CLICKED]);
106 createAccountClickedAlready = true;
107 });
108
109 // We listen to the <form>'s submit vs. the <input type="submit"> click so
110 // we also track users that use the keyboard and press enter.
111 var signInAttemptedAlready = false;
112 $('gaia-login-form').addEventListener('submit', function() {
113 ++self.signInAttempts_;
114 if (!signInAttemptedAlready)
115 chrome.send('SyncPromo:UserFlowAction', [actions.SIGN_IN_ATTEMPTED]);
116 signInAttemptedAlready = true;
117 });
118
119 var encryptionHelpClickedAlready = false;
120 $('encryption-help-link').addEventListener('click', function() {
121 if (!encryptionHelpClickedAlready )
122 chrome.send('SyncPromo:UserFlowAction',
123 [actions.ENCRYPTION_HELP_CLICKED]);
124 encryptionHelpClickedAlready = true;
125 });
126
127 var advancedOptionsClickedAlready = false;
128 $('customize-link').addEventListener('click', function() {
129 if (!advancedOptionsClickedAlready)
130 chrome.send('SyncPromo:UserFlowAction', [actions.ADVANCED_CLICKED]);
131 advancedOptionsClickedAlready = true;
132 });
133
134 // Re-used across both cancel buttons after a successful sign in.
135 var cancelFunc = function() {
136 chrome.send('SyncPromo:UserFlowAction',
137 [actions.CANCELLED_AFTER_SIGN_IN]);
138 };
139 $('confirm-everything-cancel').addEventListener('click', cancelFunc);
140 $('choose-datatypes-cancel').addEventListener('click', cancelFunc);
141
142 this.infographic_ = $('promo-infographic');
143 this.learnMore_ = $('promo-information');
144
145 this.infographic_.addEventListener('webkitTransitionEnd',
146 this.toggleHidden_.bind(this));
147 this.learnMore_.addEventListener('webkitTransitionEnd',
148 this.toggleHidden_.bind(this));
149 },
150
151 /**
152 * Called when the page is unloading to record number of times a user tried
153 * to sign in and if they left while a throbber was running.
154 * @private
155 */
156 recordPageViewActions_: function() {
157 chrome.send('SyncPromo:RecordSignInAttempts', [this.signInAttempts_]);
158 if (this.throbberStart_)
159 chrome.send('SyncPromo:UserFlowAction', [actions.LEFT_DURING_THROBBER]);
160 },
161
162 /**
163 * Remove the [hidden] attribute from the node that was not previously
164 * transitioning.
165 * @param {Event} e A -webkit-transition end event.
166 * @private
167 */
168 toggleHidden_: function(e) {
169 // Only show the other element if the target of this event was hidden
170 // (showing also triggers a transition end).
171 if (e.target.hidden) {
172 if (e.target === this.infographic_)
173 this.learnMore_.hidden = false;
174 else
175 this.infographic_.hidden = false;
176 }
177 },
178
179 /**
180 * Shows or hides the sync information.
181 * @param {Boolean} show True if sync information should be shown, false
182 * otherwise.
183 * @private
184 */
185 showLearnMore_: function(show) {
186 $('promo-learn-more-show').hidden = show;
187 $('promo-learn-more-hide').hidden = !show;
188 // Setting [hidden] triggers a transition, which (when ended) will trigger
189 // this.toggleHidden_.
190 (show ? this.infographic_ : this.learnMore_).hidden = true;
191 },
192
193 /** @inheritDoc */
194 sendConfiguration_: function() {
195 chrome.send('SyncPromo:UserFlowAction',
196 [actions.CONFIRMED_AFTER_SIGN_IN]);
197 options.SyncSetupOverlay.prototype.sendConfiguration_.apply(this,
198 arguments);
199 },
200
201 /**
202 * Shows or hides the title of the promo page.
203 * @param {Boolean} visible true if the title should be visible, false
204 * otherwise.
205 * @private
206 */
207 setPromoTitleVisible_: function(visible) {
208 $('promo-title').hidden = !visible;
209 },
210
211 /** @inheritDoc */
212 setThrobbersVisible_: function(visible) {
213 if (visible) {
214 this.throbberStart_ = Date.now();
215 } else {
216 if (this.throbberStart_) {
217 chrome.send('SyncPromo:RecordThrobberTime',
218 [Date.now() - this.throbberStart_]);
219 }
220 this.throbberStart_ = 0;
221 }
222 // Pass through to SyncSetupOverlay to handle display logic.
223 options.SyncSetupOverlay.prototype.setThrobbersVisible_.apply(
224 this, arguments);
225 },
226
227 /**
228 * Number of times a user attempted to sign in to GAIA during this page
229 * view.
230 * @private
231 */
232 signInAttempts_: 0,
233
234 /**
235 * The start time of a throbber on the page.
236 * @private
237 */
238 throbberStart_: 0,
239 };
240
241 SyncPromo.showErrorUI = function() {
242 SyncPromo.getInstance().showErrorUI_();
243 };
244
245 SyncPromo.showSetupUI = function() {
246 SyncPromo.getInstance().showSetupUI_();
247 };
248
249 SyncPromo.showSyncSetupPage = function(page, args) {
250 SyncPromo.getInstance().showSyncSetupPage_(page, args);
251 };
252
253 SyncPromo.showSuccessAndClose = function() {
254 SyncPromo.getInstance().showSuccessAndClose_();
255 };
256
257 SyncPromo.showSuccessAndSettingUp = function() {
258 chrome.send('SyncPromo:UserFlowAction', [actions.SIGNED_IN_SUCCESSFULLY]);
259 SyncPromo.getInstance().showSuccessAndSettingUp_();
260 };
261
262 SyncPromo.showStopSyncingUI = function() {
263 SyncPromo.getInstance().showStopSyncingUI_();
264 };
265
266 SyncPromo.initialize = function() {
267 SyncPromo.getInstance().initializePage();
268 };
269
270 SyncPromo.setPromoTitleVisible = function(visible) {
271 SyncPromo.getInstance().setPromoTitleVisible_(visible);
272 };
273
274 SyncPromo.recordPageViewActions = function() {
275 SyncPromo.getInstance().recordPageViewActions_();
276 };
277
278 SyncPromo.populatePromoMessage = function(resName) {
279 SyncPromo.getInstance().populatePromoMessage_(resName);
280 };
281
282 // Export
283 return {
284 SyncPromo: SyncPromo
285 };
286 });
287
288 var OptionsPage = options.OptionsPage;
289 var SyncSetupOverlay = sync_promo.SyncPromo;
290 window.addEventListener('DOMContentLoaded', sync_promo.SyncPromo.initialize);
291 window.addEventListener('beforeunload',
292 sync_promo.SyncPromo.recordPageViewActions.bind(sync_promo.SyncPromo));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698