| 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/profiles/profile_window.h" | 15 #include "chrome/browser/profiles/profile_window.h" |
| 16 #include "chrome/browser/signin/about_signin_internals_factory.h" | 16 #include "chrome/browser/signin/about_signin_internals_factory.h" |
| 17 #include "chrome/browser/signin/account_tracker_service_factory.h" | 17 #include "chrome/browser/signin/account_tracker_service_factory.h" |
| 18 #include "chrome/browser/signin/chrome_signin_client_factory.h" | 18 #include "chrome/browser/signin/chrome_signin_client_factory.h" |
| 19 #include "chrome/browser/signin/local_auth.h" | 19 #include "chrome/browser/signin/local_auth.h" |
| 20 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 20 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" |
| 21 #include "chrome/browser/signin/signin_manager_factory.h" | 21 #include "chrome/browser/signin/signin_manager_factory.h" |
| 22 #include "chrome/browser/signin/signin_promo.h" | 22 #include "chrome/browser/signin/signin_promo.h" |
| 23 #include "chrome/browser/sync/profile_sync_service.h" | 23 #include "chrome/browser/sync/profile_sync_service.h" |
| 24 #include "chrome/browser/sync/profile_sync_service_factory.h" | 24 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 25 #include "chrome/browser/ui/browser_finder.h" | 25 #include "chrome/browser/ui/browser_finder.h" |
| 26 #include "chrome/browser/ui/browser_window.h" | 26 #include "chrome/browser/ui/browser_window.h" |
| 27 #include "chrome/browser/ui/sync/one_click_signin_helper.h" | 27 #include "chrome/browser/ui/sync/one_click_signin_helper.h" |
| 28 #include "chrome/browser/ui/sync/one_click_signin_histogram.h" | |
| 29 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 28 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 30 #include "chrome/browser/ui/webui/signin/inline_login_ui.h" | 29 #include "chrome/browser/ui/webui/signin/inline_login_ui.h" |
| 31 #include "chrome/browser/ui/webui/signin/login_ui_service.h" | 30 #include "chrome/browser/ui/webui/signin/login_ui_service.h" |
| 32 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" | 31 #include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" |
| 33 #include "chrome/common/url_constants.h" | 32 #include "chrome/common/url_constants.h" |
| 34 #include "components/signin/core/browser/about_signin_internals.h" | 33 #include "components/signin/core/browser/about_signin_internals.h" |
| 35 #include "components/signin/core/browser/account_tracker_service.h" | 34 #include "components/signin/core/browser/account_tracker_service.h" |
| 36 #include "components/signin/core/browser/profile_oauth2_token_service.h" | 35 #include "components/signin/core/browser/profile_oauth2_token_service.h" |
| 37 #include "components/signin/core/browser/signin_error_controller.h" | 36 #include "components/signin/core/browser/signin_error_controller.h" |
| 37 #include "components/signin/core/browser/signin_metrics.h" |
| 38 #include "components/signin/core/common/profile_management_switches.h" | 38 #include "components/signin/core/common/profile_management_switches.h" |
| 39 #include "content/public/browser/storage_partition.h" | 39 #include "content/public/browser/storage_partition.h" |
| 40 #include "content/public/browser/web_ui.h" | 40 #include "content/public/browser/web_ui.h" |
| 41 #include "google_apis/gaia/gaia_auth_consumer.h" | 41 #include "google_apis/gaia/gaia_auth_consumer.h" |
| 42 #include "google_apis/gaia/gaia_auth_fetcher.h" | 42 #include "google_apis/gaia/gaia_auth_fetcher.h" |
| 43 #include "google_apis/gaia/gaia_auth_util.h" | 43 #include "google_apis/gaia/gaia_auth_util.h" |
| 44 #include "google_apis/gaia/gaia_constants.h" | 44 #include "google_apis/gaia/gaia_constants.h" |
| 45 #include "google_apis/gaia/gaia_urls.h" | 45 #include "google_apis/gaia/gaia_urls.h" |
| 46 #include "net/base/url_util.h" | 46 #include "net/base/url_util.h" |
| 47 | 47 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 about_signin_internals->OnRefreshTokenReceived("Successful"); | 123 about_signin_internals->OnRefreshTokenReceived("Successful"); |
| 124 | 124 |
| 125 AccountTrackerService* account_tracker = | 125 AccountTrackerService* account_tracker = |
| 126 AccountTrackerServiceFactory::GetForProfile(profile_); | 126 AccountTrackerServiceFactory::GetForProfile(profile_); |
| 127 std::string account_id = | 127 std::string account_id = |
| 128 account_tracker->PickAccountIdForAccount(gaia_id_, email_); | 128 account_tracker->PickAccountIdForAccount(gaia_id_, email_); |
| 129 | 129 |
| 130 // Prime the account tracker with this combination of gaia id/display email. | 130 // Prime the account tracker with this combination of gaia id/display email. |
| 131 account_tracker->SeedAccountInfo(gaia_id_, email_); | 131 account_tracker->SeedAccountInfo(gaia_id_, email_); |
| 132 | 132 |
| 133 signin::Source source = signin::GetSourceForPromoURL(current_url_); | 133 signin_metrics::Source source = signin::GetSourceForPromoURL(current_url_); |
| 134 | 134 |
| 135 std::string primary_email = | 135 std::string primary_email = |
| 136 SigninManagerFactory::GetForProfile(profile_)->GetAuthenticatedUsername(); | 136 SigninManagerFactory::GetForProfile(profile_)->GetAuthenticatedUsername(); |
| 137 if (gaia::AreEmailsSame(email_, primary_email) && | 137 if (gaia::AreEmailsSame(email_, primary_email) && |
| 138 source == signin::SOURCE_REAUTH && | 138 source == signin_metrics::SOURCE_REAUTH && |
| 139 switches::IsNewProfileManagement() && | 139 switches::IsNewProfileManagement() && |
| 140 !password_.empty() && | 140 !password_.empty() && |
| 141 profiles::IsLockAvailable(profile_)) { | 141 profiles::IsLockAvailable(profile_)) { |
| 142 chrome::SetLocalAuthCredentials(profile_, password_); | 142 chrome::SetLocalAuthCredentials(profile_, password_); |
| 143 } | 143 } |
| 144 | 144 |
| 145 if (source == signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT || | 145 if (source == signin_metrics::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT || |
| 146 source == signin::SOURCE_REAUTH) { | 146 source == signin_metrics::SOURCE_REAUTH) { |
| 147 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)-> | 147 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)-> |
| 148 UpdateCredentials(account_id, result.refresh_token); | 148 UpdateCredentials(account_id, result.refresh_token); |
| 149 | 149 |
| 150 if (signin::IsAutoCloseEnabledInURL(current_url_)) { | 150 if (signin::IsAutoCloseEnabledInURL(current_url_)) { |
| 151 // Close the gaia sign in tab via a task to make sure we aren't in the | 151 // Close the gaia sign in tab via a task to make sure we aren't in the |
| 152 // middle of any webui handler code. | 152 // middle of any webui handler code. |
| 153 base::MessageLoop::current()->PostTask( | 153 base::MessageLoop::current()->PostTask( |
| 154 FROM_HERE, | 154 FROM_HERE, |
| 155 base::Bind(&InlineLoginHandlerImpl::CloseTab, | 155 base::Bind(&InlineLoginHandlerImpl::CloseTab, |
| 156 handler_, | 156 handler_, |
| 157 signin::ShouldShowAccountManagement(current_url_))); | 157 signin::ShouldShowAccountManagement(current_url_))); |
| 158 } | 158 } |
| 159 } else { | 159 } else { |
| 160 ProfileSyncService* sync_service = | 160 ProfileSyncService* sync_service = |
| 161 ProfileSyncServiceFactory::GetForProfile(profile_); | 161 ProfileSyncServiceFactory::GetForProfile(profile_); |
| 162 SigninErrorController* error_controller = | 162 SigninErrorController* error_controller = |
| 163 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)-> | 163 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)-> |
| 164 signin_error_controller(); | 164 signin_error_controller(); |
| 165 | 165 |
| 166 bool is_new_avatar_menu = switches::IsNewAvatarMenu(); | 166 bool is_new_avatar_menu = switches::IsNewAvatarMenu(); |
| 167 | 167 |
| 168 OneClickSigninSyncStarter::StartSyncMode start_mode; | 168 OneClickSigninSyncStarter::StartSyncMode start_mode; |
| 169 if (source == signin::SOURCE_SETTINGS || choose_what_to_sync_) { | 169 if (source == signin_metrics::SOURCE_SETTINGS || choose_what_to_sync_) { |
| 170 bool show_settings_without_configure = | 170 bool show_settings_without_configure = |
| 171 error_controller->HasError() && | 171 error_controller->HasError() && |
| 172 sync_service && | 172 sync_service && |
| 173 sync_service->HasSyncSetupCompleted(); | 173 sync_service->HasSyncSetupCompleted(); |
| 174 start_mode = show_settings_without_configure ? | 174 start_mode = show_settings_without_configure ? |
| 175 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE : | 175 OneClickSigninSyncStarter::SHOW_SETTINGS_WITHOUT_CONFIGURE : |
| 176 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST; | 176 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST; |
| 177 } else { | 177 } else { |
| 178 start_mode = is_new_avatar_menu ? | 178 start_mode = is_new_avatar_menu ? |
| 179 OneClickSigninSyncStarter::CONFIRM_SYNC_SETTINGS_FIRST : | 179 OneClickSigninSyncStarter::CONFIRM_SYNC_SETTINGS_FIRST : |
| 180 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; | 180 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS; |
| 181 } | 181 } |
| 182 | 182 |
| 183 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required; | 183 OneClickSigninSyncStarter::ConfirmationRequired confirmation_required; |
| 184 if (confirm_untrusted_signin_) { | 184 if (confirm_untrusted_signin_) { |
| 185 confirmation_required = | 185 confirmation_required = |
| 186 OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN; | 186 OneClickSigninSyncStarter::CONFIRM_UNTRUSTED_SIGNIN; |
| 187 } else if (is_new_avatar_menu) { | 187 } else if (is_new_avatar_menu) { |
| 188 confirmation_required = OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN; | 188 confirmation_required = OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN; |
| 189 } else { | 189 } else { |
| 190 confirmation_required = | 190 confirmation_required = |
| 191 source == signin::SOURCE_SETTINGS || | 191 source == signin_metrics::SOURCE_SETTINGS || |
| 192 choose_what_to_sync_ ? | 192 choose_what_to_sync_ ? |
| 193 OneClickSigninSyncStarter::NO_CONFIRMATION : | 193 OneClickSigninSyncStarter::NO_CONFIRMATION : |
| 194 OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN; | 194 OneClickSigninSyncStarter::CONFIRM_AFTER_SIGNIN; |
| 195 } | 195 } |
| 196 | 196 |
| 197 bool start_signin = | 197 bool start_signin = |
| 198 !OneClickSigninHelper::HandleCrossAccountError( | 198 !OneClickSigninHelper::HandleCrossAccountError( |
| 199 profile_, "", | 199 profile_, "", |
| 200 email_, password_, result.refresh_token, | 200 email_, password_, result.refresh_token, |
| 201 OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT, | 201 OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT, |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 | 269 |
| 270 void InlineLoginHandlerImpl::SetExtraInitParams(base::DictionaryValue& params) { | 270 void InlineLoginHandlerImpl::SetExtraInitParams(base::DictionaryValue& params) { |
| 271 params.SetString("service", "chromiumsync"); | 271 params.SetString("service", "chromiumsync"); |
| 272 | 272 |
| 273 content::WebContents* contents = web_ui()->GetWebContents(); | 273 content::WebContents* contents = web_ui()->GetWebContents(); |
| 274 const GURL& current_url = contents->GetURL(); | 274 const GURL& current_url = contents->GetURL(); |
| 275 std::string is_constrained; | 275 std::string is_constrained; |
| 276 net::GetValueForKeyInQuery(current_url, "constrained", &is_constrained); | 276 net::GetValueForKeyInQuery(current_url, "constrained", &is_constrained); |
| 277 | 277 |
| 278 content::WebContentsObserver::Observe(contents); | 278 content::WebContentsObserver::Observe(contents); |
| 279 | 279 OneClickSigninHelper::LogHistogramValue(signin_metrics::HISTOGRAM_SHOWN); |
| 280 signin::Source source = signin::GetSourceForPromoURL(current_url); | |
| 281 OneClickSigninHelper::LogHistogramValue( | |
| 282 source, one_click_signin::HISTOGRAM_SHOWN); | |
| 283 } | 280 } |
| 284 | 281 |
| 285 void InlineLoginHandlerImpl::CompleteLogin(const base::ListValue* args) { | 282 void InlineLoginHandlerImpl::CompleteLogin(const base::ListValue* args) { |
| 286 content::WebContents* contents = web_ui()->GetWebContents(); | 283 content::WebContents* contents = web_ui()->GetWebContents(); |
| 287 const GURL& current_url = contents->GetURL(); | 284 const GURL& current_url = contents->GetURL(); |
| 288 | 285 |
| 289 const base::DictionaryValue* dict = NULL; | 286 const base::DictionaryValue* dict = NULL; |
| 290 args->GetDictionary(0, &dict); | 287 args->GetDictionary(0, &dict); |
| 291 | 288 |
| 292 bool skip_for_now = false; | 289 bool skip_for_now = false; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 } | 325 } |
| 329 | 326 |
| 330 base::string16 session_index_string16; | 327 base::string16 session_index_string16; |
| 331 dict->GetString("sessionIndex", &session_index_string16); | 328 dict->GetString("sessionIndex", &session_index_string16); |
| 332 std::string session_index = base::UTF16ToASCII(session_index_string16); | 329 std::string session_index = base::UTF16ToASCII(session_index_string16); |
| 333 DCHECK(!session_index.empty()); | 330 DCHECK(!session_index.empty()); |
| 334 | 331 |
| 335 bool choose_what_to_sync = false; | 332 bool choose_what_to_sync = false; |
| 336 dict->GetBoolean("chooseWhatToSync", &choose_what_to_sync); | 333 dict->GetBoolean("chooseWhatToSync", &choose_what_to_sync); |
| 337 | 334 |
| 338 signin::Source source = signin::GetSourceForPromoURL(current_url); | 335 signin_metrics::Source source = signin::GetSourceForPromoURL(current_url); |
| 336 OneClickSigninHelper::LogHistogramValue(signin_metrics::HISTOGRAM_ACCEPTED); |
| 337 bool switch_to_advanced = |
| 338 choose_what_to_sync && (source != signin_metrics::SOURCE_SETTINGS); |
| 339 OneClickSigninHelper::LogHistogramValue( | 339 OneClickSigninHelper::LogHistogramValue( |
| 340 source, one_click_signin::HISTOGRAM_ACCEPTED); | 340 switch_to_advanced ? signin_metrics::HISTOGRAM_WITH_ADVANCED : |
| 341 bool switch_to_advanced = | 341 signin_metrics::HISTOGRAM_WITH_DEFAULTS); |
| 342 choose_what_to_sync && (source != signin::SOURCE_SETTINGS); | |
| 343 OneClickSigninHelper::LogHistogramValue( | |
| 344 source, | |
| 345 switch_to_advanced ? one_click_signin::HISTOGRAM_WITH_ADVANCED : | |
| 346 one_click_signin::HISTOGRAM_WITH_DEFAULTS); | |
| 347 | 342 |
| 348 OneClickSigninHelper::CanOfferFor can_offer_for = | 343 OneClickSigninHelper::CanOfferFor can_offer_for = |
| 349 OneClickSigninHelper::CAN_OFFER_FOR_ALL; | 344 OneClickSigninHelper::CAN_OFFER_FOR_ALL; |
| 350 switch (source) { | 345 switch (source) { |
| 351 case signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT: | 346 case signin_metrics::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT: |
| 352 can_offer_for = OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT; | 347 can_offer_for = OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT; |
| 353 break; | 348 break; |
| 354 case signin::SOURCE_REAUTH: { | 349 case signin_metrics::SOURCE_REAUTH: { |
| 355 std::string primary_username = | 350 std::string primary_username = |
| 356 SigninManagerFactory::GetForProfile( | 351 SigninManagerFactory::GetForProfile( |
| 357 Profile::FromWebUI(web_ui()))->GetAuthenticatedUsername(); | 352 Profile::FromWebUI(web_ui()))->GetAuthenticatedUsername(); |
| 358 if (!gaia::AreEmailsSame(default_email, primary_username)) | 353 if (!gaia::AreEmailsSame(default_email, primary_username)) |
| 359 can_offer_for = OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT; | 354 can_offer_for = OneClickSigninHelper::CAN_OFFER_FOR_SECONDARY_ACCOUNT; |
| 360 break; | 355 break; |
| 361 } | 356 } |
| 362 default: | 357 default: |
| 363 // No need to change |can_offer_for|. | 358 // No need to change |can_offer_for|. |
| 364 break; | 359 break; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 content::WebContents* contents = web_ui()->GetWebContents(); | 415 content::WebContents* contents = web_ui()->GetWebContents(); |
| 421 | 416 |
| 422 if (contents->GetController().GetPendingEntry()) { | 417 if (contents->GetController().GetPendingEntry()) { |
| 423 // Do nothing if a navigation is pending, since this call can be triggered | 418 // Do nothing if a navigation is pending, since this call can be triggered |
| 424 // from DidStartLoading. This avoids deleting the pending entry while we are | 419 // from DidStartLoading. This avoids deleting the pending entry while we are |
| 425 // still navigating to it. See crbug/346632. | 420 // still navigating to it. See crbug/346632. |
| 426 return; | 421 return; |
| 427 } | 422 } |
| 428 | 423 |
| 429 const GURL& current_url = contents->GetLastCommittedURL(); | 424 const GURL& current_url = contents->GetLastCommittedURL(); |
| 430 signin::Source source = signin::GetSourceForPromoURL(current_url); | 425 signin_metrics::Source source = signin::GetSourceForPromoURL(current_url); |
| 431 bool auto_close = signin::IsAutoCloseEnabledInURL(current_url); | 426 bool auto_close = signin::IsAutoCloseEnabledInURL(current_url); |
| 432 | 427 |
| 433 if (result == OneClickSigninSyncStarter::SYNC_SETUP_FAILURE) { | 428 if (result == OneClickSigninSyncStarter::SYNC_SETUP_FAILURE) { |
| 434 OneClickSigninHelper::RedirectToNtpOrAppsPage(contents, source); | 429 OneClickSigninHelper::RedirectToNtpOrAppsPage(contents, source); |
| 435 } else if (auto_close) { | 430 } else if (auto_close) { |
| 436 base::MessageLoop::current()->PostTask( | 431 base::MessageLoop::current()->PostTask( |
| 437 FROM_HERE, | 432 FROM_HERE, |
| 438 base::Bind(&InlineLoginHandlerImpl::CloseTab, | 433 base::Bind(&InlineLoginHandlerImpl::CloseTab, |
| 439 weak_factory_.GetWeakPtr(), | 434 weak_factory_.GetWeakPtr(), |
| 440 signin::ShouldShowAccountManagement(current_url))); | 435 signin::ShouldShowAccountManagement(current_url))); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 456 } | 451 } |
| 457 } | 452 } |
| 458 | 453 |
| 459 if (show_account_management) { | 454 if (show_account_management) { |
| 460 browser->window()->ShowAvatarBubbleFromAvatarButton( | 455 browser->window()->ShowAvatarBubbleFromAvatarButton( |
| 461 BrowserWindow::AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT, | 456 BrowserWindow::AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT, |
| 462 signin::ManageAccountsParams()); | 457 signin::ManageAccountsParams()); |
| 463 } | 458 } |
| 464 } | 459 } |
| 465 } | 460 } |
| OLD | NEW |