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

Side by Side Diff: chrome/browser/chromeos/arc/arc_auth_service.cc

Issue 2504583002: Merge provisioning success/error handling. (Closed)
Patch Set: Address comments. Created 4 years, 1 month 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
OLDNEW
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 "ash/common/shelf/shelf_delegate.h" 9 #include "ash/common/shelf/shelf_delegate.h"
10 #include "ash/common/wm_shell.h" 10 #include "ash/common/wm_shell.h"
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 280
281 void ArcAuthService::OnInstanceReady() { 281 void ArcAuthService::OnInstanceReady() {
282 auto* instance = arc_bridge_service()->auth()->GetInstanceForMethod("Init"); 282 auto* instance = arc_bridge_service()->auth()->GetInstanceForMethod("Init");
283 DCHECK(instance); 283 DCHECK(instance);
284 instance->Init(binding_.CreateInterfacePtrAndBind()); 284 instance->Init(binding_.CreateInterfacePtrAndBind());
285 } 285 }
286 286
287 void ArcAuthService::OnBridgeStopped(ArcBridgeService::StopReason reason) { 287 void ArcAuthService::OnBridgeStopped(ArcBridgeService::StopReason reason) {
288 // TODO(crbug.com/625923): Use |reason| to report more detailed errors. 288 // TODO(crbug.com/625923): Use |reason| to report more detailed errors.
289 if (arc_sign_in_timer_.IsRunning()) { 289 if (arc_sign_in_timer_.IsRunning()) {
290 OnSignInFailedInternal(ProvisioningResult::ARC_STOPPED); 290 OnProvisioningFinished(ProvisioningResult::ARC_STOPPED);
291 } 291 }
292 292
293 if (clear_required_) { 293 if (clear_required_) {
294 // This should be always true, but just in case as this is looked at 294 // This should be always true, but just in case as this is looked at
295 // inside RemoveArcData() at first. 295 // inside RemoveArcData() at first.
296 DCHECK(arc_bridge_service()->stopped()); 296 DCHECK(arc_bridge_service()->stopped());
297 RemoveArcData(); 297 RemoveArcData();
298 } else { 298 } else {
299 // To support special "Stop and enable ARC" procedure for enterprise, 299 // To support special "Stop and enable ARC" procedure for enterprise,
300 // here call OnArcDataRemoved(true) as if the data removal is successfully 300 // here call OnArcDataRemoved(true) as if the data removal is successfully
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 436 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
437 DCHECK(state_ == State::ACTIVE); 437 DCHECK(state_ == State::ACTIVE);
438 DCHECK(IsAuthCodeRequest()); 438 DCHECK(IsAuthCodeRequest());
439 DCHECK(!IsArcKioskMode()); 439 DCHECK(!IsArcKioskMode());
440 context_->PrepareContext(); 440 context_->PrepareContext();
441 } 441 }
442 442
443 void ArcAuthService::OnSignInComplete() { 443 void ArcAuthService::OnSignInComplete() {
444 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 444 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
445 DCHECK_EQ(state_, State::ACTIVE); 445 DCHECK_EQ(state_, State::ACTIVE);
446 446 OnProvisioningFinished(ProvisioningResult::SUCCESS);
447 if (!sign_in_time_.is_null()) {
448 arc_sign_in_timer_.Stop();
449 UpdateProvisioningTiming(base::Time::Now() - sign_in_time_, true,
450 policy_util::IsAccountManaged(profile_));
451 UpdateProvisioningResultUMA(ProvisioningResult::SUCCESS,
452 policy_util::IsAccountManaged(profile_));
453 }
454
455 if (support_host_)
456 support_host_->Close();
457
458 if (profile_->GetPrefs()->GetBoolean(prefs::kArcSignedIn))
459 return;
460
461 profile_->GetPrefs()->SetBoolean(prefs::kArcSignedIn, true);
462 if (!IsOptInVerificationDisabled()) {
463 playstore_launcher_.reset(
464 new ArcAppLauncher(profile_, kPlayStoreAppId, true));
465 }
466
467 for (auto& observer : observer_list_)
468 observer.OnInitialStart();
469 } 447 }
470 448
471 void ArcAuthService::OnSignInFailed(mojom::ArcSignInFailureReason reason) { 449 void ArcAuthService::OnSignInFailed(mojom::ArcSignInFailureReason reason) {
472 OnSignInFailedInternal( 450 OnProvisioningFinished(
473 ConvertArcSignInFailureReasonToProvisioningResult(reason)); 451 ConvertArcSignInFailureReasonToProvisioningResult(reason));
474 } 452 }
475 453
476 void ArcAuthService::OnSignInFailedInternal(ProvisioningResult result) { 454 void ArcAuthService::OnProvisioningFinished(ProvisioningResult result) {
477 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 455 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
478 DCHECK_EQ(state_, State::ACTIVE); 456 DCHECK_EQ(state_, State::ACTIVE);
479 457
480 if (!sign_in_time_.is_null()) { 458 if (result == ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR) {
459 // For backwards compatibility, use NETWORK_ERROR for
460 // CHROME_SERVER_COMMUNICATION_ERROR case.
461 UpdateOptInCancelUMA(OptInCancelReason::NETWORK_ERROR);
462 } else if (!sign_in_time_.is_null()) {
481 arc_sign_in_timer_.Stop(); 463 arc_sign_in_timer_.Stop();
482 464
483 UpdateProvisioningTiming(base::Time::Now() - sign_in_time_, false, 465 UpdateProvisioningTiming(base::Time::Now() - sign_in_time_,
466 result == ProvisioningResult::SUCCESS,
484 policy_util::IsAccountManaged(profile_)); 467 policy_util::IsAccountManaged(profile_));
485 UpdateOptInCancelUMA(OptInCancelReason::CLOUD_PROVISION_FLOW_FAIL);
486 UpdateProvisioningResultUMA(result, 468 UpdateProvisioningResultUMA(result,
487 policy_util::IsAccountManaged(profile_)); 469 policy_util::IsAccountManaged(profile_));
470 if (result != ProvisioningResult::SUCCESS)
471 UpdateOptInCancelUMA(OptInCancelReason::CLOUD_PROVISION_FLOW_FAIL);
472 }
473
474 if (result == ProvisioningResult::SUCCESS) {
475 if (support_host_)
476 support_host_->Close();
477
478 if (profile_->GetPrefs()->GetBoolean(prefs::kArcSignedIn))
479 return;
480
481 profile_->GetPrefs()->SetBoolean(prefs::kArcSignedIn, true);
482 if (!IsOptInVerificationDisabled()) {
483 playstore_launcher_.reset(
484 new ArcAppLauncher(profile_, kPlayStoreAppId, true));
485 }
486
487 for (auto& observer : observer_list_)
488 observer.OnInitialStart();
489 return;
488 } 490 }
489 491
490 ArcSupportHost::Error error; 492 ArcSupportHost::Error error;
491 switch (result) { 493 switch (result) {
492 case ProvisioningResult::GMS_NETWORK_ERROR: 494 case ProvisioningResult::GMS_NETWORK_ERROR:
493 error = ArcSupportHost::Error::SIGN_IN_NETWORK_ERROR; 495 error = ArcSupportHost::Error::SIGN_IN_NETWORK_ERROR;
494 break; 496 break;
495 case ProvisioningResult::GMS_SERVICE_UNAVAILABLE: 497 case ProvisioningResult::GMS_SERVICE_UNAVAILABLE:
496 case ProvisioningResult::GMS_SIGN_IN_FAILED: 498 case ProvisioningResult::GMS_SIGN_IN_FAILED:
497 case ProvisioningResult::GMS_SIGN_IN_TIMEOUT: 499 case ProvisioningResult::GMS_SIGN_IN_TIMEOUT:
498 case ProvisioningResult::GMS_SIGN_IN_INTERNAL_ERROR: 500 case ProvisioningResult::GMS_SIGN_IN_INTERNAL_ERROR:
499 error = ArcSupportHost::Error::SIGN_IN_SERVICE_UNAVAILABLE_ERROR; 501 error = ArcSupportHost::Error::SIGN_IN_SERVICE_UNAVAILABLE_ERROR;
500 break; 502 break;
501 case ProvisioningResult::GMS_BAD_AUTHENTICATION: 503 case ProvisioningResult::GMS_BAD_AUTHENTICATION:
502 error = ArcSupportHost::Error::SIGN_IN_BAD_AUTHENTICATION_ERROR; 504 error = ArcSupportHost::Error::SIGN_IN_BAD_AUTHENTICATION_ERROR;
503 break; 505 break;
504 case ProvisioningResult::DEVICE_CHECK_IN_FAILED: 506 case ProvisioningResult::DEVICE_CHECK_IN_FAILED:
505 case ProvisioningResult::DEVICE_CHECK_IN_TIMEOUT: 507 case ProvisioningResult::DEVICE_CHECK_IN_TIMEOUT:
506 case ProvisioningResult::DEVICE_CHECK_IN_INTERNAL_ERROR: 508 case ProvisioningResult::DEVICE_CHECK_IN_INTERNAL_ERROR:
507 error = ArcSupportHost::Error::SIGN_IN_GMS_NOT_AVAILABLE_ERROR; 509 error = ArcSupportHost::Error::SIGN_IN_GMS_NOT_AVAILABLE_ERROR;
508 break; 510 break;
509 case ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED: 511 case ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED:
510 case ProvisioningResult::CLOUD_PROVISION_FLOW_TIMEOUT: 512 case ProvisioningResult::CLOUD_PROVISION_FLOW_TIMEOUT:
511 case ProvisioningResult::CLOUD_PROVISION_FLOW_INTERNAL_ERROR: 513 case ProvisioningResult::CLOUD_PROVISION_FLOW_INTERNAL_ERROR:
512 error = ArcSupportHost::Error::SIGN_IN_CLOUD_PROVISION_FLOW_FAIL_ERROR; 514 error = ArcSupportHost::Error::SIGN_IN_CLOUD_PROVISION_FLOW_FAIL_ERROR;
513 break; 515 break;
516 case ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR:
517 error = ArcSupportHost::Error::SERVER_COMMUNICATION_ERROR;
518 break;
514 default: 519 default:
515 error = ArcSupportHost::Error::SIGN_IN_UNKNOWN_ERROR; 520 error = ArcSupportHost::Error::SIGN_IN_UNKNOWN_ERROR;
516 break; 521 break;
517 } 522 }
518 523
519 if (result == ProvisioningResult::ARC_STOPPED) { 524 if (result == ProvisioningResult::ARC_STOPPED ||
525 result == ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR) {
520 if (profile_->GetPrefs()->HasPrefPath(prefs::kArcSignedIn)) 526 if (profile_->GetPrefs()->HasPrefPath(prefs::kArcSignedIn))
521 profile_->GetPrefs()->SetBoolean(prefs::kArcSignedIn, false); 527 profile_->GetPrefs()->SetBoolean(prefs::kArcSignedIn, false);
522 ShutdownBridge(); 528 ShutdownBridge();
523 if (support_host_) 529 if (support_host_)
524 support_host_->ShowError(error, false); 530 support_host_->ShowError(error, false);
525 return; 531 return;
526 } 532 }
527 533
528 if (result == ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED || 534 if (result == ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED ||
529 result == ProvisioningResult::CLOUD_PROVISION_FLOW_TIMEOUT || 535 result == ProvisioningResult::CLOUD_PROVISION_FLOW_TIMEOUT ||
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 DCHECK(!auth_code.empty()); 796 DCHECK(!auth_code.empty());
791 797
792 account_info_notifier_->Notify(!IsOptInVerificationDisabled(), auth_code, 798 account_info_notifier_->Notify(!IsOptInVerificationDisabled(), auth_code,
793 GetAccountType(), 799 GetAccountType(),
794 policy_util::IsAccountManaged(profile_)); 800 policy_util::IsAccountManaged(profile_));
795 account_info_notifier_.reset(); 801 account_info_notifier_.reset();
796 } 802 }
797 803
798 void ArcAuthService::OnArcSignInTimeout() { 804 void ArcAuthService::OnArcSignInTimeout() {
799 LOG(ERROR) << "Timed out waiting for first sign in."; 805 LOG(ERROR) << "Timed out waiting for first sign in.";
800 OnSignInFailedInternal(ProvisioningResult::OVERALL_SIGN_IN_TIMEOUT); 806 OnProvisioningFinished(ProvisioningResult::OVERALL_SIGN_IN_TIMEOUT);
801 } 807 }
802 808
803 void ArcAuthService::CancelAuthCode() { 809 void ArcAuthService::CancelAuthCode() {
804 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 810 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
805 811
806 if (state_ == State::NOT_INITIALIZED) { 812 if (state_ == State::NOT_INITIALIZED) {
807 NOTREACHED(); 813 NOTREACHED();
808 return; 814 return;
809 } 815 }
810 816
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 } 892 }
887 return; 893 return;
888 } 894 }
889 895
890 SetState(State::SHOWING_TERMS_OF_SERVICE); 896 SetState(State::SHOWING_TERMS_OF_SERVICE);
891 if (support_host_) 897 if (support_host_)
892 support_host_->ShowTermsOfService(); 898 support_host_->ShowTermsOfService();
893 } 899 }
894 900
895 void ArcAuthService::OnPrepareContextFailed() { 901 void ArcAuthService::OnPrepareContextFailed() {
896 ShutdownBridge(); 902 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
897 if (support_host_) { 903 OnProvisioningFinished(ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR);
898 support_host_->ShowError(ArcSupportHost::Error::SERVER_COMMUNICATION_ERROR,
899 false);
900 }
901 UpdateOptInCancelUMA(OptInCancelReason::NETWORK_ERROR);
902 } 904 }
903 905
904 void ArcAuthService::OnAuthCodeSuccess(const std::string& auth_code) { 906 void ArcAuthService::OnAuthCodeSuccess(const std::string& auth_code) {
905 OnAuthCodeObtained(auth_code); 907 OnAuthCodeObtained(auth_code);
906 } 908 }
907 909
908 void ArcAuthService::OnAuthCodeFailed() { 910 void ArcAuthService::OnAuthCodeFailed() {
909 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 911 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
910 ShutdownBridge(); 912 OnProvisioningFinished(ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR);
911 if (support_host_) {
912 support_host_->ShowError(ArcSupportHost::Error::SERVER_COMMUNICATION_ERROR,
913 false);
914 }
915 UpdateOptInCancelUMA(OptInCancelReason::NETWORK_ERROR);
916 } 913 }
917 914
918 void ArcAuthService::StartArcAndroidManagementCheck() { 915 void ArcAuthService::StartArcAndroidManagementCheck() {
919 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 916 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
920 DCHECK(arc_bridge_service()->stopped()); 917 DCHECK(arc_bridge_service()->stopped());
921 DCHECK(state_ == State::SHOWING_TERMS_OF_SERVICE || 918 DCHECK(state_ == State::SHOWING_TERMS_OF_SERVICE ||
922 state_ == State::CHECKING_ANDROID_MANAGEMENT); 919 state_ == State::CHECKING_ANDROID_MANAGEMENT);
923 SetState(State::CHECKING_ANDROID_MANAGEMENT); 920 SetState(State::CHECKING_ANDROID_MANAGEMENT);
924 921
925 android_management_checker_.reset(new ArcAndroidManagementChecker( 922 android_management_checker_.reset(new ArcAndroidManagementChecker(
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1102 return os << "ACTIVE"; 1099 return os << "ACTIVE";
1103 } 1100 }
1104 1101
1105 // Some compiler reports an error even if all values of an enum-class are 1102 // Some compiler reports an error even if all values of an enum-class are
1106 // covered indivisually in a switch statement. 1103 // covered indivisually in a switch statement.
1107 NOTREACHED(); 1104 NOTREACHED();
1108 return os; 1105 return os;
1109 } 1106 }
1110 1107
1111 } // namespace arc 1108 } // namespace arc
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/arc/arc_auth_service.h ('k') | chrome/browser/chromeos/arc/arc_optin_uma.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698