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

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

Issue 2504583002: Merge provisioning success/error handling. (Closed)
Patch Set: 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 backword compatibility, use NETWORK_ERROR for
Luis Héctor Chávez 2016/11/15 23:40:50 nit: s/backword/backwards/
hidehiko 2016/11/17 11:04:54 Done.
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) {
Luis Héctor Chávez 2016/11/15 23:40:50 nit: you can elide braces
hidehiko 2016/11/17 11:04:54 Done.
471 UpdateOptInCancelUMA(OptInCancelReason::CLOUD_PROVISION_FLOW_FAIL);
472 }
473 }
474
475 if (result == ProvisioningResult::SUCCESS) {
476 if (support_host_)
477 support_host_->Close();
478
479 if (profile_->GetPrefs()->GetBoolean(prefs::kArcSignedIn))
480 return;
481
482 profile_->GetPrefs()->SetBoolean(prefs::kArcSignedIn, true);
483 if (!IsOptInVerificationDisabled()) {
484 playstore_launcher_.reset(
485 new ArcAppLauncher(profile_, kPlayStoreAppId, true));
486 }
487
488 for (auto& observer : observer_list_)
489 observer.OnInitialStart();
490 return;
488 } 491 }
489 492
490 ArcSupportHost::Error error; 493 ArcSupportHost::Error error;
491 switch (result) { 494 switch (result) {
492 case ProvisioningResult::GMS_NETWORK_ERROR: 495 case ProvisioningResult::GMS_NETWORK_ERROR:
493 error = ArcSupportHost::Error::SIGN_IN_NETWORK_ERROR; 496 error = ArcSupportHost::Error::SIGN_IN_NETWORK_ERROR;
494 break; 497 break;
495 case ProvisioningResult::GMS_SERVICE_UNAVAILABLE: 498 case ProvisioningResult::GMS_SERVICE_UNAVAILABLE:
496 case ProvisioningResult::GMS_SIGN_IN_FAILED: 499 case ProvisioningResult::GMS_SIGN_IN_FAILED:
497 case ProvisioningResult::GMS_SIGN_IN_TIMEOUT: 500 case ProvisioningResult::GMS_SIGN_IN_TIMEOUT:
498 case ProvisioningResult::GMS_SIGN_IN_INTERNAL_ERROR: 501 case ProvisioningResult::GMS_SIGN_IN_INTERNAL_ERROR:
499 error = ArcSupportHost::Error::SIGN_IN_SERVICE_UNAVAILABLE_ERROR; 502 error = ArcSupportHost::Error::SIGN_IN_SERVICE_UNAVAILABLE_ERROR;
500 break; 503 break;
501 case ProvisioningResult::GMS_BAD_AUTHENTICATION: 504 case ProvisioningResult::GMS_BAD_AUTHENTICATION:
502 error = ArcSupportHost::Error::SIGN_IN_BAD_AUTHENTICATION_ERROR; 505 error = ArcSupportHost::Error::SIGN_IN_BAD_AUTHENTICATION_ERROR;
503 break; 506 break;
504 case ProvisioningResult::DEVICE_CHECK_IN_FAILED: 507 case ProvisioningResult::DEVICE_CHECK_IN_FAILED:
505 case ProvisioningResult::DEVICE_CHECK_IN_TIMEOUT: 508 case ProvisioningResult::DEVICE_CHECK_IN_TIMEOUT:
506 case ProvisioningResult::DEVICE_CHECK_IN_INTERNAL_ERROR: 509 case ProvisioningResult::DEVICE_CHECK_IN_INTERNAL_ERROR:
507 error = ArcSupportHost::Error::SIGN_IN_GMS_NOT_AVAILABLE_ERROR; 510 error = ArcSupportHost::Error::SIGN_IN_GMS_NOT_AVAILABLE_ERROR;
508 break; 511 break;
509 case ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED: 512 case ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED:
510 case ProvisioningResult::CLOUD_PROVISION_FLOW_TIMEOUT: 513 case ProvisioningResult::CLOUD_PROVISION_FLOW_TIMEOUT:
511 case ProvisioningResult::CLOUD_PROVISION_FLOW_INTERNAL_ERROR: 514 case ProvisioningResult::CLOUD_PROVISION_FLOW_INTERNAL_ERROR:
512 error = ArcSupportHost::Error::SIGN_IN_CLOUD_PROVISION_FLOW_FAIL_ERROR; 515 error = ArcSupportHost::Error::SIGN_IN_CLOUD_PROVISION_FLOW_FAIL_ERROR;
513 break; 516 break;
517 case ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR:
518 error = ArcSupportHost::Error::SERVER_COMMUNICATION_ERROR;
519 break;
514 default: 520 default:
515 error = ArcSupportHost::Error::SIGN_IN_UNKNOWN_ERROR; 521 error = ArcSupportHost::Error::SIGN_IN_UNKNOWN_ERROR;
516 break; 522 break;
517 } 523 }
518 524
519 if (result == ProvisioningResult::ARC_STOPPED) { 525 if (result == ProvisioningResult::ARC_STOPPED ||
526 result == ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR) {
520 if (profile_->GetPrefs()->HasPrefPath(prefs::kArcSignedIn)) 527 if (profile_->GetPrefs()->HasPrefPath(prefs::kArcSignedIn))
521 profile_->GetPrefs()->SetBoolean(prefs::kArcSignedIn, false); 528 profile_->GetPrefs()->SetBoolean(prefs::kArcSignedIn, false);
522 ShutdownBridge(); 529 ShutdownBridge();
523 if (support_host_) 530 if (support_host_)
524 support_host_->ShowError(error, false); 531 support_host_->ShowError(error, false);
525 return; 532 return;
526 } 533 }
527 534
528 if (result == ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED || 535 if (result == ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED ||
529 result == ProvisioningResult::CLOUD_PROVISION_FLOW_TIMEOUT || 536 result == ProvisioningResult::CLOUD_PROVISION_FLOW_TIMEOUT ||
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 DCHECK(!auth_code.empty()); 792 DCHECK(!auth_code.empty());
786 793
787 account_info_notifier_->Notify(!IsOptInVerificationDisabled(), auth_code, 794 account_info_notifier_->Notify(!IsOptInVerificationDisabled(), auth_code,
788 GetAccountType(), 795 GetAccountType(),
789 policy_util::IsAccountManaged(profile_)); 796 policy_util::IsAccountManaged(profile_));
790 account_info_notifier_.reset(); 797 account_info_notifier_.reset();
791 } 798 }
792 799
793 void ArcAuthService::OnArcSignInTimeout() { 800 void ArcAuthService::OnArcSignInTimeout() {
794 LOG(ERROR) << "Timed out waiting for first sign in."; 801 LOG(ERROR) << "Timed out waiting for first sign in.";
795 OnSignInFailedInternal(ProvisioningResult::OVERALL_SIGN_IN_TIMEOUT); 802 OnProvisioningFinished(ProvisioningResult::OVERALL_SIGN_IN_TIMEOUT);
796 } 803 }
797 804
798 void ArcAuthService::CancelAuthCode() { 805 void ArcAuthService::CancelAuthCode() {
799 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 806 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
800 807
801 if (state_ == State::NOT_INITIALIZED) { 808 if (state_ == State::NOT_INITIALIZED) {
802 NOTREACHED(); 809 NOTREACHED();
803 return; 810 return;
804 } 811 }
805 812
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 } 888 }
882 return; 889 return;
883 } 890 }
884 891
885 SetState(State::SHOWING_TERMS_OF_SERVICE); 892 SetState(State::SHOWING_TERMS_OF_SERVICE);
886 if (support_host_) 893 if (support_host_)
887 support_host_->ShowTermsOfService(); 894 support_host_->ShowTermsOfService();
888 } 895 }
889 896
890 void ArcAuthService::OnPrepareContextFailed() { 897 void ArcAuthService::OnPrepareContextFailed() {
891 ShutdownBridge(); 898 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
892 if (support_host_) { 899 OnProvisioningFinished(ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR);
893 support_host_->ShowError(ArcSupportHost::Error::SERVER_COMMUNICATION_ERROR,
894 false);
895 }
896 UpdateOptInCancelUMA(OptInCancelReason::NETWORK_ERROR);
897 } 900 }
898 901
899 void ArcAuthService::OnAuthCodeSuccess(const std::string& auth_code) { 902 void ArcAuthService::OnAuthCodeSuccess(const std::string& auth_code) {
900 OnAuthCodeObtained(auth_code); 903 OnAuthCodeObtained(auth_code);
901 } 904 }
902 905
903 void ArcAuthService::OnAuthCodeFailed() { 906 void ArcAuthService::OnAuthCodeFailed() {
904 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 907 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
905 ShutdownBridge(); 908 OnProvisioningFinished(ProvisioningResult::CHROME_SERVER_COMMUNICATION_ERROR);
906 if (support_host_) {
907 support_host_->ShowError(ArcSupportHost::Error::SERVER_COMMUNICATION_ERROR,
908 false);
909 }
910 UpdateOptInCancelUMA(OptInCancelReason::NETWORK_ERROR);
911 } 909 }
912 910
913 void ArcAuthService::StartArcAndroidManagementCheck() { 911 void ArcAuthService::StartArcAndroidManagementCheck() {
914 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 912 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
915 DCHECK(arc_bridge_service()->stopped()); 913 DCHECK(arc_bridge_service()->stopped());
916 DCHECK(state_ == State::SHOWING_TERMS_OF_SERVICE || 914 DCHECK(state_ == State::SHOWING_TERMS_OF_SERVICE ||
917 state_ == State::CHECKING_ANDROID_MANAGEMENT); 915 state_ == State::CHECKING_ANDROID_MANAGEMENT);
918 SetState(State::CHECKING_ANDROID_MANAGEMENT); 916 SetState(State::CHECKING_ANDROID_MANAGEMENT);
919 917
920 android_management_checker_.reset(new ArcAndroidManagementChecker( 918 android_management_checker_.reset(new ArcAndroidManagementChecker(
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1097 return os << "ACTIVE"; 1095 return os << "ACTIVE";
1098 } 1096 }
1099 1097
1100 // Some compiler reports an error even if all values of an enum-class are 1098 // Some compiler reports an error even if all values of an enum-class are
1101 // covered indivisually in a switch statement. 1099 // covered indivisually in a switch statement.
1102 NOTREACHED(); 1100 NOTREACHED();
1103 return os; 1101 return os;
1104 } 1102 }
1105 1103
1106 } // namespace arc 1104 } // namespace arc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698