Chromium Code Reviews| Index: chrome/browser/chromeos/arc/arc_auth_service.cc |
| diff --git a/chrome/browser/chromeos/arc/arc_auth_service.cc b/chrome/browser/chromeos/arc/arc_auth_service.cc |
| index c20b7401e98994688138b9c3ba3d02006c883521..643086e4e790a875a8e1d846479fbcae35678592 100644 |
| --- a/chrome/browser/chromeos/arc/arc_auth_service.cc |
| +++ b/chrome/browser/chromeos/arc/arc_auth_service.cc |
| @@ -87,6 +87,47 @@ ash::ShelfDelegate* GetShelfDelegate() { |
| return nullptr; |
| } |
| +ProvisioningResult ConvertArcSignInFailureReasonToProvisioningResult( |
| + arc::mojom::ArcSignInFailureReason reason) { |
| + using ArcSignInFailureReason = arc::mojom::ArcSignInFailureReason; |
| + |
| + switch (reason) { |
| + case ArcSignInFailureReason::UNKNOWN_ERROR: |
| + return ProvisioningResult::UNKNOWN_ERROR; |
| + case ArcSignInFailureReason::MOJO_VERSION_MISMATCH: |
| + return ProvisioningResult::MOJO_VERSION_MISMATCH; |
| + case ArcSignInFailureReason::MOJO_CALL_TIMEOUT: |
| + return ProvisioningResult::MOJO_CALL_TIMEOUT; |
| + case ArcSignInFailureReason::DEVICE_CHECK_IN_FAILED: |
| + return ProvisioningResult::DEVICE_CHECK_IN_FAILED; |
| + case ArcSignInFailureReason::GMS_SIGN_IN_FAILED: |
| + return ProvisioningResult::GMS_SIGN_IN_FAILED; |
| + case ArcSignInFailureReason::GMS_SIGN_IN_TIMEOUT: |
| + return ProvisioningResult::GMS_SIGN_IN_TIMEOUT; |
| + case ArcSignInFailureReason::GMS_NETWORK_ERROR: |
| + return ProvisioningResult::GMS_NETWORK_ERROR; |
| + case ArcSignInFailureReason::GMS_SERVICE_UNAVAILABLE: |
| + return ProvisioningResult::GMS_SERVICE_UNAVAILABLE; |
| + case ArcSignInFailureReason::GMS_BAD_AUTHENTICATION: |
| + return ProvisioningResult::GMS_BAD_AUTHENTICATION; |
| + case ArcSignInFailureReason::GMS_EMPTY_CONSUMER_PKG_OR_SIG: |
| + return ProvisioningResult::GMS_EMPTY_CONSUMER_PKG_OR_SIG; |
| + case ArcSignInFailureReason::GMS_NEEDS_2F: |
| + return ProvisioningResult::GMS_NEEDS_2F; |
| + case ArcSignInFailureReason::GMS_NEEDS_POST_SIGN_IN_FLOW: |
| + return ProvisioningResult::GMS_NEEDS_POST_SIGN_IN_FLOW; |
| + case ArcSignInFailureReason::GMS_NEEDS_BROWSER: |
| + return ProvisioningResult::GMS_NEEDS_BROWSER; |
| + case ArcSignInFailureReason::CLOUD_PROVISION_FLOW_FAILED: |
| + return ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED; |
| + case ArcSignInFailureReason::CLOUD_PROVISION_FLOW_TIMEOUT: |
| + return ProvisioningResult::CLOUD_PROVISION_FLOW_TIMEOUT; |
|
Junichi Uekawa
2016/07/26 06:22:27
my eyes hurt trying to compare and find a typo / c
hidehiko
2016/07/26 13:02:58
Replaced by a macro.
|
| + default: |
| + LOG(ERROR) << "unknown reason: " << static_cast<int>(reason); |
| + return ProvisioningResult::UNKNOWN_ERROR; |
| + } |
| +} |
| + |
| } // namespace |
| ArcAuthService::ArcAuthService(ArcBridgeService* bridge_service) |
| @@ -198,7 +239,7 @@ void ArcAuthService::OnBridgeStopped(ArcBridgeService::StopReason reason) { |
| // Using SERVICE_UNAVAILABLE instead of UNKNOWN_ERROR, since the latter |
| // causes this code to not try to stop ARC, so it would retry without the |
| // user noticing. |
| - OnSignInFailed(mojom::ArcSignInFailureReason::SERVICE_UNAVAILABLE); |
| + OnSignInFailedInternal(ProvisioningResult::ARC_STOPPED); |
| } |
| if (!clear_required_) |
| return; |
| @@ -258,6 +299,11 @@ void ArcAuthService::OnSignInComplete() { |
| } |
| void ArcAuthService::OnSignInFailed(arc::mojom::ArcSignInFailureReason reason) { |
| + OnSignInFailedInternal( |
| + ConvertArcSignInFailureReasonToProvisioningResult(reason)); |
| +} |
| + |
| +void ArcAuthService::OnSignInFailedInternal(ProvisioningResult result) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| DCHECK_EQ(state_, State::ACTIVE); |
| DCHECK(!sign_in_time_.is_null()); |
| @@ -266,42 +312,41 @@ void ArcAuthService::OnSignInFailed(arc::mojom::ArcSignInFailureReason reason) { |
| UpdateProvisioningTiming(base::Time::Now() - sign_in_time_, false, |
| IsAccountManaged(profile_)); |
| + UpdateOptInCancelUMA(OptInCancelReason::CLOUD_PROVISION_FLOW_FAIL); |
|
victorhsieh
2016/07/25 20:30:41
Why it's always CLOUD_PROVISION_FLOW_FAIL now?
hidehiko
2016/07/26 13:02:58
The previous code is sending dupped error status v
|
| + UpdateProvisioningResultUMA(result); |
| + |
| int error_message_id; |
| - switch (reason) { |
| - case mojom::ArcSignInFailureReason::NETWORK_ERROR: |
| + switch (result) { |
| + case ProvisioningResult::GMS_NETWORK_ERROR: |
| error_message_id = IDS_ARC_SIGN_IN_NETWORK_ERROR; |
| - UpdateOptInCancelUMA(OptInCancelReason::NETWORK_ERROR); |
| - UpdateProvisioningResultUMA(ProvisioningResult::NETWORK_ERROR); |
| break; |
| - case mojom::ArcSignInFailureReason::SERVICE_UNAVAILABLE: |
| + case ProvisioningResult::GMS_SERVICE_UNAVAILABLE: |
|
victorhsieh
2016/07/25 20:30:41
FWIW, this SERVICE_UNAVAILABLE is just an edge cas
hidehiko
2016/07/26 13:02:58
SERVICE_UNAVAILABLE was used various purpose in th
|
| + case ProvisioningResult::GMS_SIGN_IN_FAILED: |
| + case ProvisioningResult::GMS_SIGN_IN_TIMEOUT: |
| error_message_id = IDS_ARC_SIGN_IN_SERVICE_UNAVAILABLE_ERROR; |
| - UpdateOptInCancelUMA(OptInCancelReason::SERVICE_UNAVAILABLE); |
| - UpdateProvisioningResultUMA(ProvisioningResult::SERVICE_UNAVAILABLE); |
| break; |
| - case mojom::ArcSignInFailureReason::BAD_AUTHENTICATION: |
| + case ProvisioningResult::GMS_BAD_AUTHENTICATION: |
| + case ProvisioningResult::GMS_EMPTY_CONSUMER_PKG_OR_SIG: |
| + case ProvisioningResult::GMS_NEEDS_2F: |
| + case ProvisioningResult::GMS_NEEDS_POST_SIGN_IN_FLOW: |
| + case ProvisioningResult::GMS_NEEDS_BROWSER: |
| error_message_id = IDS_ARC_SIGN_IN_BAD_AUTHENTICATION_ERROR; |
| - UpdateOptInCancelUMA(OptInCancelReason::BAD_AUTHENTICATION); |
| - UpdateProvisioningResultUMA(ProvisioningResult::BAD_AUTHENTICATION); |
| break; |
| - case mojom::ArcSignInFailureReason::GMS_CORE_NOT_AVAILABLE: |
| + case ProvisioningResult::DEVICE_CHECK_IN_FAILED: |
| error_message_id = IDS_ARC_SIGN_IN_GMS_NOT_AVAILABLE_ERROR; |
| - UpdateOptInCancelUMA(OptInCancelReason::GMS_CORE_NOT_AVAILABLE); |
| - UpdateProvisioningResultUMA(ProvisioningResult::GMS_CORE_NOT_AVAILABLE); |
| break; |
| - case mojom::ArcSignInFailureReason::CLOUD_PROVISION_FLOW_FAIL: |
| + case ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED: |
| + case ProvisioningResult::CLOUD_PROVISION_FLOW_TIMEOUT: |
| error_message_id = IDS_ARC_SIGN_IN_CLOUD_PROVISION_FLOW_FAIL_ERROR; |
| - UpdateOptInCancelUMA(OptInCancelReason::CLOUD_PROVISION_FLOW_FAIL); |
| - UpdateProvisioningResultUMA( |
| - ProvisioningResult::CLOUD_PROVISION_FLOW_FAIL); |
| break; |
| default: |
| error_message_id = IDS_ARC_SIGN_IN_UNKNOWN_ERROR; |
| - UpdateOptInCancelUMA(OptInCancelReason::UNKNOWN_ERROR); |
| - UpdateProvisioningResultUMA(ProvisioningResult::UNKNOWN_ERROR); |
| + break; |
| } |
| - if (reason == mojom::ArcSignInFailureReason::CLOUD_PROVISION_FLOW_FAIL || |
| - reason == mojom::ArcSignInFailureReason::UNKNOWN_ERROR) { |
| + if (result == ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED || |
| + result == ProvisioningResult::CLOUD_PROVISION_FLOW_TIMEOUT || |
| + result == ProvisioningResult::UNKNOWN_ERROR) { |
| clear_required_ = true; |
| // We'll delay shutting down the bridge in this case to allow people to send |
| // feedback. |