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

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

Issue 2173103002: Recategorize ARC auth sign in errors. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update error code. Created 4 years, 4 months 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/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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698