| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/chromeos/login/session/user_session_manager.h" | 5 #include "chrome/browser/chromeos/login/session/user_session_manager.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/base_paths.h" | 9 #include "base/base_paths.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 #include "chrome/browser/chrome_notification_types.h" | 27 #include "chrome/browser/chrome_notification_types.h" |
| 28 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" | 28 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" |
| 29 #include "chrome/browser/chromeos/base/locale_util.h" | 29 #include "chrome/browser/chromeos/base/locale_util.h" |
| 30 #include "chrome/browser/chromeos/boot_times_recorder.h" | 30 #include "chrome/browser/chromeos/boot_times_recorder.h" |
| 31 #include "chrome/browser/chromeos/first_run/first_run.h" | 31 #include "chrome/browser/chromeos/first_run/first_run.h" |
| 32 #include "chrome/browser/chromeos/input_method/input_method_util.h" | 32 #include "chrome/browser/chromeos/input_method/input_method_util.h" |
| 33 #include "chrome/browser/chromeos/login/auth/chrome_cryptohome_authenticator.h" | 33 #include "chrome/browser/chromeos/login/auth/chrome_cryptohome_authenticator.h" |
| 34 #include "chrome/browser/chromeos/login/chrome_restart_request.h" | 34 #include "chrome/browser/chromeos/login/chrome_restart_request.h" |
| 35 #include "chrome/browser/chromeos/login/demo_mode/demo_app_launcher.h" | 35 #include "chrome/browser/chromeos/login/demo_mode/demo_app_launcher.h" |
| 36 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_key_manager.h" | 36 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_key_manager.h" |
| 37 #include "chrome/browser/chromeos/login/helper.h" |
| 37 #include "chrome/browser/chromeos/login/lock/screen_locker.h" | 38 #include "chrome/browser/chromeos/login/lock/screen_locker.h" |
| 38 #include "chrome/browser/chromeos/login/profile_auth_data.h" | 39 #include "chrome/browser/chromeos/login/profile_auth_data.h" |
| 39 #include "chrome/browser/chromeos/login/saml/saml_offline_signin_limiter.h" | 40 #include "chrome/browser/chromeos/login/saml/saml_offline_signin_limiter.h" |
| 40 #include "chrome/browser/chromeos/login/saml/saml_offline_signin_limiter_factory
.h" | 41 #include "chrome/browser/chromeos/login/saml/saml_offline_signin_limiter_factory
.h" |
| 41 #include "chrome/browser/chromeos/login/signin/oauth2_login_manager.h" | 42 #include "chrome/browser/chromeos/login/signin/oauth2_login_manager.h" |
| 42 #include "chrome/browser/chromeos/login/signin/oauth2_login_manager_factory.h" | 43 #include "chrome/browser/chromeos/login/signin/oauth2_login_manager_factory.h" |
| 43 #include "chrome/browser/chromeos/login/startup_utils.h" | 44 #include "chrome/browser/chromeos/login/startup_utils.h" |
| 44 #include "chrome/browser/chromeos/login/ui/input_events_blocker.h" | 45 #include "chrome/browser/chromeos/login/ui/input_events_blocker.h" |
| 45 #include "chrome/browser/chromeos/login/ui/login_display_host.h" | 46 #include "chrome/browser/chromeos/login/ui/login_display_host.h" |
| 46 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" | 47 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 65 #include "chrome/browser/signin/account_tracker_service_factory.h" | 66 #include "chrome/browser/signin/account_tracker_service_factory.h" |
| 66 #include "chrome/browser/signin/easy_unlock_service.h" | 67 #include "chrome/browser/signin/easy_unlock_service.h" |
| 67 #include "chrome/browser/signin/signin_manager_factory.h" | 68 #include "chrome/browser/signin/signin_manager_factory.h" |
| 68 #include "chrome/browser/supervised_user/child_accounts/child_account_service.h" | 69 #include "chrome/browser/supervised_user/child_accounts/child_account_service.h" |
| 69 #include "chrome/browser/supervised_user/child_accounts/child_account_service_fa
ctory.h" | 70 #include "chrome/browser/supervised_user/child_accounts/child_account_service_fa
ctory.h" |
| 70 #include "chrome/browser/ui/app_list/start_page_service.h" | 71 #include "chrome/browser/ui/app_list/start_page_service.h" |
| 71 #include "chrome/browser/ui/startup/startup_browser_creator.h" | 72 #include "chrome/browser/ui/startup/startup_browser_creator.h" |
| 72 #include "chrome/common/chrome_switches.h" | 73 #include "chrome/common/chrome_switches.h" |
| 73 #include "chrome/common/logging_chrome.h" | 74 #include "chrome/common/logging_chrome.h" |
| 74 #include "chrome/common/pref_names.h" | 75 #include "chrome/common/pref_names.h" |
| 75 #include "chrome/common/url_constants.h" | |
| 76 #include "chromeos/cert_loader.h" | 76 #include "chromeos/cert_loader.h" |
| 77 #include "chromeos/chromeos_switches.h" | 77 #include "chromeos/chromeos_switches.h" |
| 78 #include "chromeos/cryptohome/cryptohome_util.h" | 78 #include "chromeos/cryptohome/cryptohome_util.h" |
| 79 #include "chromeos/dbus/cryptohome_client.h" | 79 #include "chromeos/dbus/cryptohome_client.h" |
| 80 #include "chromeos/dbus/dbus_thread_manager.h" | 80 #include "chromeos/dbus/dbus_thread_manager.h" |
| 81 #include "chromeos/dbus/session_manager_client.h" | 81 #include "chromeos/dbus/session_manager_client.h" |
| 82 #include "chromeos/login/auth/stub_authenticator.h" | 82 #include "chromeos/login/auth/stub_authenticator.h" |
| 83 #include "chromeos/login/user_names.h" | 83 #include "chromeos/login/user_names.h" |
| 84 #include "chromeos/network/portal_detector/network_portal_detector.h" | 84 #include "chromeos/network/portal_detector/network_portal_detector.h" |
| 85 #include "chromeos/network/portal_detector/network_portal_detector_strategy.h" | 85 #include "chromeos/network/portal_detector/network_portal_detector_strategy.h" |
| (...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 967 // transferred unconditionally. If the user authenticated via an auth | 967 // transferred unconditionally. If the user authenticated via an auth |
| 968 // extension, authentication cookies and channel IDs will be transferred as | 968 // extension, authentication cookies and channel IDs will be transferred as |
| 969 // well when the user's cookie jar is empty. If the cookie jar is not empty, | 969 // well when the user's cookie jar is empty. If the cookie jar is not empty, |
| 970 // the authentication states in the browser context and the user's profile | 970 // the authentication states in the browser context and the user's profile |
| 971 // must be merged using /MergeSession instead. Authentication cookies set by | 971 // must be merged using /MergeSession instead. Authentication cookies set by |
| 972 // a SAML IdP will also be transferred when the user's cookie jar is not | 972 // a SAML IdP will also be transferred when the user's cookie jar is not |
| 973 // empty if |transfer_saml_auth_cookies_on_subsequent_login| is true. | 973 // empty if |transfer_saml_auth_cookies_on_subsequent_login| is true. |
| 974 const bool transfer_auth_cookies_and_channel_ids_on_first_login = | 974 const bool transfer_auth_cookies_and_channel_ids_on_first_login = |
| 975 has_auth_cookies_; | 975 has_auth_cookies_; |
| 976 ProfileAuthData::Transfer( | 976 ProfileAuthData::Transfer( |
| 977 authenticator_->authentication_context(), | 977 GetAuthRequestContext(), |
| 978 profile, | 978 profile->GetRequestContext(), |
| 979 transfer_auth_cookies_and_channel_ids_on_first_login, | 979 transfer_auth_cookies_and_channel_ids_on_first_login, |
| 980 transfer_saml_auth_cookies_on_subsequent_login, | 980 transfer_saml_auth_cookies_on_subsequent_login, |
| 981 base::Bind(&UserSessionManager::CompleteProfileCreateAfterAuthTransfer, | 981 base::Bind(&UserSessionManager::CompleteProfileCreateAfterAuthTransfer, |
| 982 AsWeakPtr(), | 982 AsWeakPtr(), |
| 983 profile)); | 983 profile)); |
| 984 return; | 984 return; |
| 985 } | 985 } |
| 986 | 986 |
| 987 FinalizePrepareProfile(profile); | 987 FinalizePrepareProfile(profile); |
| 988 } | 988 } |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1197 } | 1197 } |
| 1198 | 1198 |
| 1199 exit_after_session_restore_ = false; | 1199 exit_after_session_restore_ = false; |
| 1200 | 1200 |
| 1201 // Remove legacy OAuth1 token if we have one. If it's valid, we should already | 1201 // Remove legacy OAuth1 token if we have one. If it's valid, we should already |
| 1202 // have OAuth2 refresh token in OAuth2TokenService that could be used to | 1202 // have OAuth2 refresh token in OAuth2TokenService that could be used to |
| 1203 // retrieve all other tokens and user_context. | 1203 // retrieve all other tokens and user_context. |
| 1204 OAuth2LoginManager* login_manager = | 1204 OAuth2LoginManager* login_manager = |
| 1205 OAuth2LoginManagerFactory::GetInstance()->GetForProfile(profile); | 1205 OAuth2LoginManagerFactory::GetInstance()->GetForProfile(profile); |
| 1206 login_manager->AddObserver(this); | 1206 login_manager->AddObserver(this); |
| 1207 net::URLRequestContextGetter* auth_request_context = NULL; | |
| 1208 | 1207 |
| 1209 if (StartupUtils::IsWebviewSigninEnabled()) { | 1208 login_manager->RestoreSession( |
| 1210 // Webview uses different partition storage than iframe. We need to get | 1209 GetAuthRequestContext(), session_restore_strategy_, |
| 1211 // cookies from the right storage for url request to get auth token into | 1210 user_context_.GetRefreshToken(), user_context_.GetAuthCode()); |
| 1212 // session. | |
| 1213 GURL oobe_url(chrome::kChromeUIOobeURL); | |
| 1214 GURL guest_url(std::string(content::kGuestScheme) + | |
| 1215 url::kStandardSchemeSeparator + oobe_url.GetContent()); | |
| 1216 content::StoragePartition* partition = | |
| 1217 content::BrowserContext::GetStoragePartitionForSite( | |
| 1218 ProfileHelper::GetSigninProfile(), guest_url); | |
| 1219 auth_request_context = partition->GetURLRequestContext(); | |
| 1220 } else if (authenticator_.get() && authenticator_->authentication_context()) { | |
| 1221 auth_request_context = | |
| 1222 authenticator_->authentication_context()->GetRequestContext(); | |
| 1223 } | |
| 1224 | |
| 1225 login_manager->RestoreSession(auth_request_context, session_restore_strategy_, | |
| 1226 user_context_.GetRefreshToken(), | |
| 1227 user_context_.GetAuthCode()); | |
| 1228 } | 1211 } |
| 1229 | 1212 |
| 1230 void UserSessionManager::InitRlzImpl(Profile* profile, bool disabled) { | 1213 void UserSessionManager::InitRlzImpl(Profile* profile, bool disabled) { |
| 1231 #if defined(ENABLE_RLZ) | 1214 #if defined(ENABLE_RLZ) |
| 1232 PrefService* local_state = g_browser_process->local_state(); | 1215 PrefService* local_state = g_browser_process->local_state(); |
| 1233 if (disabled) { | 1216 if (disabled) { |
| 1234 // Empty brand code means an organic install (no RLZ pings are sent). | 1217 // Empty brand code means an organic install (no RLZ pings are sent). |
| 1235 google_brand::chromeos::ClearBrandForCurrentSession(); | 1218 google_brand::chromeos::ClearBrandForCurrentSession(); |
| 1236 } | 1219 } |
| 1237 if (disabled != local_state->GetBoolean(prefs::kRLZDisabled)) { | 1220 if (disabled != local_state->GetBoolean(prefs::kRLZDisabled)) { |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1404 device_list = &empty_list; | 1387 device_list = &empty_list; |
| 1405 | 1388 |
| 1406 EasyUnlockKeyManager* key_manager = GetEasyUnlockKeyManager(); | 1389 EasyUnlockKeyManager* key_manager = GetEasyUnlockKeyManager(); |
| 1407 running_easy_unlock_key_ops_ = true; | 1390 running_easy_unlock_key_ops_ = true; |
| 1408 key_manager->RefreshKeys( | 1391 key_manager->RefreshKeys( |
| 1409 user_context, *device_list, | 1392 user_context, *device_list, |
| 1410 base::Bind(&UserSessionManager::OnEasyUnlockKeyOpsFinished, AsWeakPtr(), | 1393 base::Bind(&UserSessionManager::OnEasyUnlockKeyOpsFinished, AsWeakPtr(), |
| 1411 user_context.GetUserID())); | 1394 user_context.GetUserID())); |
| 1412 } | 1395 } |
| 1413 | 1396 |
| 1397 net::URLRequestContextGetter* |
| 1398 UserSessionManager::GetAuthRequestContext() const { |
| 1399 net::URLRequestContextGetter* auth_request_context = NULL; |
| 1400 |
| 1401 if (StartupUtils::IsWebviewSigninEnabled()) { |
| 1402 // Webview uses different partition storage than iframe. We need to get |
| 1403 // cookies from the right storage for url request to get auth token into |
| 1404 // session. |
| 1405 auth_request_context = login::GetSigninPartition()->GetURLRequestContext(); |
| 1406 } else if (authenticator_.get() && authenticator_->authentication_context()) { |
| 1407 auth_request_context = |
| 1408 authenticator_->authentication_context()->GetRequestContext(); |
| 1409 } |
| 1410 return auth_request_context; |
| 1411 } |
| 1412 |
| 1414 void UserSessionManager::AttemptRestart(Profile* profile) { | 1413 void UserSessionManager::AttemptRestart(Profile* profile) { |
| 1415 if (CheckEasyUnlockKeyOps(base::Bind(&UserSessionManager::AttemptRestart, | 1414 if (CheckEasyUnlockKeyOps(base::Bind(&UserSessionManager::AttemptRestart, |
| 1416 AsWeakPtr(), profile))) { | 1415 AsWeakPtr(), profile))) { |
| 1417 return; | 1416 return; |
| 1418 } | 1417 } |
| 1419 | 1418 |
| 1420 if (session_restore_strategy_ != | 1419 if (session_restore_strategy_ != |
| 1421 OAuth2LoginManager::RESTORE_FROM_COOKIE_JAR) { | 1420 OAuth2LoginManager::RESTORE_FROM_COOKIE_JAR) { |
| 1422 chrome::AttemptRestart(); | 1421 chrome::AttemptRestart(); |
| 1423 return; | 1422 return; |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1572 default_ime_states_.erase(profile); | 1571 default_ime_states_.erase(profile); |
| 1573 } | 1572 } |
| 1574 | 1573 |
| 1575 void UserSessionManager::InjectStubUserContext( | 1574 void UserSessionManager::InjectStubUserContext( |
| 1576 const UserContext& user_context) { | 1575 const UserContext& user_context) { |
| 1577 injected_user_context_.reset(new UserContext(user_context)); | 1576 injected_user_context_.reset(new UserContext(user_context)); |
| 1578 authenticator_ = NULL; | 1577 authenticator_ = NULL; |
| 1579 } | 1578 } |
| 1580 | 1579 |
| 1581 } // namespace chromeos | 1580 } // namespace chromeos |
| OLD | NEW |