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/sync/one_click_signin_helper.h" | 5 #include "chrome/browser/ui/sync/one_click_signin_helper.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/callback_forward.h" | 13 #include "base/callback.h" |
14 #include "base/callback_helpers.h" | 14 #include "base/callback_helpers.h" |
15 #include "base/compiler_specific.h" | 15 #include "base/compiler_specific.h" |
16 #include "base/metrics/field_trial.h" | 16 #include "base/metrics/field_trial.h" |
17 #include "base/metrics/histogram.h" | 17 #include "base/metrics/histogram.h" |
18 #include "base/prefs/pref_service.h" | 18 #include "base/prefs/pref_service.h" |
19 #include "base/string_util.h" | 19 #include "base/string_util.h" |
20 #include "base/strings/string_split.h" | 20 #include "base/strings/string_split.h" |
21 #include "base/supports_user_data.h" | 21 #include "base/supports_user_data.h" |
22 #include "base/utf_string_conversions.h" | 22 #include "base/utf_string_conversions.h" |
23 #include "base/values.h" | 23 #include "base/values.h" |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
238 NOTREACHED() << "Invalid auto_accept: " << args.auto_accept; | 238 NOTREACHED() << "Invalid auto_accept: " << args.auto_accept; |
239 break; | 239 break; |
240 } | 240 } |
241 if (action != one_click_signin::HISTOGRAM_MAX) | 241 if (action != one_click_signin::HISTOGRAM_MAX) |
242 LogOneClickHistogramValue(action); | 242 LogOneClickHistogramValue(action); |
243 } | 243 } |
244 | 244 |
245 void StartExplicitSync(const StartSyncArgs& args, | 245 void StartExplicitSync(const StartSyncArgs& args, |
246 content::WebContents* contents, | 246 content::WebContents* contents, |
247 OneClickSigninSyncStarter::StartSyncMode start_mode, | 247 OneClickSigninSyncStarter::StartSyncMode start_mode, |
248 base::Closure start_sync_callback, | |
248 int button) { | 249 int button) { |
249 if (button == IDS_ONE_CLICK_SIGNIN_CONFIRM_EMAIL_DIALOG_OK_BUTTON) { | 250 if (button == IDS_ONE_CLICK_SIGNIN_CONFIRM_EMAIL_DIALOG_OK_BUTTON) { |
250 contents->GetController().LoadURL( | 251 contents->GetController().LoadURL( |
251 GURL(chrome::kChromeUINewTabURL), content::Referrer(), | 252 GURL(chrome::kChromeUINewTabURL), content::Referrer(), |
252 content::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string()); | 253 content::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string()); |
253 chrome::ShowSettingsSubPage(args.browser, | 254 chrome::ShowSettingsSubPage(args.browser, |
254 std::string(chrome::kSearchUsersSubPage)); | 255 std::string(chrome::kSearchUsersSubPage)); |
255 } else { | 256 } else { |
256 StartSync(args, start_mode); | 257 StartSync(args, start_mode); |
258 start_sync_callback.Run(); | |
257 } | 259 } |
258 } | 260 } |
259 | 261 |
260 void ClearPendingEmailOnIOThread(content::ResourceContext* context) { | 262 void ClearPendingEmailOnIOThread(content::ResourceContext* context) { |
261 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); | 263 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); |
262 DCHECK(io_data); | 264 DCHECK(io_data); |
263 io_data->set_reverse_autologin_pending_email(std::string()); | 265 io_data->set_reverse_autologin_pending_email(std::string()); |
264 } | 266 } |
265 | 267 |
266 // Determines the source of the sign in and the continue URL. Its either one | 268 // Determines the source of the sign in and the continue URL. Its either one |
(...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
909 GURL url(source_ == SyncPromoUI::SOURCE_APPS_PAGE_LINK ? | 911 GURL url(source_ == SyncPromoUI::SOURCE_APPS_PAGE_LINK ? |
910 chrome::kChromeUIAppsURL : chrome::kChromeUINewTabURL); | 912 chrome::kChromeUIAppsURL : chrome::kChromeUINewTabURL); |
911 content::OpenURLParams params(url, | 913 content::OpenURLParams params(url, |
912 content::Referrer(), | 914 content::Referrer(), |
913 CURRENT_TAB, | 915 CURRENT_TAB, |
914 content::PAGE_TRANSITION_AUTO_TOPLEVEL, | 916 content::PAGE_TRANSITION_AUTO_TOPLEVEL, |
915 false); | 917 false); |
916 contents->OpenURL(params); | 918 contents->OpenURL(params); |
917 } | 919 } |
918 | 920 |
921 void OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary() { | |
922 if (source_ != SyncPromoUI::SOURCE_SETTINGS && | |
923 source_ != SyncPromoUI::SOURCE_WEBSTORE_INSTALL) | |
924 RedirectToNtpOrAppsPage(); | |
Roger Tawa OOO till Jul 10th
2013/06/05 23:48:37
Add { and } for if statement.
fdoray
2013/06/10 15:44:13
Done.
| |
925 } | |
926 | |
919 void OneClickSigninHelper::RedirectToSignin() { | 927 void OneClickSigninHelper::RedirectToSignin() { |
920 VLOG(1) << "OneClickSigninHelper::RedirectToSignin"; | 928 VLOG(1) << "OneClickSigninHelper::RedirectToSignin"; |
921 | 929 |
922 // Extract the existing sounce=X value. Default to "2" if missing. | 930 // Extract the existing sounce=X value. Default to "2" if missing. |
923 SyncPromoUI::Source source = | 931 SyncPromoUI::Source source = |
924 SyncPromoUI::GetSourceForSyncPromoURL(continue_url_); | 932 SyncPromoUI::GetSourceForSyncPromoURL(continue_url_); |
925 if (source == SyncPromoUI::SOURCE_UNKNOWN) | 933 if (source == SyncPromoUI::SOURCE_UNKNOWN) |
926 source = SyncPromoUI::SOURCE_MENU; | 934 source = SyncPromoUI::SOURCE_MENU; |
927 GURL page = SyncPromoUI::GetSyncPromoURL(GURL(), source, false); | 935 GURL page = SyncPromoUI::GetSyncPromoURL(GURL(), source, false); |
928 | 936 |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1169 case AUTO_ACCEPT_EXPLICIT: { | 1177 case AUTO_ACCEPT_EXPLICIT: { |
1170 if (switched_to_advanced_) { | 1178 if (switched_to_advanced_) { |
1171 LogHistogramValue(original_source_, | 1179 LogHistogramValue(original_source_, |
1172 one_click_signin::HISTOGRAM_WITH_ADVANCED); | 1180 one_click_signin::HISTOGRAM_WITH_ADVANCED); |
1173 LogHistogramValue(original_source_, | 1181 LogHistogramValue(original_source_, |
1174 one_click_signin::HISTOGRAM_ACCEPTED); | 1182 one_click_signin::HISTOGRAM_ACCEPTED); |
1175 } else { | 1183 } else { |
1176 LogHistogramValue(source_, one_click_signin::HISTOGRAM_ACCEPTED); | 1184 LogHistogramValue(source_, one_click_signin::HISTOGRAM_ACCEPTED); |
1177 LogHistogramValue(source_, one_click_signin::HISTOGRAM_WITH_DEFAULTS); | 1185 LogHistogramValue(source_, one_click_signin::HISTOGRAM_WITH_DEFAULTS); |
1178 } | 1186 } |
1187 | |
1188 // Remove the blank page from the history of the current tab. It's not | |
1189 // necessary to do this if the sign in is from the Settings page / | |
1190 // Webstore because the current tab will be closed after sign in | |
1191 // completes. | |
1192 if (source_ != SyncPromoUI::SOURCE_SETTINGS && | |
1193 source_ != SyncPromoUI::SOURCE_WEBSTORE_INSTALL) | |
1194 RemoveCurrentHistoryItem(contents); | |
1195 | |
1179 OneClickSigninSyncStarter::StartSyncMode start_mode = | 1196 OneClickSigninSyncStarter::StartSyncMode start_mode = |
1180 source_ == SyncPromoUI::SOURCE_SETTINGS ? | 1197 source_ == SyncPromoUI::SOURCE_SETTINGS ? |
1181 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : | 1198 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : |
1182 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; | 1199 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; |
1183 | 1200 |
1184 std::string last_email = | 1201 std::string last_email = |
1185 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername); | 1202 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername); |
1186 | 1203 |
1187 if (!last_email.empty() && !gaia::AreEmailsSame(last_email, email_)) { | 1204 if (!last_email.empty() && !gaia::AreEmailsSame(last_email, email_)) { |
1188 // If the new email address is different from the email address that | 1205 // If the new email address is different from the email address that |
1189 // just signed in, show a confirmation dialog. | 1206 // just signed in, show a confirmation dialog. |
1190 | 1207 |
1191 // No need to display a second confirmation so pass false below. | 1208 // No need to display a second confirmation so pass false below. |
1192 // TODO(atwilson): Move this into OneClickSigninSyncStarter. | 1209 // TODO(atwilson): Move this into OneClickSigninSyncStarter. |
1193 ConfirmEmailDialogDelegate::AskForConfirmation( | 1210 ConfirmEmailDialogDelegate::AskForConfirmation( |
1194 contents, | 1211 contents, |
1195 last_email, | 1212 last_email, |
1196 email_, | 1213 email_, |
1197 base::Bind( | 1214 base::Bind( |
1198 &StartExplicitSync, | 1215 &StartExplicitSync, |
1199 StartSyncArgs(profile, browser, auto_accept_, | 1216 StartSyncArgs(profile, browser, auto_accept_, |
1200 session_index_, email_, password_, | 1217 session_index_, email_, password_, |
1201 force_same_tab_navigation, | 1218 force_same_tab_navigation, |
1202 false /* confirmation_required */, source_), | 1219 false /* confirmation_required */, source_), |
1203 contents, | 1220 contents, |
1204 start_mode)); | 1221 start_mode, |
1222 base::Bind( | |
1223 &OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary, | |
1224 base::Unretained(this)))); | |
1205 } else { | 1225 } else { |
1206 StartSync( | 1226 StartSync( |
1207 StartSyncArgs(profile, browser, auto_accept_, session_index_, | 1227 StartSyncArgs(profile, browser, auto_accept_, session_index_, |
1208 email_, password_, force_same_tab_navigation, | 1228 email_, password_, force_same_tab_navigation, |
1209 untrusted_confirmation_required_, source_), | 1229 untrusted_confirmation_required_, source_), |
1210 start_mode); | 1230 start_mode); |
1231 | |
1232 // If this explicit sign in is not from settings page/webstore, show | |
1233 // the NTP/Apps page after sign in completes. In the case of the | |
1234 // settings page, it will get closed by SyncSetupHandler. In the case | |
1235 // of webstore, it will redirect back to webstore. | |
1236 RedirectToNtpOrAppsPageIfNecessary(); | |
1211 } | 1237 } |
1212 | 1238 |
1213 if (source_ == SyncPromoUI::SOURCE_SETTINGS && | 1239 if (source_ == SyncPromoUI::SOURCE_SETTINGS && |
1214 SyncPromoUI::GetSourceForSyncPromoURL(continue_url_) == | 1240 SyncPromoUI::GetSourceForSyncPromoURL(continue_url_) == |
1215 SyncPromoUI::SOURCE_WEBSTORE_INSTALL) { | 1241 SyncPromoUI::SOURCE_WEBSTORE_INSTALL) { |
1216 redirect_url_ = continue_url_; | 1242 redirect_url_ = continue_url_; |
1217 ProfileSyncService* sync_service = | 1243 ProfileSyncService* sync_service = |
1218 ProfileSyncServiceFactory::GetForProfile(profile); | 1244 ProfileSyncServiceFactory::GetForProfile(profile); |
1219 if (sync_service) | 1245 if (sync_service) |
1220 sync_service->AddObserver(this); | 1246 sync_service->AddObserver(this); |
1221 } | 1247 } |
1222 | |
1223 // If this explicit sign in is not from settings page/webstore, show the | |
1224 // NTP/Apps page after sign in completes. In the case of the settings | |
1225 // page, it will get closed by SyncSetupHandler. In the case of webstore, | |
1226 // it will redirect back to webstore. | |
1227 if (source_ != SyncPromoUI::SOURCE_SETTINGS && | |
1228 source_ != SyncPromoUI::SOURCE_WEBSTORE_INSTALL) { | |
1229 RemoveCurrentHistoryItem(contents); | |
1230 RedirectToNtpOrAppsPage(); | |
1231 } | |
1232 break; | 1248 break; |
1233 } | 1249 } |
1234 case AUTO_ACCEPT_REJECTED_FOR_PROFILE: | 1250 case AUTO_ACCEPT_REJECTED_FOR_PROFILE: |
1235 AddEmailToOneClickRejectedList(profile, email_); | 1251 AddEmailToOneClickRejectedList(profile, email_); |
1236 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_REJECTED); | 1252 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_REJECTED); |
1237 break; | 1253 break; |
1238 default: | 1254 default: |
1239 NOTREACHED() << "Invalid auto_accept=" << auto_accept_; | 1255 NOTREACHED() << "Invalid auto_accept=" << auto_accept_; |
1240 break; | 1256 break; |
1241 } | 1257 } |
(...skipping 21 matching lines...) Expand all Loading... | |
1263 contents->GetController().LoadURL(redirect_url_, | 1279 contents->GetController().LoadURL(redirect_url_, |
1264 content::Referrer(), | 1280 content::Referrer(), |
1265 content::PAGE_TRANSITION_AUTO_TOPLEVEL, | 1281 content::PAGE_TRANSITION_AUTO_TOPLEVEL, |
1266 std::string()); | 1282 std::string()); |
1267 } | 1283 } |
1268 | 1284 |
1269 // Clear the redirect URL. | 1285 // Clear the redirect URL. |
1270 redirect_url_ = GURL(); | 1286 redirect_url_ = GURL(); |
1271 sync_service->RemoveObserver(this); | 1287 sync_service->RemoveObserver(this); |
1272 } | 1288 } |
OLD | NEW |