| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/signin/inline_login_handler_impl.h" | 5 #include "chrome/browser/ui/webui/signin/inline_login_handler_impl.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/string_util.h" | 11 #include "base/strings/string_util.h" |
| 12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
| 13 #include "base/values.h" | 13 #include "base/values.h" |
| 14 #include "chrome/browser/profiles/profile.h" | 14 #include "chrome/browser/profiles/profile.h" |
| 15 #include "chrome/browser/signin/about_signin_internals_factory.h" | 15 #include "chrome/browser/signin/about_signin_internals_factory.h" |
| 16 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 16 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
| 17 #include "chrome/browser/signin/signin_manager_factory.h" |
| 17 #include "chrome/browser/sync/profile_sync_service.h" | 18 #include "chrome/browser/sync/profile_sync_service.h" |
| 18 #include "chrome/browser/sync/profile_sync_service_factory.h" | 19 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 19 #include "chrome/browser/ui/browser_finder.h" | 20 #include "chrome/browser/ui/browser_finder.h" |
| 20 #include "chrome/browser/ui/sync/one_click_signin_helper.h" | 21 #include "chrome/browser/ui/sync/one_click_signin_helper.h" |
| 21 #include "chrome/browser/ui/sync/one_click_signin_histogram.h" | 22 #include "chrome/browser/ui/sync/one_click_signin_histogram.h" |
| 22 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 23 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 23 #include "chrome/common/url_constants.h" | 24 #include "chrome/common/url_constants.h" |
| 24 #include "components/signin/core/browser/about_signin_internals.h" | 25 #include "components/signin/core/browser/about_signin_internals.h" |
| 25 #include "components/signin/core/browser/profile_oauth2_token_service.h" | 26 #include "components/signin/core/browser/profile_oauth2_token_service.h" |
| 26 #include "components/signin/core/browser/signin_error_controller.h" | 27 #include "components/signin/core/browser/signin_error_controller.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 if (handler_) { | 100 if (handler_) { |
| 100 contents = handler_->web_ui()->GetWebContents(); | 101 contents = handler_->web_ui()->GetWebContents(); |
| 101 browser = handler_->GetDesktopBrowser(); | 102 browser = handler_->GetDesktopBrowser(); |
| 102 } | 103 } |
| 103 | 104 |
| 104 AboutSigninInternals* about_signin_internals = | 105 AboutSigninInternals* about_signin_internals = |
| 105 AboutSigninInternalsFactory::GetForProfile(profile_); | 106 AboutSigninInternalsFactory::GetForProfile(profile_); |
| 106 about_signin_internals->OnRefreshTokenReceived("Successful"); | 107 about_signin_internals->OnRefreshTokenReceived("Successful"); |
| 107 | 108 |
| 108 signin::Source source = signin::GetSourceForPromoURL(current_url_); | 109 signin::Source source = signin::GetSourceForPromoURL(current_url_); |
| 109 if (source == signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT) { | 110 if (source == signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT || |
| 111 source == signin::SOURCE_REAUTH) { |
| 110 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)-> | 112 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)-> |
| 111 UpdateCredentials(email, refresh_token); | 113 UpdateCredentials(email, refresh_token); |
| 112 | 114 |
| 113 if (signin::IsAutoCloseEnabledInURL(current_url_)) { | 115 if (signin::IsAutoCloseEnabledInURL(current_url_)) { |
| 114 // Close the gaia sign in tab via a task to make sure we aren't in the | 116 // Close the gaia sign in tab via a task to make sure we aren't in the |
| 115 // middle of any webui handler code. | 117 // middle of any webui handler code. |
| 116 base::MessageLoop::current()->PostTask( | 118 base::MessageLoop::current()->PostTask( |
| 117 FROM_HERE, | 119 FROM_HERE, |
| 118 base::Bind(&InlineLoginHandlerImpl::CloseTab, | 120 base::Bind(&InlineLoginHandlerImpl::CloseTab, |
| 119 handler_)); | 121 handler_)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 130 sync_service && sync_service->HasSyncSetupCompleted()) ? | 132 sync_service && sync_service->HasSyncSetupCompleted()) ? |
| 131 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE : | 133 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE : |
| 132 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : | 134 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST : |
| 133 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; | 135 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; |
| 134 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required = | 136 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required = |
| 135 source == signin::SOURCE_SETTINGS || | 137 source == signin::SOURCE_SETTINGS || |
| 136 source == signin::SOURCE_WEBSTORE_INSTALL || | 138 source == signin::SOURCE_WEBSTORE_INSTALL || |
| 137 choose_what_to_sync_ ? | 139 choose_what_to_sync_ ? |
| 138 OneClickSigninSyncStarter::NO_CONFIRMATION : | 140 OneClickSigninSyncStarter::NO_CONFIRMATION : |
| 139 OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN; | 141 OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN; |
| 140 bool start_signin = true; | |
| 141 | 142 |
| 142 if (source != signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT) { | 143 bool start_signin = |
| 143 start_signin = !OneClickSigninHelper::HandleCrossAccountError( | 144 !OneClickSigninHelper::HandleCrossAccountError( |
| 144 contents, "", | 145 contents, "", |
| 145 email, password_, refresh_token, | 146 email, password_, refresh_token, |
| 146 OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT, | 147 OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT, |
| 147 source, start_mode, | 148 source, start_mode, |
| 148 base::Bind(&InlineLoginHandlerImpl::SyncStarterCallback, | 149 base::Bind(&InlineLoginHandlerImpl::SyncStarterCallback, |
| 149 handler_)); | 150 handler_)); |
| 150 } | |
| 151 | |
| 152 if (start_signin) { | 151 if (start_signin) { |
| 153 // Call OneClickSigninSyncStarter to exchange oauth code for tokens. | 152 // Call OneClickSigninSyncStarter to exchange oauth code for tokens. |
| 154 // OneClickSigninSyncStarter will delete itself once the job is done. | 153 // OneClickSigninSyncStarter will delete itself once the job is done. |
| 155 new OneClickSigninSyncStarter( | 154 new OneClickSigninSyncStarter( |
| 156 profile_, browser, | 155 profile_, browser, |
| 157 email, password_, refresh_token, | 156 email, password_, refresh_token, |
| 158 start_mode, | 157 start_mode, |
| 159 contents, | 158 contents, |
| 160 confirmation_required, | 159 confirmation_required, |
| 161 signin::GetNextPageURLForPromoURL(current_url_), | 160 signin::GetNextPageURLForPromoURL(current_url_), |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 OneClickSigninHelper::LogHistogramValue( | 244 OneClickSigninHelper::LogHistogramValue( |
| 246 source, one_click_signin::HISTOGRAM_ACCEPTED); | 245 source, one_click_signin::HISTOGRAM_ACCEPTED); |
| 247 bool switch_to_advanced = | 246 bool switch_to_advanced = |
| 248 choose_what_to_sync_ && (source != signin::SOURCE_SETTINGS); | 247 choose_what_to_sync_ && (source != signin::SOURCE_SETTINGS); |
| 249 OneClickSigninHelper::LogHistogramValue( | 248 OneClickSigninHelper::LogHistogramValue( |
| 250 source, | 249 source, |
| 251 switch_to_advanced ? one_click_signin::HISTOGRAM_WITH_ADVANCED : | 250 switch_to_advanced ? one_click_signin::HISTOGRAM_WITH_ADVANCED : |
| 252 one_click_signin::HISTOGRAM_WITH_DEFAULTS); | 251 one_click_signin::HISTOGRAM_WITH_DEFAULTS); |
| 253 | 252 |
| 254 OneClickSigninHelper::CanOfferFor can_offer_for = | 253 OneClickSigninHelper::CanOfferFor can_offer_for = |
| 255 source == signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT ? | |
| 256 OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT : | |
| 257 OneClickSigninHelper::CAN_OFFER_FOR_ALL; | 254 OneClickSigninHelper::CAN_OFFER_FOR_ALL; |
| 255 switch (source) { |
| 256 case signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT: |
| 257 can_offer_for = OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT; |
| 258 break; |
| 259 case signin::SOURCE_REAUTH: { |
| 260 std::string primary_username = |
| 261 SigninManagerFactory::GetForProfile( |
| 262 Profile::FromWebUI(web_ui()))->GetAuthenticatedUsername(); |
| 263 if (!gaia::AreEmailsSame(default_email, primary_username)) |
| 264 can_offer_for = OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT; |
| 265 break; |
| 266 } |
| 267 default: |
| 268 // No need to change |can_offer_for|. |
| 269 break; |
| 270 } |
| 271 |
| 258 std::string error_msg; | 272 std::string error_msg; |
| 259 bool can_offer = OneClickSigninHelper::CanOffer( | 273 bool can_offer = OneClickSigninHelper::CanOffer( |
| 260 contents, can_offer_for, email_, &error_msg); | 274 contents, can_offer_for, email_, &error_msg); |
| 261 if (!can_offer) { | 275 if (!can_offer) { |
| 262 HandleLoginError(error_msg); | 276 HandleLoginError(error_msg); |
| 263 return; | 277 return; |
| 264 } | 278 } |
| 265 | 279 |
| 266 AboutSigninInternals* about_signin_internals = | 280 AboutSigninInternals* about_signin_internals = |
| 267 AboutSigninInternalsFactory::GetForProfile(Profile::FromWebUI(web_ui())); | 281 AboutSigninInternalsFactory::GetForProfile(Profile::FromWebUI(web_ui())); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 TabStripModel* tab_strip_model = browser->tab_strip_model(); | 358 TabStripModel* tab_strip_model = browser->tab_strip_model(); |
| 345 if (tab_strip_model) { | 359 if (tab_strip_model) { |
| 346 int index = tab_strip_model->GetIndexOfWebContents(tab); | 360 int index = tab_strip_model->GetIndexOfWebContents(tab); |
| 347 if (index != TabStripModel::kNoTab) { | 361 if (index != TabStripModel::kNoTab) { |
| 348 tab_strip_model->ExecuteContextMenuCommand( | 362 tab_strip_model->ExecuteContextMenuCommand( |
| 349 index, TabStripModel::CommandCloseTab); | 363 index, TabStripModel::CommandCloseTab); |
| 350 } | 364 } |
| 351 } | 365 } |
| 352 } | 366 } |
| 353 } | 367 } |
| OLD | NEW |