Chromium Code Reviews| 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 "ash/shelf/shelf_delegate.h" | 9 #include "ash/shelf/shelf_delegate.h" |
| 10 #include "ash/shell.h" | 10 #include "ash/shell.h" |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 80 } | 80 } |
| 81 | 81 |
| 82 ash::ShelfDelegate* GetShelfDelegate() { | 82 ash::ShelfDelegate* GetShelfDelegate() { |
| 83 if (g_shelf_delegate_for_testing) | 83 if (g_shelf_delegate_for_testing) |
| 84 return g_shelf_delegate_for_testing; | 84 return g_shelf_delegate_for_testing; |
| 85 if (ash::Shell::HasInstance()) | 85 if (ash::Shell::HasInstance()) |
| 86 return ash::Shell::GetInstance()->GetShelfDelegate(); | 86 return ash::Shell::GetInstance()->GetShelfDelegate(); |
| 87 return nullptr; | 87 return nullptr; |
| 88 } | 88 } |
| 89 | 89 |
| 90 ProvisioningResult ConvertArcSignInFailureReasonToProvisioningResult( | |
| 91 arc::mojom::ArcSignInFailureReason reason) { | |
| 92 using ArcSignInFailureReason = arc::mojom::ArcSignInFailureReason; | |
| 93 | |
| 94 switch (reason) { | |
| 95 case ArcSignInFailureReason::UNKNOWN_ERROR: | |
| 96 return ProvisioningResult::UNKNOWN_ERROR; | |
| 97 case ArcSignInFailureReason::MOJO_VERSION_MISMATCH: | |
| 98 return ProvisioningResult::MOJO_VERSION_MISMATCH; | |
| 99 case ArcSignInFailureReason::MOJO_CALL_TIMEOUT: | |
| 100 return ProvisioningResult::MOJO_CALL_TIMEOUT; | |
| 101 case ArcSignInFailureReason::DEVICE_CHECK_IN_FAILED: | |
| 102 return ProvisioningResult::DEVICE_CHECK_IN_FAILED; | |
| 103 case ArcSignInFailureReason::GMS_SIGN_IN_FAILED: | |
| 104 return ProvisioningResult::GMS_SIGN_IN_FAILED; | |
| 105 case ArcSignInFailureReason::GMS_SIGN_IN_TIMEOUT: | |
| 106 return ProvisioningResult::GMS_SIGN_IN_TIMEOUT; | |
| 107 case ArcSignInFailureReason::GMS_NETWORK_ERROR: | |
| 108 return ProvisioningResult::GMS_NETWORK_ERROR; | |
| 109 case ArcSignInFailureReason::GMS_SERVICE_UNAVAILABLE: | |
| 110 return ProvisioningResult::GMS_SERVICE_UNAVAILABLE; | |
| 111 case ArcSignInFailureReason::GMS_BAD_AUTHENTICATION: | |
| 112 return ProvisioningResult::GMS_BAD_AUTHENTICATION; | |
| 113 case ArcSignInFailureReason::GMS_EMPTY_CONSUMER_PKG_OR_SIG: | |
| 114 return ProvisioningResult::GMS_EMPTY_CONSUMER_PKG_OR_SIG; | |
| 115 case ArcSignInFailureReason::GMS_NEEDS_2F: | |
| 116 return ProvisioningResult::GMS_NEEDS_2F; | |
| 117 case ArcSignInFailureReason::GMS_NEEDS_POST_SIGN_IN_FLOW: | |
| 118 return ProvisioningResult::GMS_NEEDS_POST_SIGN_IN_FLOW; | |
| 119 case ArcSignInFailureReason::GMS_NEEDS_BROWSER: | |
| 120 return ProvisioningResult::GMS_NEEDS_BROWSER; | |
| 121 case ArcSignInFailureReason::CLOUD_PROVISION_FLOW_FAILED: | |
| 122 return ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED; | |
| 123 case ArcSignInFailureReason::CLOUD_PROVISION_FLOW_TIMEOUT: | |
| 124 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.
| |
| 125 default: | |
| 126 LOG(ERROR) << "unknown reason: " << static_cast<int>(reason); | |
| 127 return ProvisioningResult::UNKNOWN_ERROR; | |
| 128 } | |
| 129 } | |
| 130 | |
| 90 } // namespace | 131 } // namespace |
| 91 | 132 |
| 92 ArcAuthService::ArcAuthService(ArcBridgeService* bridge_service) | 133 ArcAuthService::ArcAuthService(ArcBridgeService* bridge_service) |
| 93 : ArcService(bridge_service), binding_(this), weak_ptr_factory_(this) { | 134 : ArcService(bridge_service), binding_(this), weak_ptr_factory_(this) { |
| 94 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 135 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 95 DCHECK(!g_arc_auth_service); | 136 DCHECK(!g_arc_auth_service); |
| 96 | 137 |
| 97 g_arc_auth_service = this; | 138 g_arc_auth_service = this; |
| 98 | 139 |
| 99 arc_bridge_service()->AddObserver(this); | 140 arc_bridge_service()->AddObserver(this); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 191 arc_bridge_service()->auth()->instance()->Init( | 232 arc_bridge_service()->auth()->instance()->Init( |
| 192 binding_.CreateInterfacePtrAndBind()); | 233 binding_.CreateInterfacePtrAndBind()); |
| 193 } | 234 } |
| 194 | 235 |
| 195 void ArcAuthService::OnBridgeStopped(ArcBridgeService::StopReason reason) { | 236 void ArcAuthService::OnBridgeStopped(ArcBridgeService::StopReason reason) { |
| 196 // TODO(crbug.com/625923): Use |reason| to report more detailed errors. | 237 // TODO(crbug.com/625923): Use |reason| to report more detailed errors. |
| 197 if (waiting_for_reply_) { | 238 if (waiting_for_reply_) { |
| 198 // Using SERVICE_UNAVAILABLE instead of UNKNOWN_ERROR, since the latter | 239 // Using SERVICE_UNAVAILABLE instead of UNKNOWN_ERROR, since the latter |
| 199 // causes this code to not try to stop ARC, so it would retry without the | 240 // causes this code to not try to stop ARC, so it would retry without the |
| 200 // user noticing. | 241 // user noticing. |
| 201 OnSignInFailed(mojom::ArcSignInFailureReason::SERVICE_UNAVAILABLE); | 242 OnSignInFailedInternal(ProvisioningResult::ARC_STOPPED); |
| 202 } | 243 } |
| 203 if (!clear_required_) | 244 if (!clear_required_) |
| 204 return; | 245 return; |
| 205 clear_required_ = false; | 246 clear_required_ = false; |
| 206 chromeos::DBusThreadManager::Get()->GetSessionManagerClient()->RemoveArcData( | 247 chromeos::DBusThreadManager::Get()->GetSessionManagerClient()->RemoveArcData( |
| 207 cryptohome::Identification( | 248 cryptohome::Identification( |
| 208 multi_user_util::GetAccountIdFromProfile(profile_))); | 249 multi_user_util::GetAccountIdFromProfile(profile_))); |
| 209 } | 250 } |
| 210 | 251 |
| 211 std::string ArcAuthService::GetAndResetAuthCode() { | 252 std::string ArcAuthService::GetAndResetAuthCode() { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 251 } | 292 } |
| 252 | 293 |
| 253 profile_->GetPrefs()->SetBoolean(prefs::kArcSignedIn, true); | 294 profile_->GetPrefs()->SetBoolean(prefs::kArcSignedIn, true); |
| 254 CloseUI(); | 295 CloseUI(); |
| 255 UpdateProvisioningTiming(base::Time::Now() - sign_in_time_, true, | 296 UpdateProvisioningTiming(base::Time::Now() - sign_in_time_, true, |
| 256 IsAccountManaged(profile_)); | 297 IsAccountManaged(profile_)); |
| 257 UpdateProvisioningResultUMA(ProvisioningResult::SUCCESS); | 298 UpdateProvisioningResultUMA(ProvisioningResult::SUCCESS); |
| 258 } | 299 } |
| 259 | 300 |
| 260 void ArcAuthService::OnSignInFailed(arc::mojom::ArcSignInFailureReason reason) { | 301 void ArcAuthService::OnSignInFailed(arc::mojom::ArcSignInFailureReason reason) { |
| 302 OnSignInFailedInternal( | |
| 303 ConvertArcSignInFailureReasonToProvisioningResult(reason)); | |
| 304 } | |
| 305 | |
| 306 void ArcAuthService::OnSignInFailedInternal(ProvisioningResult result) { | |
| 261 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 307 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 262 DCHECK_EQ(state_, State::ACTIVE); | 308 DCHECK_EQ(state_, State::ACTIVE); |
| 263 DCHECK(!sign_in_time_.is_null()); | 309 DCHECK(!sign_in_time_.is_null()); |
| 264 | 310 |
| 265 waiting_for_reply_ = false; | 311 waiting_for_reply_ = false; |
| 266 | 312 |
| 267 UpdateProvisioningTiming(base::Time::Now() - sign_in_time_, false, | 313 UpdateProvisioningTiming(base::Time::Now() - sign_in_time_, false, |
| 268 IsAccountManaged(profile_)); | 314 IsAccountManaged(profile_)); |
| 315 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
| |
| 316 UpdateProvisioningResultUMA(result); | |
| 317 | |
| 269 int error_message_id; | 318 int error_message_id; |
| 270 switch (reason) { | 319 switch (result) { |
| 271 case mojom::ArcSignInFailureReason::NETWORK_ERROR: | 320 case ProvisioningResult::GMS_NETWORK_ERROR: |
| 272 error_message_id = IDS_ARC_SIGN_IN_NETWORK_ERROR; | 321 error_message_id = IDS_ARC_SIGN_IN_NETWORK_ERROR; |
| 273 UpdateOptInCancelUMA(OptInCancelReason::NETWORK_ERROR); | |
| 274 UpdateProvisioningResultUMA(ProvisioningResult::NETWORK_ERROR); | |
| 275 break; | 322 break; |
| 276 case mojom::ArcSignInFailureReason::SERVICE_UNAVAILABLE: | 323 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
| |
| 324 case ProvisioningResult::GMS_SIGN_IN_FAILED: | |
| 325 case ProvisioningResult::GMS_SIGN_IN_TIMEOUT: | |
| 277 error_message_id = IDS_ARC_SIGN_IN_SERVICE_UNAVAILABLE_ERROR; | 326 error_message_id = IDS_ARC_SIGN_IN_SERVICE_UNAVAILABLE_ERROR; |
| 278 UpdateOptInCancelUMA(OptInCancelReason::SERVICE_UNAVAILABLE); | |
| 279 UpdateProvisioningResultUMA(ProvisioningResult::SERVICE_UNAVAILABLE); | |
| 280 break; | 327 break; |
| 281 case mojom::ArcSignInFailureReason::BAD_AUTHENTICATION: | 328 case ProvisioningResult::GMS_BAD_AUTHENTICATION: |
| 329 case ProvisioningResult::GMS_EMPTY_CONSUMER_PKG_OR_SIG: | |
| 330 case ProvisioningResult::GMS_NEEDS_2F: | |
| 331 case ProvisioningResult::GMS_NEEDS_POST_SIGN_IN_FLOW: | |
| 332 case ProvisioningResult::GMS_NEEDS_BROWSER: | |
| 282 error_message_id = IDS_ARC_SIGN_IN_BAD_AUTHENTICATION_ERROR; | 333 error_message_id = IDS_ARC_SIGN_IN_BAD_AUTHENTICATION_ERROR; |
| 283 UpdateOptInCancelUMA(OptInCancelReason::BAD_AUTHENTICATION); | |
| 284 UpdateProvisioningResultUMA(ProvisioningResult::BAD_AUTHENTICATION); | |
| 285 break; | 334 break; |
| 286 case mojom::ArcSignInFailureReason::GMS_CORE_NOT_AVAILABLE: | 335 case ProvisioningResult::DEVICE_CHECK_IN_FAILED: |
| 287 error_message_id = IDS_ARC_SIGN_IN_GMS_NOT_AVAILABLE_ERROR; | 336 error_message_id = IDS_ARC_SIGN_IN_GMS_NOT_AVAILABLE_ERROR; |
| 288 UpdateOptInCancelUMA(OptInCancelReason::GMS_CORE_NOT_AVAILABLE); | |
| 289 UpdateProvisioningResultUMA(ProvisioningResult::GMS_CORE_NOT_AVAILABLE); | |
| 290 break; | 337 break; |
| 291 case mojom::ArcSignInFailureReason::CLOUD_PROVISION_FLOW_FAIL: | 338 case ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED: |
| 339 case ProvisioningResult::CLOUD_PROVISION_FLOW_TIMEOUT: | |
| 292 error_message_id = IDS_ARC_SIGN_IN_CLOUD_PROVISION_FLOW_FAIL_ERROR; | 340 error_message_id = IDS_ARC_SIGN_IN_CLOUD_PROVISION_FLOW_FAIL_ERROR; |
| 293 UpdateOptInCancelUMA(OptInCancelReason::CLOUD_PROVISION_FLOW_FAIL); | |
| 294 UpdateProvisioningResultUMA( | |
| 295 ProvisioningResult::CLOUD_PROVISION_FLOW_FAIL); | |
| 296 break; | 341 break; |
| 297 default: | 342 default: |
| 298 error_message_id = IDS_ARC_SIGN_IN_UNKNOWN_ERROR; | 343 error_message_id = IDS_ARC_SIGN_IN_UNKNOWN_ERROR; |
| 299 UpdateOptInCancelUMA(OptInCancelReason::UNKNOWN_ERROR); | 344 break; |
| 300 UpdateProvisioningResultUMA(ProvisioningResult::UNKNOWN_ERROR); | |
| 301 } | 345 } |
| 302 | 346 |
| 303 if (reason == mojom::ArcSignInFailureReason::CLOUD_PROVISION_FLOW_FAIL || | 347 if (result == ProvisioningResult::CLOUD_PROVISION_FLOW_FAILED || |
| 304 reason == mojom::ArcSignInFailureReason::UNKNOWN_ERROR) { | 348 result == ProvisioningResult::CLOUD_PROVISION_FLOW_TIMEOUT || |
| 349 result == ProvisioningResult::UNKNOWN_ERROR) { | |
| 305 clear_required_ = true; | 350 clear_required_ = true; |
| 306 // We'll delay shutting down the bridge in this case to allow people to send | 351 // We'll delay shutting down the bridge in this case to allow people to send |
| 307 // feedback. | 352 // feedback. |
| 308 ShowUI(UIPage::ERROR_WITH_FEEDBACK, | 353 ShowUI(UIPage::ERROR_WITH_FEEDBACK, |
| 309 l10n_util::GetStringUTF16(error_message_id)); | 354 l10n_util::GetStringUTF16(error_message_id)); |
| 310 return; | 355 return; |
| 311 } | 356 } |
| 312 | 357 |
| 313 if (profile_->GetPrefs()->HasPrefPath(prefs::kArcSignedIn)) | 358 if (profile_->GetPrefs()->HasPrefPath(prefs::kArcSignedIn)) |
| 314 profile_->GetPrefs()->SetBoolean(prefs::kArcSignedIn, false); | 359 profile_->GetPrefs()->SetBoolean(prefs::kArcSignedIn, false); |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 762 return os << kStateFetchingCode; | 807 return os << kStateFetchingCode; |
| 763 case ArcAuthService::State::ACTIVE: | 808 case ArcAuthService::State::ACTIVE: |
| 764 return os << kStateActive; | 809 return os << kStateActive; |
| 765 default: | 810 default: |
| 766 NOTREACHED(); | 811 NOTREACHED(); |
| 767 return os; | 812 return os; |
| 768 } | 813 } |
| 769 } | 814 } |
| 770 | 815 |
| 771 } // namespace arc | 816 } // namespace arc |
| OLD | NEW |