| OLD | NEW |
| 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 #include "chrome/browser/ui/webui/sync_promo/sync_promo_handler.h" | 5 #include "chrome/browser/ui/webui/sync_promo/sync_promo_handler.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/time.h" | 10 #include "base/time.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 #include "content/public/browser/notification_details.h" | 26 #include "content/public/browser/notification_details.h" |
| 27 #include "content/public/browser/notification_service.h" | 27 #include "content/public/browser/notification_service.h" |
| 28 #include "content/public/browser/web_contents.h" | 28 #include "content/public/browser/web_contents.h" |
| 29 | 29 |
| 30 using content::NavigationController; | 30 using content::NavigationController; |
| 31 using content::OpenURLParams; | 31 using content::OpenURLParams; |
| 32 using content::Referrer; | 32 using content::Referrer; |
| 33 | 33 |
| 34 namespace { | 34 namespace { |
| 35 | 35 |
| 36 // User actions on the sync promo (aka "Sign in to Chrome"). | 36 // User actions on the sync promo, i.e., "Sign in to Chrome". |
| 37 enum SyncPromoUserFlowActionEnums { | 37 enum SyncPromoUserFlowActionEnums { |
| 38 SYNC_PROMO_VIEWED, | 38 SYNC_PROMO_VIEWED, |
| 39 SYNC_PROMO_LEARN_MORE_CLICKED, | 39 SYNC_PROMO_LEARN_MORE_CLICKED, |
| 40 SYNC_PROMO_ACCOUNT_HELP_CLICKED, | 40 SYNC_PROMO_ACCOUNT_HELP_CLICKED, |
| 41 SYNC_PROMO_CREATE_ACCOUNT_CLICKED, | 41 SYNC_PROMO_CREATE_ACCOUNT_CLICKED, |
| 42 SYNC_PROMO_SKIP_CLICKED, | 42 SYNC_PROMO_SKIP_CLICKED, |
| 43 SYNC_PROMO_SIGN_IN_ATTEMPTED, | 43 SYNC_PROMO_SIGN_IN_ATTEMPTED, |
| 44 SYNC_PROMO_SIGNED_IN_SUCCESSFULLY, | 44 SYNC_PROMO_SIGNED_IN_SUCCESSFULLY, |
| 45 SYNC_PROMO_ADVANCED_CLICKED, | 45 SYNC_PROMO_ADVANCED_CLICKED, |
| 46 SYNC_PROMO_ENCRYPTION_HELP_CLICKED, | 46 SYNC_PROMO_ENCRYPTION_HELP_CLICKED, |
| 47 SYNC_PROMO_CANCELLED_AFTER_SIGN_IN, | 47 SYNC_PROMO_CANCELLED_AFTER_SIGN_IN, |
| 48 SYNC_PROMO_CONFIRMED_AFTER_SIGN_IN, | 48 SYNC_PROMO_CONFIRMED_AFTER_SIGN_IN, |
| 49 SYNC_PROMO_CLOSED_TAB, | 49 SYNC_PROMO_CLOSED_TAB, |
| 50 SYNC_PROMO_CLOSED_WINDOW, | 50 SYNC_PROMO_CLOSED_WINDOW, |
| 51 SYNC_PROMO_LEFT_DURING_THROBBER, | 51 SYNC_PROMO_LEFT_DURING_THROBBER, |
| 52 SYNC_PROMO_BUCKET_BOUNDARY, | 52 SYNC_PROMO_BUCKET_BOUNDARY, |
| 53 SYNC_PROMO_FIRST_VALID_JS_ACTION = SYNC_PROMO_LEARN_MORE_CLICKED, | 53 SYNC_PROMO_FIRST_VALID_JS_ACTION = SYNC_PROMO_LEARN_MORE_CLICKED, |
| 54 SYNC_PROMO_LAST_VALID_JS_ACTION = SYNC_PROMO_CONFIRMED_AFTER_SIGN_IN, | 54 SYNC_PROMO_LAST_VALID_JS_ACTION = SYNC_PROMO_CONFIRMED_AFTER_SIGN_IN, |
| 55 }; | 55 }; |
| 56 | 56 |
| 57 // This was added because of the need to change the existing UMA enum for the | 57 // This was added because of the need to change the existing UMA enum for the |
| 58 // sync promo mid-flight. Ideally these values would be contiguous, but the | 58 // sync promo mid-flight. Ideally these values would be contiguous, but the real |
| 59 // real world is not always ideal. | 59 // world is not always ideal. |
| 60 static bool IsValidUserFlowAction(int action) { | 60 static bool IsValidUserFlowAction(int action) { |
| 61 return (action >= SYNC_PROMO_FIRST_VALID_JS_ACTION && | 61 return (action >= SYNC_PROMO_FIRST_VALID_JS_ACTION && |
| 62 action <= SYNC_PROMO_LAST_VALID_JS_ACTION) || | 62 action <= SYNC_PROMO_LAST_VALID_JS_ACTION) || |
| 63 action == SYNC_PROMO_LEFT_DURING_THROBBER; | 63 action == SYNC_PROMO_LEFT_DURING_THROBBER; |
| 64 } | 64 } |
| 65 | 65 |
| 66 } // namespace | 66 } // namespace |
| 67 | 67 |
| 68 SyncPromoHandler::SyncPromoHandler(ProfileManager* profile_manager) | 68 SyncPromoHandler::SyncPromoHandler(ProfileManager* profile_manager) |
| 69 : SyncSetupHandler(profile_manager), | 69 : SyncSetupHandler(profile_manager), |
| 70 prefs_(NULL), |
| 70 window_already_closed_(false) { | 71 window_already_closed_(false) { |
| 71 } | 72 } |
| 72 | 73 |
| 73 SyncPromoHandler::~SyncPromoHandler() { | 74 SyncPromoHandler::~SyncPromoHandler() { |
| 74 } | 75 } |
| 75 | 76 |
| 76 // static | 77 // static |
| 77 void SyncPromoHandler::RegisterUserPrefs(PrefService* prefs) { | 78 void SyncPromoHandler::RegisterUserPrefs(PrefService* prefs) { |
| 78 prefs->RegisterIntegerPref(prefs::kSyncPromoViewCount, 0, | 79 prefs->RegisterIntegerPref(prefs::kSyncPromoViewCount, 0, |
| 79 PrefService::UNSYNCABLE_PREF); | 80 PrefService::UNSYNCABLE_PREF); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 92 IsViewSourceMode()) { | 93 IsViewSourceMode()) { |
| 93 // Listen to see if the tab we're in gets closed. | 94 // Listen to see if the tab we're in gets closed. |
| 94 registrar_.Add(this, chrome::NOTIFICATION_TAB_CLOSING, | 95 registrar_.Add(this, chrome::NOTIFICATION_TAB_CLOSING, |
| 95 content::Source<NavigationController>( | 96 content::Source<NavigationController>( |
| 96 &web_ui()->GetWebContents()->GetController())); | 97 &web_ui()->GetWebContents()->GetController())); |
| 97 // Listen to see if the window we're in gets closed. | 98 // Listen to see if the window we're in gets closed. |
| 98 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_CLOSING, | 99 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_CLOSING, |
| 99 content::NotificationService::AllSources()); | 100 content::NotificationService::AllSources()); |
| 100 } | 101 } |
| 101 | 102 |
| 102 web_ui()->RegisterMessageCallback("SyncPromo:Close", | 103 web_ui()->RegisterMessageCallback( |
| 104 "SyncPromo:Close", |
| 103 base::Bind(&SyncPromoHandler::HandleCloseSyncPromo, | 105 base::Bind(&SyncPromoHandler::HandleCloseSyncPromo, |
| 104 base::Unretained(this))); | 106 base::Unretained(this))); |
| 105 web_ui()->RegisterMessageCallback("SyncPromo:Initialize", | 107 web_ui()->RegisterMessageCallback( |
| 108 "SyncPromo:Initialize", |
| 106 base::Bind(&SyncPromoHandler::HandleInitializeSyncPromo, | 109 base::Bind(&SyncPromoHandler::HandleInitializeSyncPromo, |
| 107 base::Unretained(this))); | 110 base::Unretained(this))); |
| 108 web_ui()->RegisterMessageCallback("SyncPromo:RecordSignInAttempts", | 111 web_ui()->RegisterMessageCallback( |
| 112 "SyncPromo:RecordSignInAttempts", |
| 109 base::Bind(&SyncPromoHandler::HandleRecordSignInAttempts, | 113 base::Bind(&SyncPromoHandler::HandleRecordSignInAttempts, |
| 110 base::Unretained(this))); | 114 base::Unretained(this))); |
| 111 web_ui()->RegisterMessageCallback("SyncPromo:RecordThrobberTime", | 115 web_ui()->RegisterMessageCallback( |
| 116 "SyncPromo:RecordThrobberTime", |
| 112 base::Bind(&SyncPromoHandler::HandleRecordThrobberTime, | 117 base::Bind(&SyncPromoHandler::HandleRecordThrobberTime, |
| 113 base::Unretained(this))); | 118 base::Unretained(this))); |
| 114 web_ui()->RegisterMessageCallback("SyncPromo:ShowAdvancedSettings", | 119 web_ui()->RegisterMessageCallback( |
| 120 "SyncPromo:ShowAdvancedSettings", |
| 115 base::Bind(&SyncPromoHandler::HandleShowAdvancedSettings, | 121 base::Bind(&SyncPromoHandler::HandleShowAdvancedSettings, |
| 116 base::Unretained(this))); | 122 base::Unretained(this))); |
| 117 web_ui()->RegisterMessageCallback("SyncPromo:UserFlowAction", | 123 web_ui()->RegisterMessageCallback( |
| 124 "SyncPromo:UserFlowAction", |
| 118 base::Bind(&SyncPromoHandler::HandleUserFlowAction, | 125 base::Bind(&SyncPromoHandler::HandleUserFlowAction, |
| 119 base::Unretained(this))); | 126 base::Unretained(this))); |
| 120 web_ui()->RegisterMessageCallback("SyncPromo:UserSkipped", | 127 web_ui()->RegisterMessageCallback( |
| 128 "SyncPromo:UserSkipped", |
| 121 base::Bind(&SyncPromoHandler::HandleUserSkipped, | 129 base::Bind(&SyncPromoHandler::HandleUserSkipped, |
| 122 base::Unretained(this))); | 130 base::Unretained(this))); |
| 123 SyncSetupHandler::RegisterMessages(); | 131 SyncSetupHandler::RegisterMessages(); |
| 124 } | 132 } |
| 125 | 133 |
| 126 void SyncPromoHandler::RecordSignin() { | 134 void SyncPromoHandler::RecordSignin() { |
| 127 sync_promo_trial::RecordUserSignedIn(web_ui()); | 135 sync_promo_trial::RecordUserSignedIn(web_ui()); |
| 128 } | 136 } |
| 129 | 137 |
| 130 void SyncPromoHandler::DisplayConfigureSync(bool show_advanced, | 138 void SyncPromoHandler::DisplayConfigureSync(bool show_advanced, |
| 131 bool passphrase_failed) { | 139 bool passphrase_failed) { |
| 132 ProfileSyncService* service = GetSyncService(); | 140 ProfileSyncService* service = GetSyncService(); |
| 133 DCHECK(service); | 141 DCHECK(service); |
| 134 if (service->IsPassphraseRequired()) { | 142 if (service->IsPassphraseRequired()) { |
| 135 // If a passphrase is required then we must show the configure pane. | 143 // If a passphrase is required then we must show the configure pane. |
| 136 SyncSetupHandler::DisplayConfigureSync(true, passphrase_failed); | 144 SyncSetupHandler::DisplayConfigureSync(true, passphrase_failed); |
| 137 } else { | 145 } else { |
| 138 // If no passphrase is required then skip the configure pane and sync | 146 // If no passphrase is required then skip the configure pane and sync |
| 139 // everything by default. This makes the first run experience simpler. | 147 // everything by default. This makes the first run experience simpler. Note, |
| 140 // Note, there's an advanced link in the sync promo that takes users | 148 // there's an advanced link in the sync promo that takes users to Settings |
| 141 // to Settings where the configure pane is not skipped. | 149 // where the configure pane is not skipped. |
| 142 service->OnUserChoseDatatypes(true, syncable::ModelTypeSet()); | 150 service->OnUserChoseDatatypes(true, syncable::ModelTypeSet()); |
| 143 ConfigureSyncDone(); | 151 ConfigureSyncDone(); |
| 144 } | 152 } |
| 145 } | 153 } |
| 146 | 154 |
| 147 void SyncPromoHandler::Observe(int type, | 155 void SyncPromoHandler::Observe(int type, |
| 148 const content::NotificationSource& source, | 156 const content::NotificationSource& source, |
| 149 const content::NotificationDetails& details) { | 157 const content::NotificationDetails& details) { |
| 150 switch (type) { | 158 switch (type) { |
| 151 case chrome::NOTIFICATION_TAB_CLOSING: { | 159 case chrome::NOTIFICATION_TAB_CLOSING: { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 174 | 182 |
| 175 void SyncPromoHandler::HandleCloseSyncPromo(const base::ListValue* args) { | 183 void SyncPromoHandler::HandleCloseSyncPromo(const base::ListValue* args) { |
| 176 CloseSyncSetup(); | 184 CloseSyncSetup(); |
| 177 | 185 |
| 178 // If the user has signed in then set the pref to show them NTP bubble | 186 // If the user has signed in then set the pref to show them NTP bubble |
| 179 // confirming that they're signed in. | 187 // confirming that they're signed in. |
| 180 std::string username = prefs_->GetString(prefs::kGoogleServicesUsername); | 188 std::string username = prefs_->GetString(prefs::kGoogleServicesUsername); |
| 181 if (!username.empty()) | 189 if (!username.empty()) |
| 182 prefs_->SetBoolean(prefs::kSyncPromoShowNTPBubble, true); | 190 prefs_->SetBoolean(prefs::kSyncPromoShowNTPBubble, true); |
| 183 | 191 |
| 184 // If the browser window is being closed then don't try to navigate to | 192 // If the browser window is being closed then don't try to navigate to another |
| 185 // another URL. This prevents the browser window from flashing during | 193 // URL. This prevents the browser window from flashing during close. |
| 186 // close. | |
| 187 Browser* browser = | 194 Browser* browser = |
| 188 BrowserList::FindBrowserWithWebContents(web_ui()->GetWebContents()); | 195 BrowserList::FindBrowserWithWebContents(web_ui()->GetWebContents()); |
| 189 if (!browser || !browser->IsAttemptingToCloseBrowser()) { | 196 if (!browser || !browser->IsAttemptingToCloseBrowser()) { |
| 190 GURL url = SyncPromoUI::GetNextPageURLForSyncPromoURL( | 197 GURL url = SyncPromoUI::GetNextPageURLForSyncPromoURL( |
| 191 web_ui()->GetWebContents()->GetURL()); | 198 web_ui()->GetWebContents()->GetURL()); |
| 192 OpenURLParams params( | 199 OpenURLParams params( |
| 193 url, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_LINK, false); | 200 url, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_LINK, false); |
| 194 web_ui()->GetWebContents()->OpenURL(params); | 201 web_ui()->GetWebContents()->OpenURL(params); |
| 195 } | 202 } |
| 196 } | 203 } |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 int adjusted = GetViewCount() + amount; | 268 int adjusted = GetViewCount() + amount; |
| 262 prefs_->SetInteger(prefs::kSyncPromoViewCount, adjusted); | 269 prefs_->SetInteger(prefs::kSyncPromoViewCount, adjusted); |
| 263 return adjusted; | 270 return adjusted; |
| 264 } | 271 } |
| 265 | 272 |
| 266 void SyncPromoHandler::RecordUserFlowAction(int action) { | 273 void SyncPromoHandler::RecordUserFlowAction(int action) { |
| 267 // Send an enumeration to our single user flow histogram. | 274 // Send an enumeration to our single user flow histogram. |
| 268 UMA_HISTOGRAM_ENUMERATION("SyncPromo.UserFlow", action, | 275 UMA_HISTOGRAM_ENUMERATION("SyncPromo.UserFlow", action, |
| 269 SYNC_PROMO_BUCKET_BOUNDARY); | 276 SYNC_PROMO_BUCKET_BOUNDARY); |
| 270 } | 277 } |
| OLD | NEW |