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

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

Issue 444083003: Fix crash when new avatar signin with cross account error (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 6 years, 4 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 1144 matching lines...) Expand 10 before | Expand all | Expand 10 after
1155 base::string16(), /* no SAML email */ 1155 base::string16(), /* no SAML email */
1156 base::UTF8ToUTF16(error), 1156 base::UTF8ToUTF16(error),
1157 // This callback is never invoked. 1157 // This callback is never invoked.
1158 // TODO(rogerta): Separate out the bubble API so we don't have to pass 1158 // TODO(rogerta): Separate out the bubble API so we don't have to pass
1159 // ignored |email| and |callback| params. 1159 // ignored |email| and |callback| params.
1160 BrowserWindow::StartSyncCallback()); 1160 BrowserWindow::StartSyncCallback());
1161 } 1161 }
1162 1162
1163 // static 1163 // static
1164 bool OneClickSigninHelper::HandleCrossAccountError( 1164 bool OneClickSigninHelper::HandleCrossAccountError(
1165 content::WebContents* contents, 1165 Profile* profile,
1166 const std::string& session_index, 1166 const std::string& session_index,
1167 const std::string& email, 1167 const std::string& email,
1168 const std::string& password, 1168 const std::string& password,
1169 const std::string& refresh_token, 1169 const std::string& refresh_token,
1170 OneClickSigninHelper::AutoAccept auto_accept, 1170 OneClickSigninHelper::AutoAccept auto_accept,
1171 signin::Source source, 1171 signin::Source source,
1172 OneClickSigninSyncStarter::StartSyncMode start_mode, 1172 OneClickSigninSyncStarter::StartSyncMode start_mode,
1173 OneClickSigninSyncStarter::Callback sync_callback) { 1173 OneClickSigninSyncStarter::Callback sync_callback) {
1174 Profile* profile =
1175 Profile::FromBrowserContext(contents->GetBrowserContext());
1176 std::string last_email = 1174 std::string last_email =
1177 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername); 1175 profile->GetPrefs()->GetString(prefs::kGoogleServicesLastUsername);
1178 1176
1179 if (!last_email.empty() && !gaia::AreEmailsSame(last_email, email)) { 1177 if (!last_email.empty() && !gaia::AreEmailsSame(last_email, email)) {
1180 // If the new email address is different from the email address that 1178 // If the new email address is different from the email address that
1181 // just signed in, show a confirmation dialog. 1179 // just signed in, show a confirmation dialog on top of the current active
1180 // tab.
1182 1181
1183 // No need to display a second confirmation so pass false below. 1182 // No need to display a second confirmation so pass false below.
1184 // TODO(atwilson): Move this into OneClickSigninSyncStarter. 1183 // TODO(atwilson): Move this into OneClickSigninSyncStarter.
1185 // The tab modal dialog always executes its callback before |contents| 1184 // The tab modal dialog always executes its callback before |contents|
1186 // is deleted. 1185 // is deleted.
1187 Browser* browser = chrome::FindBrowserWithWebContents(contents); 1186 Browser* browser = chrome::FindLastActiveWithProfile(
1187 profile, chrome::GetActiveDesktop());
1188 content::WebContents* contents =
1189 browser->tab_strip_model()->GetActiveWebContents();
1188 ConfirmEmailDialogDelegate::AskForConfirmation( 1190 ConfirmEmailDialogDelegate::AskForConfirmation(
1189 contents, 1191 contents,
1190 last_email, 1192 last_email,
1191 email, 1193 email,
1192 base::Bind( 1194 base::Bind(
1193 &StartExplicitSync, 1195 &StartExplicitSync,
1194 StartSyncArgs(profile, browser, auto_accept, 1196 StartSyncArgs(profile, browser, auto_accept,
1195 session_index, email, password, 1197 session_index, email, password,
1196 refresh_token, 1198 refresh_token,
1197 contents, false /* confirmation_required */, source, 1199 contents, false /* confirmation_required */, source,
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
1543 signin_error_controller(); 1545 signin_error_controller();
1544 1546
1545 OneClickSigninSyncStarter::StartSyncMode start_mode = 1547 OneClickSigninSyncStarter::StartSyncMode start_mode =
1546 source_ == signin::SOURCE_SETTINGS ? 1548 source_ == signin::SOURCE_SETTINGS ?
1547 (error_controller->HasError() && 1549 (error_controller->HasError() &&
1548 sync_service && sync_service->HasSyncSetupCompleted()) ? 1550 sync_service && sync_service->HasSyncSetupCompleted()) ?
1549 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE : 1551 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE :
1550 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : 1552 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST :
1551 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; 1553 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS;
1552 1554
1553 if (!HandleCrossAccountError(contents, session_index_, email_, password_, 1555 if (!HandleCrossAccountError(profile, session_index_, email_, password_,
1554 "", auto_accept_, source_, start_mode, 1556 "", auto_accept_, source_, start_mode,
1555 CreateSyncStarterCallback())) { 1557 CreateSyncStarterCallback())) {
1556 if (!do_not_start_sync_for_testing_) { 1558 if (!do_not_start_sync_for_testing_) {
1557 StartSync( 1559 StartSync(
1558 StartSyncArgs(profile, browser, auto_accept_, 1560 StartSyncArgs(profile, browser, auto_accept_,
1559 session_index_, email_, password_, "", 1561 session_index_, email_, password_, "",
1560 contents, 1562 contents,
1561 untrusted_confirmation_required_, source_, 1563 untrusted_confirmation_required_, source_,
1562 CreateSyncStarterCallback()), 1564 CreateSyncStarterCallback()),
1563 start_mode); 1565 start_mode);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1612 // If the web contents is showing a blank page and not about to be closed, 1614 // If the web contents is showing a blank page and not about to be closed,
1613 // redirect to the NTP or apps page. 1615 // redirect to the NTP or apps page.
1614 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) && 1616 if (signin::IsContinueUrlForWebBasedSigninFlow(current_url) &&
1615 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) { 1617 !signin::IsAutoCloseEnabledInURL(original_continue_url_)) {
1616 RedirectToNtpOrAppsPage( 1618 RedirectToNtpOrAppsPage(
1617 web_contents(), 1619 web_contents(),
1618 signin::GetSourceForPromoURL(original_continue_url_)); 1620 signin::GetSourceForPromoURL(original_continue_url_));
1619 } 1621 }
1620 } 1622 }
1621 } 1623 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/sync/one_click_signin_helper.h ('k') | chrome/browser/ui/webui/signin/inline_login_handler_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698