| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/arc/arc_auth_service.h" | 5 #include "chrome/browser/chromeos/arc/arc_auth_service.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 const GetAuthCodeAndAccountTypeDeprecatedCallback& auth_account_callback) | 83 const GetAuthCodeAndAccountTypeDeprecatedCallback& auth_account_callback) |
| 84 : callback_type_(CallbackType::AUTH_CODE_AND_ACCOUNT), | 84 : callback_type_(CallbackType::AUTH_CODE_AND_ACCOUNT), |
| 85 auth_account_callback_(auth_account_callback) {} | 85 auth_account_callback_(auth_account_callback) {} |
| 86 | 86 |
| 87 explicit AccountInfoNotifier(const AccountInfoCallback& account_info_callback) | 87 explicit AccountInfoNotifier(const AccountInfoCallback& account_info_callback) |
| 88 : callback_type_(CallbackType::ACCOUNT_INFO), | 88 : callback_type_(CallbackType::ACCOUNT_INFO), |
| 89 account_info_callback_(account_info_callback) {} | 89 account_info_callback_(account_info_callback) {} |
| 90 | 90 |
| 91 void Notify(bool is_enforced, | 91 void Notify(bool is_enforced, |
| 92 const std::string& auth_info, | 92 const std::string& auth_info, |
| 93 const std::string& account_name, |
| 93 mojom::ChromeAccountType account_type, | 94 mojom::ChromeAccountType account_type, |
| 94 bool is_managed) { | 95 bool is_managed) { |
| 95 switch (callback_type_) { | 96 switch (callback_type_) { |
| 96 case CallbackType::AUTH_CODE: | 97 case CallbackType::AUTH_CODE: |
| 97 DCHECK(!auth_callback_.is_null()); | 98 DCHECK(!auth_callback_.is_null()); |
| 98 auth_callback_.Run(auth_info, is_enforced); | 99 auth_callback_.Run(auth_info, is_enforced); |
| 99 break; | 100 break; |
| 100 case CallbackType::AUTH_CODE_AND_ACCOUNT: | 101 case CallbackType::AUTH_CODE_AND_ACCOUNT: |
| 101 DCHECK(!auth_account_callback_.is_null()); | 102 DCHECK(!auth_account_callback_.is_null()); |
| 102 auth_account_callback_.Run(auth_info, is_enforced, account_type); | 103 auth_account_callback_.Run(auth_info, is_enforced, account_type); |
| 103 break; | 104 break; |
| 104 case CallbackType::ACCOUNT_INFO: | 105 case CallbackType::ACCOUNT_INFO: |
| 105 DCHECK(!account_info_callback_.is_null()); | 106 DCHECK(!account_info_callback_.is_null()); |
| 106 mojom::AccountInfoPtr account_info = mojom::AccountInfo::New(); | 107 mojom::AccountInfoPtr account_info = mojom::AccountInfo::New(); |
| 108 account_info->account_name = account_name; |
| 107 if (account_type == | 109 if (account_type == |
| 108 mojom::ChromeAccountType::ACTIVE_DIRECTORY_ACCOUNT) { | 110 mojom::ChromeAccountType::ACTIVE_DIRECTORY_ACCOUNT) { |
| 109 account_info->enrollment_token = auth_info; | 111 account_info->enrollment_token = auth_info; |
| 110 } else { | 112 } else { |
| 111 if (!is_enforced) | 113 if (!is_enforced) |
| 112 account_info->auth_code = base::nullopt; | 114 account_info->auth_code = base::nullopt; |
| 113 else | 115 else |
| 114 account_info->auth_code = auth_info; | 116 account_info->auth_code = auth_info; |
| 115 } | 117 } |
| 116 account_info->account_type = account_type; | 118 account_info->account_type = account_type; |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 UpdateAuthCheckinAttempts(value); | 190 UpdateAuthCheckinAttempts(value); |
| 189 break; | 191 break; |
| 190 case mojom::MetricsType::CHECKIN_TIME_MILLISECONDS: | 192 case mojom::MetricsType::CHECKIN_TIME_MILLISECONDS: |
| 191 UpdateAuthTiming("ArcAuth.CheckinTime", | 193 UpdateAuthTiming("ArcAuth.CheckinTime", |
| 192 base::TimeDelta::FromMilliseconds(value)); | 194 base::TimeDelta::FromMilliseconds(value)); |
| 193 break; | 195 break; |
| 194 case mojom::MetricsType::SIGNIN_TIME_MILLISECONDS: | 196 case mojom::MetricsType::SIGNIN_TIME_MILLISECONDS: |
| 195 UpdateAuthTiming("ArcAuth.SignInTime", | 197 UpdateAuthTiming("ArcAuth.SignInTime", |
| 196 base::TimeDelta::FromMilliseconds(value)); | 198 base::TimeDelta::FromMilliseconds(value)); |
| 197 break; | 199 break; |
| 200 case mojom::MetricsType::ACCOUNT_CHECK_MILLISECONDS: |
| 201 UpdateAuthTiming("ArcAuth.AccountCheckTime", |
| 202 base::TimeDelta::FromMilliseconds(value)); |
| 203 break; |
| 198 } | 204 } |
| 199 } | 205 } |
| 200 | 206 |
| 207 void ArcAuthService::ReportAccountCheckStatus( |
| 208 mojom::AccountCheckStatus status) { |
| 209 UpdateAuthAccountCheckStatus(status); |
| 210 } |
| 211 |
| 201 void ArcAuthService::OnAccountInfoReady(mojom::AccountInfoPtr account_info) { | 212 void ArcAuthService::OnAccountInfoReady(mojom::AccountInfoPtr account_info) { |
| 202 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 213 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 203 auto* instance = ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service()->auth(), | 214 auto* instance = ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service()->auth(), |
| 204 OnAccountInfoReady); | 215 OnAccountInfoReady); |
| 205 DCHECK(instance); | 216 DCHECK(instance); |
| 206 instance->OnAccountInfoReady(std::move(account_info)); | 217 instance->OnAccountInfoReady(std::move(account_info)); |
| 207 } | 218 } |
| 208 | 219 |
| 209 void ArcAuthService::GetAuthCodeDeprecated0( | 220 void ArcAuthService::GetAuthCodeDeprecated0( |
| 210 const GetAuthCodeDeprecated0Callback& callback) { | 221 const GetAuthCodeDeprecated0Callback& callback) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 236 | 247 |
| 237 void ArcAuthService::RequestAccountInfoInternal( | 248 void ArcAuthService::RequestAccountInfoInternal( |
| 238 std::unique_ptr<AccountInfoNotifier> notifier) { | 249 std::unique_ptr<AccountInfoNotifier> notifier) { |
| 239 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 250 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 240 // No other auth code-related operation may be in progress. | 251 // No other auth code-related operation may be in progress. |
| 241 DCHECK(!notifier_); | 252 DCHECK(!notifier_); |
| 242 DCHECK(!fetcher_); | 253 DCHECK(!fetcher_); |
| 243 | 254 |
| 244 if (IsArcOptInVerificationDisabled()) { | 255 if (IsArcOptInVerificationDisabled()) { |
| 245 notifier->Notify( | 256 notifier->Notify( |
| 246 false /* = is_enforced */, std::string(), GetAccountType(), | 257 false /* = is_enforced */, std::string() /* auth_info */, |
| 258 std::string() /* auth_name */, GetAccountType(), |
| 247 policy_util::IsAccountManaged(ArcSessionManager::Get()->profile())); | 259 policy_util::IsAccountManaged(ArcSessionManager::Get()->profile())); |
| 248 return; | 260 return; |
| 249 } | 261 } |
| 250 | 262 |
| 251 // Hereafter asynchronous operation. Remember the notifier. | 263 // Hereafter asynchronous operation. Remember the notifier. |
| 252 notifier_ = std::move(notifier); | 264 notifier_ = std::move(notifier); |
| 253 | 265 |
| 254 Profile* profile = ArcSessionManager::Get()->profile(); | 266 Profile* profile = ArcSessionManager::Get()->profile(); |
| 255 const user_manager::User* user = nullptr; | 267 const user_manager::User* user = nullptr; |
| 256 if (profile) | 268 if (profile) |
| 257 user = chromeos::ProfileHelper::Get()->GetUserByProfile(profile); | 269 user = chromeos::ProfileHelper::Get()->GetUserByProfile(profile); |
| 270 |
| 258 if (user && user->IsActiveDirectoryUser()) { | 271 if (user && user->IsActiveDirectoryUser()) { |
| 259 // For Active Directory enrolled devices, we get an enrollment token for a | 272 // For Active Directory enrolled devices, we get an enrollment token for a |
| 260 // managed Google Play account from DMServer. | 273 // managed Google Play account from DMServer. |
| 261 fetcher_ = base::MakeUnique<ArcActiveDirectoryEnrollmentTokenFetcher>(); | 274 fetcher_ = base::MakeUnique<ArcActiveDirectoryEnrollmentTokenFetcher>(); |
| 262 fetcher_->Fetch(base::Bind(&ArcAuthService::OnEnrollmentTokenFetched, | 275 fetcher_->Fetch(base::Bind(&ArcAuthService::OnEnrollmentTokenFetched, |
| 263 weak_ptr_factory_.GetWeakPtr())); | 276 weak_ptr_factory_.GetWeakPtr())); |
| 264 return; | 277 return; |
| 265 } | 278 } |
| 266 // For non-AD enrolled devices an auth code is fetched. | 279 // For non-AD enrolled devices an auth code is fetched. |
| 267 if (IsArcKioskMode()) { | 280 if (IsArcKioskMode()) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 290 | 303 |
| 291 void ArcAuthService::OnEnrollmentTokenFetched( | 304 void ArcAuthService::OnEnrollmentTokenFetched( |
| 292 ArcAuthInfoFetcher::Status status, | 305 ArcAuthInfoFetcher::Status status, |
| 293 const std::string& enrollment_token) { | 306 const std::string& enrollment_token) { |
| 294 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 307 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 295 fetcher_.reset(); | 308 fetcher_.reset(); |
| 296 | 309 |
| 297 switch (status) { | 310 switch (status) { |
| 298 case ArcAuthInfoFetcher::Status::SUCCESS: | 311 case ArcAuthInfoFetcher::Status::SUCCESS: |
| 299 notifier_->Notify(true /*is_enforced*/, enrollment_token, | 312 notifier_->Notify(true /*is_enforced*/, enrollment_token, |
| 313 std::string() /* account_name */, |
| 300 mojom::ChromeAccountType::ACTIVE_DIRECTORY_ACCOUNT, | 314 mojom::ChromeAccountType::ACTIVE_DIRECTORY_ACCOUNT, |
| 301 true); | 315 true); |
| 302 notifier_.reset(); | 316 notifier_.reset(); |
| 303 return; | 317 return; |
| 304 case ArcAuthInfoFetcher::Status::FAILURE: | 318 case ArcAuthInfoFetcher::Status::FAILURE: |
| 305 ArcSessionManager::Get()->OnProvisioningFinished( | 319 ArcSessionManager::Get()->OnProvisioningFinished( |
| 306 ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR); | 320 ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR); |
| 307 return; | 321 return; |
| 308 case ArcAuthInfoFetcher::Status::ARC_DISABLED: | 322 case ArcAuthInfoFetcher::Status::ARC_DISABLED: |
| 309 ArcSessionManager::Get()->OnProvisioningFinished( | 323 ArcSessionManager::Get()->OnProvisioningFinished( |
| 310 ProvisioningResult::ARC_DISABLED); | 324 ProvisioningResult::ARC_DISABLED); |
| 311 return; | 325 return; |
| 312 } | 326 } |
| 313 } | 327 } |
| 314 | 328 |
| 315 void ArcAuthService::OnAuthCodeFetched(ArcAuthInfoFetcher::Status status, | 329 void ArcAuthService::OnAuthCodeFetched(ArcAuthInfoFetcher::Status status, |
| 316 const std::string& auth_code) { | 330 const std::string& auth_code) { |
| 317 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 331 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 318 fetcher_.reset(); | 332 fetcher_.reset(); |
| 319 | 333 |
| 320 if (status != ArcAuthInfoFetcher::Status::SUCCESS) { | 334 if (status != ArcAuthInfoFetcher::Status::SUCCESS) { |
| 321 ArcSessionManager::Get()->OnProvisioningFinished( | 335 ArcSessionManager::Get()->OnProvisioningFinished( |
| 322 ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR); | 336 ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR); |
| 323 return; | 337 return; |
| 324 } | 338 } |
| 325 | 339 |
| 326 notifier_->Notify( | 340 notifier_->Notify( |
| 327 !IsArcOptInVerificationDisabled(), auth_code, GetAccountType(), | 341 !IsArcOptInVerificationDisabled(), auth_code, |
| 342 ArcSessionManager::Get()->auth_context()->full_account_id(), |
| 343 GetAccountType(), |
| 328 policy_util::IsAccountManaged(ArcSessionManager::Get()->profile())); | 344 policy_util::IsAccountManaged(ArcSessionManager::Get()->profile())); |
| 329 notifier_.reset(); | 345 notifier_.reset(); |
| 330 } | 346 } |
| 331 | 347 |
| 332 } // namespace arc | 348 } // namespace arc |
| OLD | NEW |