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

Side by Side Diff: chrome/browser/ui/sync/one_click_signin_helper.cc

Issue 120343004: Reland r242290, r241609, r242134. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 12 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 #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>
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 #include "chrome/browser/tab_contents/tab_util.h" 48 #include "chrome/browser/tab_contents/tab_util.h"
49 #include "chrome/browser/ui/browser_finder.h" 49 #include "chrome/browser/ui/browser_finder.h"
50 #include "chrome/browser/ui/browser_window.h" 50 #include "chrome/browser/ui/browser_window.h"
51 #include "chrome/browser/ui/chrome_pages.h" 51 #include "chrome/browser/ui/chrome_pages.h"
52 #include "chrome/browser/ui/sync/one_click_signin_histogram.h" 52 #include "chrome/browser/ui/sync/one_click_signin_histogram.h"
53 #include "chrome/browser/ui/sync/one_click_signin_sync_starter.h" 53 #include "chrome/browser/ui/sync/one_click_signin_sync_starter.h"
54 #include "chrome/browser/ui/sync/signin_histogram.h" 54 #include "chrome/browser/ui/sync/signin_histogram.h"
55 #include "chrome/browser/ui/tab_modal_confirm_dialog.h" 55 #include "chrome/browser/ui/tab_modal_confirm_dialog.h"
56 #include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h" 56 #include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h"
57 #include "chrome/browser/ui/tabs/tab_strip_model.h" 57 #include "chrome/browser/ui/tabs/tab_strip_model.h"
58 #include "chrome/common/chrome_switches.h"
59 #include "chrome/common/chrome_version_info.h" 58 #include "chrome/common/chrome_version_info.h"
60 #include "chrome/common/net/url_util.h" 59 #include "chrome/common/net/url_util.h"
61 #include "chrome/common/pref_names.h" 60 #include "chrome/common/pref_names.h"
61 #include "chrome/common/profile_management_switches.h"
62 #include "chrome/common/url_constants.h" 62 #include "chrome/common/url_constants.h"
63 #include "components/autofill/core/common/password_form.h" 63 #include "components/autofill/core/common/password_form.h"
64 #include "content/public/browser/browser_thread.h" 64 #include "content/public/browser/browser_thread.h"
65 #include "content/public/browser/navigation_entry.h" 65 #include "content/public/browser/navigation_entry.h"
66 #include "content/public/browser/page_navigator.h" 66 #include "content/public/browser/page_navigator.h"
67 #include "content/public/browser/render_process_host.h" 67 #include "content/public/browser/render_process_host.h"
68 #include "content/public/browser/web_contents.h" 68 #include "content/public/browser/web_contents.h"
69 #include "content/public/browser/web_contents_view.h" 69 #include "content/public/browser/web_contents_view.h"
70 #include "content/public/common/frame_navigate_params.h" 70 #include "content/public/common/frame_navigate_params.h"
71 #include "content/public/common/page_transition_types.h" 71 #include "content/public/common/page_transition_types.h"
(...skipping 17 matching lines...) Expand all
89 89
90 // Arguments used with StartSync function. base::Bind() cannot support too 90 // Arguments used with StartSync function. base::Bind() cannot support too
91 // many args for performance reasons, so they are packaged up into a struct. 91 // many args for performance reasons, so they are packaged up into a struct.
92 struct StartSyncArgs { 92 struct StartSyncArgs {
93 StartSyncArgs(Profile* profile, 93 StartSyncArgs(Profile* profile,
94 Browser* browser, 94 Browser* browser,
95 OneClickSigninHelper::AutoAccept auto_accept, 95 OneClickSigninHelper::AutoAccept auto_accept,
96 const std::string& session_index, 96 const std::string& session_index,
97 const std::string& email, 97 const std::string& email,
98 const std::string& password, 98 const std::string& password,
99 const std::string& oauth_code,
99 content::WebContents* web_contents, 100 content::WebContents* web_contents,
100 bool untrusted_confirmation_required, 101 bool untrusted_confirmation_required,
101 signin::Source source, 102 signin::Source source,
102 OneClickSigninSyncStarter::Callback callback); 103 OneClickSigninSyncStarter::Callback callback);
103 104
104 Profile* profile; 105 Profile* profile;
105 Browser* browser; 106 Browser* browser;
106 OneClickSigninHelper::AutoAccept auto_accept; 107 OneClickSigninHelper::AutoAccept auto_accept;
107 std::string session_index; 108 std::string session_index;
108 std::string email; 109 std::string email;
109 std::string password; 110 std::string password;
111 std::string oauth_code;
110 112
111 // Web contents in which the sync setup page should be displayed, 113 // Web contents in which the sync setup page should be displayed,
112 // if necessary. Can be NULL. 114 // if necessary. Can be NULL.
113 content::WebContents* web_contents; 115 content::WebContents* web_contents;
114 116
115 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required; 117 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required;
116 signin::Source source; 118 signin::Source source;
117 OneClickSigninSyncStarter::Callback callback; 119 OneClickSigninSyncStarter::Callback callback;
118 }; 120 };
119 121
120 StartSyncArgs::StartSyncArgs(Profile* profile, 122 StartSyncArgs::StartSyncArgs(Profile* profile,
121 Browser* browser, 123 Browser* browser,
122 OneClickSigninHelper::AutoAccept auto_accept, 124 OneClickSigninHelper::AutoAccept auto_accept,
123 const std::string& session_index, 125 const std::string& session_index,
124 const std::string& email, 126 const std::string& email,
125 const std::string& password, 127 const std::string& password,
128 const std::string& oauth_code,
126 content::WebContents* web_contents, 129 content::WebContents* web_contents,
127 bool untrusted_confirmation_required, 130 bool untrusted_confirmation_required,
128 signin::Source source, 131 signin::Source source,
129 OneClickSigninSyncStarter::Callback callback) 132 OneClickSigninSyncStarter::Callback callback)
130 : profile(profile), 133 : profile(profile),
131 browser(browser), 134 browser(browser),
132 auto_accept(auto_accept), 135 auto_accept(auto_accept),
133 session_index(session_index), 136 session_index(session_index),
134 email(email), 137 email(email),
135 password(password), 138 password(password),
139 oauth_code(oauth_code),
136 web_contents(web_contents), 140 web_contents(web_contents),
137 source(source), 141 source(source),
138 callback(callback) { 142 callback(callback) {
139 if (untrusted_confirmation_required) { 143 if (untrusted_confirmation_required) {
140 confirmation_required = OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN; 144 confirmation_required = OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN;
141 } else if (source == signin::SOURCE_SETTINGS || 145 } else if (source == signin::SOURCE_SETTINGS ||
142 source == signin::SOURCE_WEBSTORE_INSTALL) { 146 source == signin::SOURCE_WEBSTORE_INSTALL) {
143 // Do not display a status confirmation for webstore installs or re-auth. 147 // Do not display a status confirmation for webstore installs or re-auth.
144 confirmation_required = OneClickSigninSyncStarter::NO_CONFIRMATION; 148 confirmation_required = OneClickSigninSyncStarter::NO_CONFIRMATION;
145 } else { 149 } else {
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 void StartSync(const StartSyncArgs& args, 373 void StartSync(const StartSyncArgs& args,
370 OneClickSigninSyncStarter::StartSyncMode start_mode) { 374 OneClickSigninSyncStarter::StartSyncMode start_mode) {
371 if (start_mode == OneClickSigninSyncStarter::UNDO_SYNC) { 375 if (start_mode == OneClickSigninSyncStarter::UNDO_SYNC) {
372 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_UNDO); 376 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_UNDO);
373 return; 377 return;
374 } 378 }
375 379
376 // The starter deletes itself once its done. 380 // The starter deletes itself once its done.
377 new OneClickSigninSyncStarter(args.profile, args.browser, args.session_index, 381 new OneClickSigninSyncStarter(args.profile, args.browser, args.session_index,
378 args.email, args.password, 382 args.email, args.password,
379 "" /* oauth_code */, start_mode, 383 args.oauth_code, start_mode,
380 args.web_contents, 384 args.web_contents,
381 args.confirmation_required, 385 args.confirmation_required,
382 args.callback); 386 args.callback);
383 387
384 int action = one_click_signin::HISTOGRAM_MAX; 388 int action = one_click_signin::HISTOGRAM_MAX;
385 switch (args.auto_accept) { 389 switch (args.auto_accept) {
386 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT: 390 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT:
387 break; 391 break;
388 case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED: 392 case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED:
389 action = 393 action =
(...skipping 10 matching lines...) Expand all
400 break; 404 break;
401 } 405 }
402 if (action != one_click_signin::HISTOGRAM_MAX) 406 if (action != one_click_signin::HISTOGRAM_MAX)
403 LogOneClickHistogramValue(action); 407 LogOneClickHistogramValue(action);
404 } 408 }
405 409
406 void StartExplicitSync(const StartSyncArgs& args, 410 void StartExplicitSync(const StartSyncArgs& args,
407 content::WebContents* contents, 411 content::WebContents* contents,
408 OneClickSigninSyncStarter::StartSyncMode start_mode, 412 OneClickSigninSyncStarter::StartSyncMode start_mode,
409 ConfirmEmailDialogDelegate::Action action) { 413 ConfirmEmailDialogDelegate::Action action) {
414 bool enable_inline = switches::IsEnableInlineSignin();
410 if (action == ConfirmEmailDialogDelegate::START_SYNC) { 415 if (action == ConfirmEmailDialogDelegate::START_SYNC) {
411 StartSync(args, start_mode); 416 StartSync(args, start_mode);
412 OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary( 417 if (!enable_inline) {
413 contents, args.source); 418 // Redirect/tab closing for inline flow is handled by the sync callback.
419 OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary(
420 contents, args.source);
421 }
414 } else { 422 } else {
415 // Perform a redirection to the NTP/Apps page to hide the blank page when 423 // Perform a redirection to the NTP/Apps page to hide the blank page when
416 // the action is CLOSE or CREATE_NEW_USER. The redirection is useful when 424 // the action is CLOSE or CREATE_NEW_USER. The redirection is useful when
417 // the action is CREATE_NEW_USER because the "Create new user" page might 425 // the action is CREATE_NEW_USER because the "Create new user" page might
418 // be opened in a different tab that is already showing settings. 426 // be opened in a different tab that is already showing settings.
419 // 427 if (enable_inline) {
420 // Don't redirect when the visible URL is not a blank page: if the 428 // Redirect/tab closing for inline flow is handled by the sync callback.
421 // source is SOURCE_WEBSTORE_INSTALL, |contents| might be showing an app 429 args.callback.Run(OneClickSigninSyncStarter::SYNC_SETUP_FAILURE);
422 // page that shouldn't be hidden. 430 } else {
423 // 431 // Don't redirect when the visible URL is not a blank page: if the
424 // If redirecting, don't do so immediately, otherwise there may be 2 nested 432 // source is SOURCE_WEBSTORE_INSTALL, |contents| might be showing an app
425 // navigations and a crash would occur (crbug.com/293261). Post the task 433 // page that shouldn't be hidden.
426 // to the current thread instead. 434 //
427 if (signin::IsContinueUrlForWebBasedSigninFlow( 435 // If redirecting, don't do so immediately, otherwise there may be 2
428 contents->GetVisibleURL())) { 436 // nested navigations and a crash would occur (crbug.com/293261). Post
429 base::MessageLoopProxy::current()->PostNonNestableTask( 437 // the task to the current thread instead.
430 FROM_HERE, 438 if (signin::IsContinueUrlForWebBasedSigninFlow(
431 base::Bind(RedirectToNtpOrAppsPageWithIds, 439 contents->GetVisibleURL())) {
432 contents->GetRenderProcessHost()->GetID(), 440 base::MessageLoopProxy::current()->PostNonNestableTask(
433 contents->GetRoutingID(), 441 FROM_HERE,
434 args.source)); 442 base::Bind(RedirectToNtpOrAppsPageWithIds,
443 contents->GetRenderProcessHost()->GetID(),
444 contents->GetRoutingID(),
445 args.source));
446 }
435 } 447 }
436 if (action == ConfirmEmailDialogDelegate::CREATE_NEW_USER) { 448 if (action == ConfirmEmailDialogDelegate::CREATE_NEW_USER) {
437 chrome::ShowSettingsSubPage(args.browser, 449 chrome::ShowSettingsSubPage(args.browser,
438 std::string(chrome::kSearchUsersSubPage)); 450 std::string(chrome::kSearchUsersSubPage));
439 } 451 }
440 } 452 }
441 } 453 }
442 454
443 void ClearPendingEmailOnIOThread(content::ResourceContext* context) { 455 void ClearPendingEmailOnIOThread(content::ResourceContext* context) {
444 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 456 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context);
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 } 770 }
759 771
760 VLOG(1) << "OneClickSigninHelper::CanOffer: yes we can"; 772 VLOG(1) << "OneClickSigninHelper::CanOffer: yes we can";
761 return true; 773 return true;
762 } 774 }
763 775
764 // static 776 // static
765 OneClickSigninHelper::Offer OneClickSigninHelper::CanOfferOnIOThread( 777 OneClickSigninHelper::Offer OneClickSigninHelper::CanOfferOnIOThread(
766 net::URLRequest* request, 778 net::URLRequest* request,
767 ProfileIOData* io_data) { 779 ProfileIOData* io_data) {
768 return CanOfferOnIOThreadImpl(request->url(), request->referrer(), 780 return CanOfferOnIOThreadImpl(request->url(), request, io_data);
769 request, io_data);
770 } 781 }
771 782
772 // static 783 // static
773 OneClickSigninHelper::Offer OneClickSigninHelper::CanOfferOnIOThreadImpl( 784 OneClickSigninHelper::Offer OneClickSigninHelper::CanOfferOnIOThreadImpl(
774 const GURL& url, 785 const GURL& url,
775 const std::string& referrer,
776 base::SupportsUserData* request, 786 base::SupportsUserData* request,
777 ProfileIOData* io_data) { 787 ProfileIOData* io_data) {
778 if (!gaia::IsGaiaSignonRealm(url.GetOrigin())) 788 if (!gaia::IsGaiaSignonRealm(url.GetOrigin()))
779 return IGNORE_REQUEST; 789 return IGNORE_REQUEST;
780 790
781 if (!io_data) 791 if (!io_data)
782 return DONT_OFFER; 792 return DONT_OFFER;
783 793
784 // Check for incognito before other parts of the io_data, since those 794 // Check for incognito before other parts of the io_data, since those
785 // members may not be initalized. 795 // members may not be initalized.
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE, 1040 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE,
1031 base::string16(), /* no SAML email */ 1041 base::string16(), /* no SAML email */
1032 UTF8ToUTF16(error), 1042 UTF8ToUTF16(error),
1033 // This callback is never invoked. 1043 // This callback is never invoked.
1034 // TODO(rogerta): Separate out the bubble API so we don't have to pass 1044 // TODO(rogerta): Separate out the bubble API so we don't have to pass
1035 // ignored |email| and |callback| params. 1045 // ignored |email| and |callback| params.
1036 BrowserWindow::StartSyncCallback()); 1046 BrowserWindow::StartSyncCallback());
1037 } 1047 }
1038 1048
1039 // static 1049 // static
1050 bool OneClickSigninHelper::HandleCrossAccountError(
1051 content::WebContents* contents,
1052 const std::string& session_index,
1053 const std::string& email,
1054 const std::string& password,
1055 const std::string& oauth_code,
1056 OneClickSigninHelper::AutoAccept auto_accept,
1057 signin::Source source,
1058 OneClickSigninSyncStarter::StartSyncMode start_mode,
1059 OneClickSigninSyncStarter::Callback sync_callback) {
1060 Profile* profile =
1061 Profile::FromBrowserContext(contents->GetBrowserContext());
1062 std::string last_email =
1063 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername);
1064
1065 if (!last_email.empty() && !gaia::AreEmailsSame(last_email, email)) {
1066 // If the new email address is different from the email address that
1067 // just signed in, show a confirmation dialog.
1068
1069 // No need to display a second confirmation so pass false below.
1070 // TODO(atwilson): Move this into OneClickSigninSyncStarter.
1071 // The tab modal dialog always executes its callback before |contents|
1072 // is deleted.
1073 Browser* browser = chrome::FindBrowserWithWebContents(contents);
1074 ConfirmEmailDialogDelegate::AskForConfirmation(
1075 contents,
1076 last_email,
1077 email,
1078 base::Bind(
1079 &StartExplicitSync,
1080 StartSyncArgs(profile, browser, auto_accept,
1081 session_index, email, password, oauth_code, contents,
1082 false /* confirmation_required */, source,
1083 sync_callback),
1084 contents,
1085 start_mode));
1086 return true;
1087 }
1088
1089 return false;
1090 }
1091
1092 // static
1040 void OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary( 1093 void OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary(
1041 content::WebContents* contents, signin::Source source) { 1094 content::WebContents* contents, signin::Source source) {
1042 if (source != signin::SOURCE_SETTINGS && 1095 if (source != signin::SOURCE_SETTINGS &&
1043 source != signin::SOURCE_WEBSTORE_INSTALL) { 1096 source != signin::SOURCE_WEBSTORE_INSTALL) {
1044 RedirectToNtpOrAppsPage(contents, source); 1097 RedirectToNtpOrAppsPage(contents, source);
1045 } 1098 }
1046 } 1099 }
1047 1100
1048 void OneClickSigninHelper::RedirectToSignin() { 1101 void OneClickSigninHelper::RedirectToSignin() {
1049 VLOG(1) << "OneClickSigninHelper::RedirectToSignin"; 1102 VLOG(1) << "OneClickSigninHelper::RedirectToSignin";
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 void OneClickSigninHelper::DidStartNavigationToPendingEntry( 1158 void OneClickSigninHelper::DidStartNavigationToPendingEntry(
1106 const GURL& url, 1159 const GURL& url,
1107 content::NavigationController::ReloadType reload_type) { 1160 content::NavigationController::ReloadType reload_type) {
1108 VLOG(1) << "OneClickSigninHelper::DidStartNavigationToPendingEntry: url=" << 1161 VLOG(1) << "OneClickSigninHelper::DidStartNavigationToPendingEntry: url=" <<
1109 url.spec(); 1162 url.spec();
1110 // If the tab navigates to a new page, and this page is not a valid Gaia 1163 // If the tab navigates to a new page, and this page is not a valid Gaia
1111 // sign in redirect or reponse, or the expected continue URL, make sure to 1164 // sign in redirect or reponse, or the expected continue URL, make sure to
1112 // clear the internal state. This is needed to detect navigations in the 1165 // clear the internal state. This is needed to detect navigations in the
1113 // middle of the sign in process that may redirect back to the sign in 1166 // middle of the sign in process that may redirect back to the sign in
1114 // process (see crbug.com/181163 for details). 1167 // process (see crbug.com/181163 for details).
1115 const GURL continue_url = signin::GetNextPageURLForPromoURL(
1116 signin::GetPromoURL(signin::SOURCE_START_PAGE, false));
1117 GURL::Replacements replacements; 1168 GURL::Replacements replacements;
1118 replacements.ClearQuery(); 1169 replacements.ClearQuery();
1119 1170
1120 if (!IsValidGaiaSigninRedirectOrResponseURL(url) && 1171 if (!IsValidGaiaSigninRedirectOrResponseURL(url) &&
1121 continue_url_.is_valid() && 1172 continue_url_.is_valid() &&
1122 url.ReplaceComponents(replacements) != 1173 url.ReplaceComponents(replacements) !=
1123 continue_url_.ReplaceComponents(replacements)) { 1174 continue_url_.ReplaceComponents(replacements)) {
1124 if (++untrusted_navigations_since_signin_visit_ > kMaxNavigationsSince) 1175 if (++untrusted_navigations_since_signin_visit_ > kMaxNavigationsSince)
1125 CleanTransientState(); 1176 CleanTransientState();
1126 } 1177 }
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 case AUTO_ACCEPT_ACCEPTED: 1337 case AUTO_ACCEPT_ACCEPTED:
1287 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); 1338 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED);
1288 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS); 1339 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS);
1289 SigninManager::DisableOneClickSignIn(profile); 1340 SigninManager::DisableOneClickSignIn(profile);
1290 // Start syncing with the default settings - prompt the user to sign in 1341 // Start syncing with the default settings - prompt the user to sign in
1291 // first. 1342 // first.
1292 if (!do_not_start_sync_for_testing_) { 1343 if (!do_not_start_sync_for_testing_) {
1293 StartSync( 1344 StartSync(
1294 StartSyncArgs(profile, browser, auto_accept_, 1345 StartSyncArgs(profile, browser, auto_accept_,
1295 session_index_, email_, password_, 1346 session_index_, email_, password_,
1347 "" /* oauth_code */,
1296 NULL /* don't force to show sync setup in same tab */, 1348 NULL /* don't force to show sync setup in same tab */,
1297 true /* confirmation_required */, source_, 1349 true /* confirmation_required */, source_,
1298 CreateSyncStarterCallback()), 1350 CreateSyncStarterCallback()),
1299 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS); 1351 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
1300 } 1352 }
1301 break; 1353 break;
1302 case AUTO_ACCEPT_CONFIGURE: 1354 case AUTO_ACCEPT_CONFIGURE:
1303 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); 1355 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED);
1304 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED); 1356 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED);
1305 SigninManager::DisableOneClickSignIn(profile); 1357 SigninManager::DisableOneClickSignIn(profile);
1306 // Display the extra confirmation (even in the SAML case) in case this 1358 // Display the extra confirmation (even in the SAML case) in case this
1307 // was an untrusted renderer. 1359 // was an untrusted renderer.
1308 if (!do_not_start_sync_for_testing_) { 1360 if (!do_not_start_sync_for_testing_) {
1309 StartSync( 1361 StartSync(
1310 StartSyncArgs(profile, browser, auto_accept_, 1362 StartSyncArgs(profile, browser, auto_accept_,
1311 session_index_, email_, password_, 1363 session_index_, email_, password_,
1364 "" /* oauth_code */,
1312 NULL /* don't force sync setup in same tab */, 1365 NULL /* don't force sync setup in same tab */,
1313 true /* confirmation_required */, source_, 1366 true /* confirmation_required */, source_,
1314 CreateSyncStarterCallback()), 1367 CreateSyncStarterCallback()),
1315 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); 1368 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
1316 } 1369 }
1317 break; 1370 break;
1318 case AUTO_ACCEPT_EXPLICIT: { 1371 case AUTO_ACCEPT_EXPLICIT: {
1319 signin::Source original_source = 1372 signin::Source original_source =
1320 signin::GetSourceForPromoURL(original_continue_url_); 1373 signin::GetSourceForPromoURL(original_continue_url_);
1321 if (switched_to_advanced_) { 1374 if (switched_to_advanced_) {
(...skipping 15 matching lines...) Expand all
1337 ProfileSyncService* sync_service = 1390 ProfileSyncService* sync_service =
1338 ProfileSyncServiceFactory::GetForProfile(profile); 1391 ProfileSyncServiceFactory::GetForProfile(profile);
1339 OneClickSigninSyncStarter::StartSyncMode start_mode = 1392 OneClickSigninSyncStarter::StartSyncMode start_mode =
1340 source_ == signin::SOURCE_SETTINGS ? 1393 source_ == signin::SOURCE_SETTINGS ?
1341 (SigninGlobalError::GetForProfile(profile)->HasMenuItem() && 1394 (SigninGlobalError::GetForProfile(profile)->HasMenuItem() &&
1342 sync_service && sync_service->HasSyncSetupCompleted()) ? 1395 sync_service && sync_service->HasSyncSetupCompleted()) ?
1343 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE : 1396 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE :
1344 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : 1397 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST :
1345 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; 1398 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS;
1346 1399
1347 std::string last_email = 1400 if (!HandleCrossAccountError(contents, session_index_, email_, password_,
1348 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername); 1401 "" /* oauth_code */, auto_accept_, source_, start_mode,
1349 1402 CreateSyncStarterCallback())) {
1350 if (!last_email.empty() && !gaia::AreEmailsSame(last_email, email_)) {
1351 // If the new email address is different from the email address that
1352 // just signed in, show a confirmation dialog.
1353
1354 // No need to display a second confirmation so pass false below.
1355 // TODO(atwilson): Move this into OneClickSigninSyncStarter.
1356 // The tab modal dialog always executes its callback before |contents|
1357 // is deleted.
1358 ConfirmEmailDialogDelegate::AskForConfirmation(
1359 contents,
1360 last_email,
1361 email_,
1362 base::Bind(
1363 &StartExplicitSync,
1364 StartSyncArgs(profile, browser, auto_accept_,
1365 session_index_, email_, password_, contents,
1366 false /* confirmation_required */, source_,
1367 CreateSyncStarterCallback()),
1368 contents,
1369 start_mode));
1370 } else {
1371 if (!do_not_start_sync_for_testing_) { 1403 if (!do_not_start_sync_for_testing_) {
1372 StartSync( 1404 StartSync(
1373 StartSyncArgs(profile, browser, auto_accept_, 1405 StartSyncArgs(profile, browser, auto_accept_,
1374 session_index_, email_, password_, contents, 1406 session_index_, email_, password_,
1407 "" /* oauth_code */, contents,
1375 untrusted_confirmation_required_, source_, 1408 untrusted_confirmation_required_, source_,
1376 CreateSyncStarterCallback()), 1409 CreateSyncStarterCallback()),
1377 start_mode); 1410 start_mode);
1378 } 1411 }
1379 1412
1380 // If this explicit sign in is not from settings page/webstore, show 1413 // If this explicit sign in is not from settings page/webstore, show
1381 // the NTP/Apps page after sign in completes. In the case of the 1414 // the NTP/Apps page after sign in completes. In the case of the
1382 // settings page, it will get auto-closed after sync setup. In the case 1415 // settings page, it will get auto-closed after sync setup. In the case
1383 // of webstore, it will redirect back to webstore. 1416 // of webstore, it will redirect back to webstore.
1384 RedirectToNtpOrAppsPageIfNecessary(web_contents(), source_); 1417 RedirectToNtpOrAppsPageIfNecessary(web_contents(), source_);
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1482 // If the web contents is showing a blank page and not about to be closed, 1515 // If the web contents is showing a blank page and not about to be closed,
1483 // redirect to the NTP or apps page. 1516 // redirect to the NTP or apps page.
1484 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) && 1517 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) &&
1485 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) { 1518 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) {
1486 RedirectToNtpOrAppsPage( 1519 RedirectToNtpOrAppsPage(
1487 web_contents(), 1520 web_contents(),
1488 signin::GetSourceForPromoURL(original_continue_url_)); 1521 signin::GetSourceForPromoURL(original_continue_url_));
1489 } 1522 }
1490 } 1523 }
1491 } 1524 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698