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 |