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 c051bf87590cf19dfcd6aecc523d357e96b36bc1..0fc89fb1bc813e8b8647188817f9963b75ea1928 100644 |
--- a/chrome/browser/chromeos/arc/arc_auth_service.cc |
+++ b/chrome/browser/chromeos/arc/arc_auth_service.cc |
@@ -89,6 +89,37 @@ ash::ShelfDelegate* GetShelfDelegate() { |
return nullptr; |
} |
+ProvisioningResult ConvertArcSignInFailureReasonToProvisioningResult( |
+ arc::mojom::ArcSignInFailureReason reason) { |
+ using ArcSignInFailureReason = arc::mojom::ArcSignInFailureReason; |
+ |
+#define MAP_PROVISIONING_RESULT(name) \ |
+ case ArcSignInFailureReason::name: \ |
+ return ProvisioningResult::name |
+ |
+ switch (reason) { |
+ MAP_PROVISIONING_RESULT(UNKNOWN_ERROR); |
+ MAP_PROVISIONING_RESULT(MOJO_VERSION_MISMATCH); |
+ MAP_PROVISIONING_RESULT(MOJO_CALL_TIMEOUT); |
+ MAP_PROVISIONING_RESULT(DEVICE_CHECK_IN_FAILED); |
+ MAP_PROVISIONING_RESULT(DEVICE_CHECK_IN_TIMEOUT); |
+ MAP_PROVISIONING_RESULT(DEVICE_CHECK_IN_INTERNAL_ERROR); |
+ MAP_PROVISIONING_RESULT(GMS_NETWORK_ERROR); |
+ MAP_PROVISIONING_RESULT(GMS_SERVICE_UNAVAILABLE); |
+ MAP_PROVISIONING_RESULT(GMS_BAD_AUTHENTICATION); |
+ MAP_PROVISIONING_RESULT(GMS_SIGN_IN_FAILED); |
+ MAP_PROVISIONING_RESULT(GMS_SIGN_IN_TIMEOUT); |
+ MAP_PROVISIONING_RESULT(GMS_SIGN_IN_INTERNAL_ERROR); |
+ MAP_PROVISIONING_RESULT(CLOUD_PROVISION_FLOW_FAILED); |
+ MAP_PROVISIONING_RESULT(CLOUD_PROVISION_FLOW_TIMEOUT); |
+ MAP_PROVISIONING_RESULT(CLOUD_PROVISION_FLOW_INTERNAL_ERROR); |
+ } |
+#undef MAP_PROVISIONING_RESULT |
+ |
+ NOTREACHED() << "unknown reason: " << static_cast<int>(reason); |
+ return ProvisioningResult::UNKNOWN_ERROR; |
+} |
+ |
} // namespace |
ArcAuthService::ArcAuthService(ArcBridgeService* bridge_service) |
@@ -201,7 +232,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; |
@@ -264,6 +295,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()); |
@@ -272,42 +308,42 @@ void ArcAuthService::OnSignInFailed(arc::mojom::ArcSignInFailureReason reason) { |
UpdateProvisioningTiming(base::Time::Now() - sign_in_time_, false, |
IsAccountManaged(profile_)); |
+ UpdateOptInCancelUMA(OptInCancelReason::CLOUD_PROVISION_FLOW_FAIL); |
+ 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: |
+ case ProvisioningResult::GMS_SIGN_IN_FAILED: |
+ case ProvisioningResult::GMS_SIGN_IN_TIMEOUT: |
+ case ProvisioningResult::GMS_SIGN_IN_INTERNAL_ERROR: |
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: |
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: |
+ case ProvisioningResult::DEVICE_CHECK_IN_TIMEOUT: |
+ case ProvisioningResult::DEVICE_CHECK_IN_INTERNAL_ERROR: |
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: |
+ case ProvisioningResult::CLOUD_PROVISION_FLOW_INTERNAL_ERROR: |
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::CLOUD_PROVISION_FLOW_INTERNAL_ERROR || |
+ result == ProvisioningResult::UNKNOWN_ERROR) { |
clear_required_ = true; |
// We'll delay shutting down the bridge in this case to allow people to send |
// feedback. |