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

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

Issue 116543007: Add cross account error detection to inline signin (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 7 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
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_forward.h"
14 #include "base/callback_helpers.h" 14 #include "base/callback_helpers.h"
15 #include "base/command_line.h"
15 #include "base/compiler_specific.h" 16 #include "base/compiler_specific.h"
16 #include "base/memory/scoped_ptr.h" 17 #include "base/memory/scoped_ptr.h"
17 #include "base/message_loop/message_loop_proxy.h" 18 #include "base/message_loop/message_loop_proxy.h"
18 #include "base/metrics/field_trial.h" 19 #include "base/metrics/field_trial.h"
19 #include "base/metrics/histogram.h" 20 #include "base/metrics/histogram.h"
20 #include "base/prefs/pref_service.h" 21 #include "base/prefs/pref_service.h"
21 #include "base/prefs/scoped_user_pref_update.h" 22 #include "base/prefs/scoped_user_pref_update.h"
22 #include "base/strings/string_split.h" 23 #include "base/strings/string_split.h"
23 #include "base/strings/string_util.h" 24 #include "base/strings/string_util.h"
24 #include "base/strings/utf_string_conversions.h" 25 #include "base/strings/utf_string_conversions.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 90
90 // Arguments used with StartSync function. base::Bind() cannot support too 91 // Arguments used with StartSync function. base::Bind() cannot support too
91 // many args for performance reasons, so they are packaged up into a struct. 92 // many args for performance reasons, so they are packaged up into a struct.
92 struct StartSyncArgs { 93 struct StartSyncArgs {
93 StartSyncArgs(Profile* profile, 94 StartSyncArgs(Profile* profile,
94 Browser* browser, 95 Browser* browser,
95 OneClickSigninHelper::AutoAccept auto_accept, 96 OneClickSigninHelper::AutoAccept auto_accept,
96 const std::string& session_index, 97 const std::string& session_index,
97 const std::string& email, 98 const std::string& email,
98 const std::string& password, 99 const std::string& password,
100 const std::string& oauth_code,
99 content::WebContents* web_contents, 101 content::WebContents* web_contents,
100 bool untrusted_confirmation_required, 102 bool untrusted_confirmation_required,
101 signin::Source source, 103 signin::Source source,
102 OneClickSigninSyncStarter::Callback callback); 104 OneClickSigninSyncStarter::Callback callback);
103 105
104 Profile* profile; 106 Profile* profile;
105 Browser* browser; 107 Browser* browser;
106 OneClickSigninHelper::AutoAccept auto_accept; 108 OneClickSigninHelper::AutoAccept auto_accept;
107 std::string session_index; 109 std::string session_index;
108 std::string email; 110 std::string email;
109 std::string password; 111 std::string password;
112 std::string oauth_code;
110 113
111 // Web contents in which the sync setup page should be displayed, 114 // Web contents in which the sync setup page should be displayed,
112 // if necessary. Can be NULL. 115 // if necessary. Can be NULL.
113 content::WebContents* web_contents; 116 content::WebContents* web_contents;
114 117
115 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required; 118 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required;
116 signin::Source source; 119 signin::Source source;
117 OneClickSigninSyncStarter::Callback callback; 120 OneClickSigninSyncStarter::Callback callback;
118 }; 121 };
119 122
120 StartSyncArgs::StartSyncArgs(Profile* profile, 123 StartSyncArgs::StartSyncArgs(Profile* profile,
121 Browser* browser, 124 Browser* browser,
122 OneClickSigninHelper::AutoAccept auto_accept, 125 OneClickSigninHelper::AutoAccept auto_accept,
123 const std::string& session_index, 126 const std::string& session_index,
124 const std::string& email, 127 const std::string& email,
125 const std::string& password, 128 const std::string& password,
129 const std::string& oauth_code,
126 content::WebContents* web_contents, 130 content::WebContents* web_contents,
127 bool untrusted_confirmation_required, 131 bool untrusted_confirmation_required,
128 signin::Source source, 132 signin::Source source,
129 OneClickSigninSyncStarter::Callback callback) 133 OneClickSigninSyncStarter::Callback callback)
130 : profile(profile), 134 : profile(profile),
131 browser(browser), 135 browser(browser),
132 auto_accept(auto_accept), 136 auto_accept(auto_accept),
133 session_index(session_index), 137 session_index(session_index),
134 email(email), 138 email(email),
135 password(password), 139 password(password),
140 oauth_code(oauth_code),
136 web_contents(web_contents), 141 web_contents(web_contents),
137 source(source), 142 source(source),
138 callback(callback) { 143 callback(callback) {
139 if (untrusted_confirmation_required) { 144 if (untrusted_confirmation_required) {
140 confirmation_required = OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN; 145 confirmation_required = OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN;
141 } else if (source == signin::SOURCE_SETTINGS || 146 } else if (source == signin::SOURCE_SETTINGS ||
142 source == signin::SOURCE_WEBSTORE_INSTALL) { 147 source == signin::SOURCE_WEBSTORE_INSTALL) {
143 // Do not display a status confirmation for webstore installs or re-auth. 148 // Do not display a status confirmation for webstore installs or re-auth.
144 confirmation_required = OneClickSigninSyncStarter::NO_CONFIRMATION; 149 confirmation_required = OneClickSigninSyncStarter::NO_CONFIRMATION;
145 } else { 150 } else {
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 void StartSync(const StartSyncArgs& args, 374 void StartSync(const StartSyncArgs& args,
370 OneClickSigninSyncStarter::StartSyncMode start_mode) { 375 OneClickSigninSyncStarter::StartSyncMode start_mode) {
371 if (start_mode == OneClickSigninSyncStarter::UNDO_SYNC) { 376 if (start_mode == OneClickSigninSyncStarter::UNDO_SYNC) {
372 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_UNDO); 377 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_UNDO);
373 return; 378 return;
374 } 379 }
375 380
376 // The starter deletes itself once its done. 381 // The starter deletes itself once its done.
377 new OneClickSigninSyncStarter(args.profile, args.browser, args.session_index, 382 new OneClickSigninSyncStarter(args.profile, args.browser, args.session_index,
378 args.email, args.password, 383 args.email, args.password,
379 "" /* oauth_code */, start_mode, 384 args.oauth_code, start_mode,
380 args.web_contents, 385 args.web_contents,
381 args.confirmation_required, 386 args.confirmation_required,
382 args.callback); 387 args.callback);
383 388
384 int action = one_click_signin::HISTOGRAM_MAX; 389 int action = one_click_signin::HISTOGRAM_MAX;
385 switch (args.auto_accept) { 390 switch (args.auto_accept) {
386 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT: 391 case OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT:
387 break; 392 break;
388 case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED: 393 case OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED:
389 action = 394 action =
(...skipping 10 matching lines...) Expand all
400 break; 405 break;
401 } 406 }
402 if (action != one_click_signin::HISTOGRAM_MAX) 407 if (action != one_click_signin::HISTOGRAM_MAX)
403 LogOneClickHistogramValue(action); 408 LogOneClickHistogramValue(action);
404 } 409 }
405 410
406 void StartExplicitSync(const StartSyncArgs& args, 411 void StartExplicitSync(const StartSyncArgs& args,
407 content::WebContents* contents, 412 content::WebContents* contents,
408 OneClickSigninSyncStarter::StartSyncMode start_mode, 413 OneClickSigninSyncStarter::StartSyncMode start_mode,
409 ConfirmEmailDialogDelegate::Action action) { 414 ConfirmEmailDialogDelegate::Action action) {
415 bool enable_inline = CommandLine::ForCurrentProcess()->HasSwitch(
416 switches::kEnableInlineSignin);
410 if (action == ConfirmEmailDialogDelegate::START_SYNC) { 417 if (action == ConfirmEmailDialogDelegate::START_SYNC) {
411 StartSync(args, start_mode); 418 StartSync(args, start_mode);
412 OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary( 419 if (!enable_inline) {
413 contents, args.source); 420 // Redirect/tab closing for inline flow is handled by the sync callback.
421 OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary(
422 contents, args.source);
423 }
414 } else { 424 } else {
415 // Perform a redirection to the NTP/Apps page to hide the blank page when 425 // 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 426 // 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 427 // 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. 428 // be opened in a different tab that is already showing settings.
419 // 429 if (enable_inline) {
420 // Don't redirect when the visible URL is not a blank page: if the 430 // Redirect/tab closing for inline flow is handled by the sync callback.
421 // source is SOURCE_WEBSTORE_INSTALL, |contents| might be showing an app 431 args.callback.Run(OneClickSigninSyncStarter::SYNC_SETUP_FAILURE);
422 // page that shouldn't be hidden. 432 } else {
423 // 433 // 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 434 // source is SOURCE_WEBSTORE_INSTALL, |contents| might be showing an app
425 // navigations and a crash would occur (crbug.com/293261). Post the task 435 // page that shouldn't be hidden.
426 // to the current thread instead. 436 //
427 if (signin::IsContinueUrlForWebBasedSigninFlow( 437 // If redirecting, don't do so immediately, otherwise there may be 2
428 contents->GetVisibleURL())) { 438 // nested navigations and a crash would occur (crbug.com/293261). Post
429 base::MessageLoopProxy::current()->PostNonNestableTask( 439 // the task to the current thread instead.
430 FROM_HERE, 440 if (signin::IsContinueUrlForWebBasedSigninFlow(
431 base::Bind(RedirectToNtpOrAppsPageWithIds, 441 contents->GetVisibleURL())) {
432 contents->GetRenderProcessHost()->GetID(), 442 base::MessageLoopProxy::current()->PostNonNestableTask(
433 contents->GetRoutingID(), 443 FROM_HERE,
434 args.source)); 444 base::Bind(RedirectToNtpOrAppsPageWithIds,
445 contents->GetRenderProcessHost()->GetID(),
446 contents->GetRoutingID(),
447 args.source));
448 }
435 } 449 }
436 if (action == ConfirmEmailDialogDelegate::CREATE_NEW_USER) { 450 if (action == ConfirmEmailDialogDelegate::CREATE_NEW_USER) {
437 chrome::ShowSettingsSubPage(args.browser, 451 chrome::ShowSettingsSubPage(args.browser,
438 std::string(chrome::kSearchUsersSubPage)); 452 std::string(chrome::kSearchUsersSubPage));
439 } 453 }
440 } 454 }
441 } 455 }
442 456
443 void ClearPendingEmailOnIOThread(content::ResourceContext* context) { 457 void ClearPendingEmailOnIOThread(content::ResourceContext* context) {
444 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context); 458 ProfileIOData* io_data = ProfileIOData::FromResourceContext(context);
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE, 1044 BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE,
1031 base::string16(), /* no SAML email */ 1045 base::string16(), /* no SAML email */
1032 UTF8ToUTF16(error), 1046 UTF8ToUTF16(error),
1033 // This callback is never invoked. 1047 // This callback is never invoked.
1034 // TODO(rogerta): Separate out the bubble API so we don't have to pass 1048 // TODO(rogerta): Separate out the bubble API so we don't have to pass
1035 // ignored |email| and |callback| params. 1049 // ignored |email| and |callback| params.
1036 BrowserWindow::StartSyncCallback()); 1050 BrowserWindow::StartSyncCallback());
1037 } 1051 }
1038 1052
1039 // static 1053 // static
1054 bool OneClickSigninHelper::HandleCrossAccountError(
1055 content::WebContents* contents,
1056 const std::string& session_index,
1057 const std::string& email,
1058 const std::string& password,
1059 const std::string& oauth_code,
1060 OneClickSigninHelper::AutoAccept auto_accept,
1061 signin::Source source,
1062 OneClickSigninSyncStarter::StartSyncMode start_mode,
1063 OneClickSigninSyncStarter::Callback sync_callback) {
1064 Profile* profile =
1065 Profile::FromBrowserContext(contents->GetBrowserContext());
1066 std::string last_email =
1067 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername);
1068
1069 if (!last_email.empty() && !gaia::AreEmailsSame(last_email, email)) {
1070 // If the new email address is different from the email address that
1071 // just signed in, show a confirmation dialog.
1072
1073 // No need to display a second confirmation so pass false below.
1074 // TODO(atwilson): Move this into OneClickSigninSyncStarter.
1075 // The tab modal dialog always executes its callback before |contents|
1076 // is deleted.
1077 Browser* browser = chrome::FindBrowserWithWebContents(contents);
1078 ConfirmEmailDialogDelegate::AskForConfirmation(
1079 contents,
1080 last_email,
1081 email,
1082 base::Bind(
1083 &StartExplicitSync,
1084 StartSyncArgs(profile, browser, auto_accept,
1085 session_index, email, password, oauth_code, contents,
1086 false /* confirmation_required */, source,
1087 sync_callback),
1088 contents,
1089 start_mode));
1090 return true;
1091 }
1092
1093 return false;
1094 }
1095
1096 // static
1040 void OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary( 1097 void OneClickSigninHelper::RedirectToNtpOrAppsPageIfNecessary(
1041 content::WebContents* contents, signin::Source source) { 1098 content::WebContents* contents, signin::Source source) {
1042 if (source != signin::SOURCE_SETTINGS && 1099 if (source != signin::SOURCE_SETTINGS &&
1043 source != signin::SOURCE_WEBSTORE_INSTALL) { 1100 source != signin::SOURCE_WEBSTORE_INSTALL) {
1044 RedirectToNtpOrAppsPage(contents, source); 1101 RedirectToNtpOrAppsPage(contents, source);
1045 } 1102 }
1046 } 1103 }
1047 1104
1048 void OneClickSigninHelper::RedirectToSignin() { 1105 void OneClickSigninHelper::RedirectToSignin() {
1049 VLOG(1) << "OneClickSigninHelper::RedirectToSignin"; 1106 VLOG(1) << "OneClickSigninHelper::RedirectToSignin";
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 case AUTO_ACCEPT_ACCEPTED: 1343 case AUTO_ACCEPT_ACCEPTED:
1287 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); 1344 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED);
1288 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS); 1345 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_DEFAULTS);
1289 SigninManager::DisableOneClickSignIn(profile); 1346 SigninManager::DisableOneClickSignIn(profile);
1290 // Start syncing with the default settings - prompt the user to sign in 1347 // Start syncing with the default settings - prompt the user to sign in
1291 // first. 1348 // first.
1292 if (!do_not_start_sync_for_testing_) { 1349 if (!do_not_start_sync_for_testing_) {
1293 StartSync( 1350 StartSync(
1294 StartSyncArgs(profile, browser, auto_accept_, 1351 StartSyncArgs(profile, browser, auto_accept_,
1295 session_index_, email_, password_, 1352 session_index_, email_, password_,
1353 "" /* oauth_code */,
1296 NULL /* don't force to show sync setup in same tab */, 1354 NULL /* don't force to show sync setup in same tab */,
1297 true /* confirmation_required */, source_, 1355 true /* confirmation_required */, source_,
1298 CreateSyncStarterCallback()), 1356 CreateSyncStarterCallback()),
1299 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS); 1357 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
1300 } 1358 }
1301 break; 1359 break;
1302 case AUTO_ACCEPT_CONFIGURE: 1360 case AUTO_ACCEPT_CONFIGURE:
1303 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED); 1361 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_ACCEPTED);
1304 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED); 1362 LogOneClickHistogramValue(one_click_signin::HISTOGRAM_WITH_ADVANCED);
1305 SigninManager::DisableOneClickSignIn(profile); 1363 SigninManager::DisableOneClickSignIn(profile);
1306 // Display the extra confirmation (even in the SAML case) in case this 1364 // Display the extra confirmation (even in the SAML case) in case this
1307 // was an untrusted renderer. 1365 // was an untrusted renderer.
1308 if (!do_not_start_sync_for_testing_) { 1366 if (!do_not_start_sync_for_testing_) {
1309 StartSync( 1367 StartSync(
1310 StartSyncArgs(profile, browser, auto_accept_, 1368 StartSyncArgs(profile, browser, auto_accept_,
1311 session_index_, email_, password_, 1369 session_index_, email_, password_,
1370 "" /* oauth_code */,
1312 NULL /* don't force sync setup in same tab */, 1371 NULL /* don't force sync setup in same tab */,
1313 true /* confirmation_required */, source_, 1372 true /* confirmation_required */, source_,
1314 CreateSyncStarterCallback()), 1373 CreateSyncStarterCallback()),
1315 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); 1374 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
1316 } 1375 }
1317 break; 1376 break;
1318 case AUTO_ACCEPT_EXPLICIT: { 1377 case AUTO_ACCEPT_EXPLICIT: {
1319 signin::Source original_source = 1378 signin::Source original_source =
1320 signin::GetSourceForPromoURL(original_continue_url_); 1379 signin::GetSourceForPromoURL(original_continue_url_);
1321 if (switched_to_advanced_) { 1380 if (switched_to_advanced_) {
(...skipping 15 matching lines...) Expand all
1337 ProfileSyncService* sync_service = 1396 ProfileSyncService* sync_service =
1338 ProfileSyncServiceFactory::GetForProfile(profile); 1397 ProfileSyncServiceFactory::GetForProfile(profile);
1339 OneClickSigninSyncStarter::StartSyncMode start_mode = 1398 OneClickSigninSyncStarter::StartSyncMode start_mode =
1340 source_ == signin::SOURCE_SETTINGS ? 1399 source_ == signin::SOURCE_SETTINGS ?
1341 (SigninGlobalError::GetForProfile(profile)->HasMenuItem() && 1400 (SigninGlobalError::GetForProfile(profile)->HasMenuItem() &&
1342 sync_service && sync_service->HasSyncSetupCompleted()) ? 1401 sync_service && sync_service->HasSyncSetupCompleted()) ?
1343 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE : 1402 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE :
1344 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : 1403 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST :
1345 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; 1404 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS;
1346 1405
1347 std::string last_email = 1406 if (!HandleCrossAccountError(contents, session_index_, email_, password_,
1348 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername); 1407 "" /* oauth_code */, auto_accept_, source_, start_mode,
1349 1408 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_) { 1409 if (!do_not_start_sync_for_testing_) {
1372 StartSync( 1410 StartSync(
1373 StartSyncArgs(profile, browser, auto_accept_, 1411 StartSyncArgs(profile, browser, auto_accept_,
1374 session_index_, email_, password_, contents, 1412 session_index_, email_, password_,
1413 "" /* oauth_code */, contents,
1375 untrusted_confirmation_required_, source_, 1414 untrusted_confirmation_required_, source_,
1376 CreateSyncStarterCallback()), 1415 CreateSyncStarterCallback()),
1377 start_mode); 1416 start_mode);
1378 } 1417 }
1379 1418
1380 // If this explicit sign in is not from settings page/webstore, show 1419 // 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 1420 // 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 1421 // settings page, it will get auto-closed after sync setup. In the case
1383 // of webstore, it will redirect back to webstore. 1422 // of webstore, it will redirect back to webstore.
1384 RedirectToNtpOrAppsPageIfNecessary(web_contents(), source_); 1423 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, 1521 // If the web contents is showing a blank page and not about to be closed,
1483 // redirect to the NTP or apps page. 1522 // redirect to the NTP or apps page.
1484 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) && 1523 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) &&
1485 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) { 1524 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) {
1486 RedirectToNtpOrAppsPage( 1525 RedirectToNtpOrAppsPage(
1487 web_contents(), 1526 web_contents(),
1488 signin::GetSourceForPromoURL(original_continue_url_)); 1527 signin::GetSourceForPromoURL(original_continue_url_));
1489 } 1528 }
1490 } 1529 }
1491 } 1530 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/sync/one_click_signin_helper.h ('k') | chrome/browser/ui/webui/inline_login_ui.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698