OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 // TODO(sail): Refactor options_page and remove this include. | 5 // TODO(sail): Refactor options_page and remove this include. |
6 <include src="options/options_page.js"/> | 6 <include src="options/options_page.js"/> |
7 <include src="sync_setup_overlay.js"/> | 7 <include src="sync_setup_overlay.js"/> |
8 | 8 |
9 cr.define('sync_promo', function() { | 9 cr.define('sync_promo', function() { |
10 /** | 10 /** |
(...skipping 18 matching lines...) Expand all Loading... |
29 CREATE_ACCOUNT_CLICKED: i++, | 29 CREATE_ACCOUNT_CLICKED: i++, |
30 SKIP_CLICKED: i++, | 30 SKIP_CLICKED: i++, |
31 SIGN_IN_ATTEMPTED: i++, | 31 SIGN_IN_ATTEMPTED: i++, |
32 SIGNED_IN_SUCCESSFULLY: i++, | 32 SIGNED_IN_SUCCESSFULLY: i++, |
33 ADVANCED_CLICKED: i++, | 33 ADVANCED_CLICKED: i++, |
34 ENCRYPTION_HELP_CLICKED: i++, | 34 ENCRYPTION_HELP_CLICKED: i++, |
35 CANCELLED_AFTER_SIGN_IN: i++, | 35 CANCELLED_AFTER_SIGN_IN: i++, |
36 CONFIRMED_AFTER_SIGN_IN: i++, | 36 CONFIRMED_AFTER_SIGN_IN: i++, |
37 CLOSED_TAB: i++, | 37 CLOSED_TAB: i++, |
38 CLOSED_WINDOW: i++, | 38 CLOSED_WINDOW: i++, |
| 39 LEFT_DURING_THROBBER: i++, |
39 }; | 40 }; |
40 }()); | 41 }()); |
41 | 42 |
42 cr.addSingletonGetter(SyncPromo); | 43 cr.addSingletonGetter(SyncPromo); |
43 | 44 |
44 SyncPromo.prototype = { | 45 SyncPromo.prototype = { |
45 __proto__: options.SyncSetupOverlay.prototype, | 46 __proto__: options.SyncSetupOverlay.prototype, |
46 | 47 |
47 showOverlay_: function() { | 48 showOverlay_: function() { |
48 $('sync-setup-overlay').hidden = false; | 49 $('sync-setup-overlay').hidden = false; |
(...skipping 13 matching lines...) Expand all Loading... |
62 this.hideOuterLoginUI_(); | 63 this.hideOuterLoginUI_(); |
63 $('sync-setup-login-promo-column').hidden = false; | 64 $('sync-setup-login-promo-column').hidden = false; |
64 $('promo-skip').hidden = false; | 65 $('promo-skip').hidden = false; |
65 | 66 |
66 this.showSetupUI_(); | 67 this.showSetupUI_(); |
67 chrome.send('SyncPromo:Initialize'); | 68 chrome.send('SyncPromo:Initialize'); |
68 | 69 |
69 var self = this; | 70 var self = this; |
70 | 71 |
71 $('promo-skip-button').addEventListener('click', function() { | 72 $('promo-skip-button').addEventListener('click', function() { |
72 chrome.send('SyncPromo:UserFlowAction', [actions.SKIP_CLICKED]); | 73 chrome.send('SyncPromo:UserSkipped'); |
73 self.closeOverlay_(); | 74 self.closeOverlay_(); |
74 }); | 75 }); |
75 | 76 |
76 var learnMoreClickedAlready = false; | 77 var learnMoreClickedAlready = false; |
77 $('promo-learn-more-show').addEventListener('click', function() { | 78 $('promo-learn-more-show').addEventListener('click', function() { |
78 self.showLearnMore_(true); | 79 self.showLearnMore_(true); |
79 if (!learnMoreClickedAlready) | 80 if (!learnMoreClickedAlready) |
80 chrome.send('SyncPromo:UserFlowAction', [actions.LEARN_MORE_CLICKED]); | 81 chrome.send('SyncPromo:UserFlowAction', [actions.LEARN_MORE_CLICKED]); |
81 learnMoreClickedAlready = true; | 82 learnMoreClickedAlready = true; |
82 }); | 83 }); |
(...skipping 19 matching lines...) Expand all Loading... |
102 if (!createAccountClickedAlready) | 103 if (!createAccountClickedAlready) |
103 chrome.send('SyncPromo:UserFlowAction', | 104 chrome.send('SyncPromo:UserFlowAction', |
104 [actions.CREATE_ACCOUNT_CLICKED]); | 105 [actions.CREATE_ACCOUNT_CLICKED]); |
105 createAccountClickedAlready = true; | 106 createAccountClickedAlready = true; |
106 }); | 107 }); |
107 | 108 |
108 // We listen to the <form>'s submit vs. the <input type="submit"> click so | 109 // We listen to the <form>'s submit vs. the <input type="submit"> click so |
109 // we also track users that use the keyboard and press enter. | 110 // we also track users that use the keyboard and press enter. |
110 var signInAttemptedAlready = false; | 111 var signInAttemptedAlready = false; |
111 $('gaia-login-form').addEventListener('submit', function() { | 112 $('gaia-login-form').addEventListener('submit', function() { |
| 113 ++self.signInAttempts_; |
112 if (!signInAttemptedAlready) | 114 if (!signInAttemptedAlready) |
113 chrome.send('SyncPromo:UserFlowAction', [actions.SIGN_IN_ATTEMPTED]); | 115 chrome.send('SyncPromo:UserFlowAction', [actions.SIGN_IN_ATTEMPTED]); |
114 signInAttemptedAlready = true; | 116 signInAttemptedAlready = true; |
115 }); | 117 }); |
116 | 118 |
117 var encryptionHelpClickedAlready = false; | 119 var encryptionHelpClickedAlready = false; |
118 $('encryption-help-link').addEventListener('click', function() { | 120 $('encryption-help-link').addEventListener('click', function() { |
119 if (!encryptionHelpClickedAlready ) | 121 if (!encryptionHelpClickedAlready ) |
120 chrome.send('SyncPromo:UserFlowAction', | 122 chrome.send('SyncPromo:UserFlowAction', |
121 [actions.ENCRYPTION_HELP_CLICKED]); | 123 [actions.ENCRYPTION_HELP_CLICKED]); |
(...skipping 18 matching lines...) Expand all Loading... |
140 this.infographic_ = $('promo-infographic'); | 142 this.infographic_ = $('promo-infographic'); |
141 this.learnMore_ = $('promo-information'); | 143 this.learnMore_ = $('promo-information'); |
142 | 144 |
143 this.infographic_.addEventListener('webkitTransitionEnd', | 145 this.infographic_.addEventListener('webkitTransitionEnd', |
144 this.toggleHidden_.bind(this)); | 146 this.toggleHidden_.bind(this)); |
145 this.learnMore_.addEventListener('webkitTransitionEnd', | 147 this.learnMore_.addEventListener('webkitTransitionEnd', |
146 this.toggleHidden_.bind(this)); | 148 this.toggleHidden_.bind(this)); |
147 }, | 149 }, |
148 | 150 |
149 /** | 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 /** |
150 * Remove the [hidden] attribute from the node that was not previously | 163 * Remove the [hidden] attribute from the node that was not previously |
151 * transitioning. | 164 * transitioning. |
152 * @param {Event} e A -webkit-transition end event. | 165 * @param {Event} e A -webkit-transition end event. |
153 * @private | 166 * @private |
154 */ | 167 */ |
155 toggleHidden_: function(e) { | 168 toggleHidden_: function(e) { |
156 // Only show the other element if the target of this event was hidden | 169 // Only show the other element if the target of this event was hidden |
157 // (showing also triggers a transition end). | 170 // (showing also triggers a transition end). |
158 if (e.target.hidden) { | 171 if (e.target.hidden) { |
159 if (e.target === this.infographic_) | 172 if (e.target === this.infographic_) |
(...skipping 26 matching lines...) Expand all Loading... |
186 }, | 199 }, |
187 | 200 |
188 /** | 201 /** |
189 * Shows or hides the title of the promo page. | 202 * Shows or hides the title of the promo page. |
190 * @param {Boolean} visible true if the title should be visible, false | 203 * @param {Boolean} visible true if the title should be visible, false |
191 * otherwise. | 204 * otherwise. |
192 * @private | 205 * @private |
193 */ | 206 */ |
194 setPromoTitleVisible_: function(visible) { | 207 setPromoTitleVisible_: function(visible) { |
195 $('promo-title').hidden = !visible; | 208 $('promo-title').hidden = !visible; |
196 } | 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, |
197 }; | 239 }; |
198 | 240 |
199 SyncPromo.showErrorUI = function() { | 241 SyncPromo.showErrorUI = function() { |
200 SyncPromo.getInstance().showErrorUI_(); | 242 SyncPromo.getInstance().showErrorUI_(); |
201 }; | 243 }; |
202 | 244 |
203 SyncPromo.showSetupUI = function() { | 245 SyncPromo.showSetupUI = function() { |
204 SyncPromo.getInstance().showSetupUI_(); | 246 SyncPromo.getInstance().showSetupUI_(); |
205 }; | 247 }; |
206 | 248 |
(...skipping 13 matching lines...) Expand all Loading... |
220 SyncPromo.showStopSyncingUI = function() { | 262 SyncPromo.showStopSyncingUI = function() { |
221 SyncPromo.getInstance().showStopSyncingUI_(); | 263 SyncPromo.getInstance().showStopSyncingUI_(); |
222 }; | 264 }; |
223 | 265 |
224 SyncPromo.initialize = function() { | 266 SyncPromo.initialize = function() { |
225 SyncPromo.getInstance().initializePage(); | 267 SyncPromo.getInstance().initializePage(); |
226 }; | 268 }; |
227 | 269 |
228 SyncPromo.setPromoTitleVisible = function(visible) { | 270 SyncPromo.setPromoTitleVisible = function(visible) { |
229 SyncPromo.getInstance().setPromoTitleVisible_(visible); | 271 SyncPromo.getInstance().setPromoTitleVisible_(visible); |
230 } | 272 }; |
| 273 |
| 274 SyncPromo.recordPageViewActions = function() { |
| 275 SyncPromo.getInstance().recordPageViewActions_(); |
| 276 }; |
231 | 277 |
232 // Export | 278 // Export |
233 return { | 279 return { |
234 SyncPromo : SyncPromo | 280 SyncPromo: SyncPromo |
235 }; | 281 }; |
236 }); | 282 }); |
237 | 283 |
238 var OptionsPage = options.OptionsPage; | 284 var OptionsPage = options.OptionsPage; |
239 var SyncSetupOverlay = sync_promo.SyncPromo; | 285 var SyncSetupOverlay = sync_promo.SyncPromo; |
240 window.addEventListener('DOMContentLoaded', sync_promo.SyncPromo.initialize); | 286 window.addEventListener('DOMContentLoaded', sync_promo.SyncPromo.initialize); |
| 287 window.addEventListener('beforeunload', |
| 288 sync_promo.SyncPromo.recordPageViewActions.bind(sync_promo.SyncPromo)); |
OLD | NEW |