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

Side by Side Diff: chrome/browser/chromeos/login/enrollment/enrollment_screen.cc

Issue 2526973002: Added retry policy (Closed)
Patch Set: Created 4 years 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/login/enrollment/enrollment_screen.h" 5 #include "chrome/browser/chromeos/login/enrollment/enrollment_screen.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 namespace chromeos { 57 namespace chromeos {
58 58
59 // static 59 // static
60 EnrollmentScreen* EnrollmentScreen::Get(ScreenManager* manager) { 60 EnrollmentScreen* EnrollmentScreen::Get(ScreenManager* manager) {
61 return static_cast<EnrollmentScreen*>( 61 return static_cast<EnrollmentScreen*>(
62 manager->GetScreen(WizardController::kEnrollmentScreenName)); 62 manager->GetScreen(WizardController::kEnrollmentScreenName));
63 } 63 }
64 64
65 EnrollmentScreen::EnrollmentScreen(BaseScreenDelegate* base_screen_delegate, 65 EnrollmentScreen::EnrollmentScreen(BaseScreenDelegate* base_screen_delegate,
66 EnrollmentScreenActor* actor) 66 EnrollmentScreenActor* actor)
67 : BaseScreen(base_screen_delegate), 67 : BaseScreen(base_screen_delegate), actor_(actor), weak_ptr_factory_(this) {
joth 2016/11/23 22:24:02 as a general guide use initializer list when you c
kumarniranjan 2016/11/24 18:12:46 Done.
68 actor_(actor), 68 policy_ = new net::BackoffEntry::Policy();
69 weak_ptr_factory_(this) {} 69 policy_->num_errors_to_ignore = 0;
70 policy_->initial_delay_ms = 4000;
71 policy_->multiply_factor = 2.0;
joth 2016/11/23 22:24:02 given we're using this to paper over the TPM init,
kumarniranjan 2016/11/24 18:12:46 Done.
72 policy_->jitter_factor = 0.1;
73 policy_->maximum_backoff_ms = -1;
joth 2016/11/23 22:24:03 Lets cap the maximum delay to 8 minutes
kumarniranjan 2016/11/24 18:12:46 Done.
74 policy_->entry_lifetime_ms = -1;
75 backoff_ = new net::BackoffEntry(policy_);
76 }
70 77
71 EnrollmentScreen::~EnrollmentScreen() { 78 EnrollmentScreen::~EnrollmentScreen() {
72 DCHECK(!enrollment_helper_ || g_browser_process->IsShuttingDown()); 79 DCHECK(!enrollment_helper_ || g_browser_process->IsShuttingDown());
73 } 80 }
74 81
75 void EnrollmentScreen::SetParameters( 82 void EnrollmentScreen::SetParameters(
76 const policy::EnrollmentConfig& enrollment_config, 83 const policy::EnrollmentConfig& enrollment_config,
77 pairing_chromeos::ControllerPairingController* shark_controller) { 84 pairing_chromeos::ControllerPairingController* shark_controller) {
78 enrollment_config_ = enrollment_config; 85 enrollment_config_ = enrollment_config;
79 switch (enrollment_config_.auth_mechanism) { 86 switch (enrollment_config_.auth_mechanism) {
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 // TODO(rsorokin): Move ShowAdJoin after STEP_REGISTRATION 198 // TODO(rsorokin): Move ShowAdJoin after STEP_REGISTRATION
192 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 199 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
193 chromeos::switches::kEnableAd)) { 200 chromeos::switches::kEnableAd)) {
194 actor_->ShowAdJoin(); 201 actor_->ShowAdJoin();
195 } else { 202 } else {
196 OnAdJoined(""); 203 OnAdJoined("");
197 } 204 }
198 } 205 }
199 206
200 void EnrollmentScreen::OnRetry() { 207 void EnrollmentScreen::OnRetry() {
201 Show(); 208 Show();
joth 2016/11/23 22:24:02 is it safe to call this multiple times? (just wond
kumarniranjan 2016/11/24 18:12:46 The current UI without my changes allows for this
202 } 209 }
203 210
204 void EnrollmentScreen::OnCancel() { 211 void EnrollmentScreen::OnCancel() {
205 if (AdvanceToNextAuth()) { 212 if (AdvanceToNextAuth()) {
206 Show(); 213 Show();
207 return; 214 return;
208 } 215 }
209 216
210 UMA(policy::kMetricEnrollmentCancelled); 217 UMA(policy::kMetricEnrollmentCancelled);
211 if (elapsed_timer_) 218 if (elapsed_timer_)
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 LOG(WARNING) << "Enrollment error occured: status=" << status.status() 253 LOG(WARNING) << "Enrollment error occured: status=" << status.status()
247 << " http status=" << status.http_status() 254 << " http status=" << status.http_status()
248 << " DM status=" << status.client_status(); 255 << " DM status=" << status.client_status();
249 RecordEnrollmentErrorMetrics(); 256 RecordEnrollmentErrorMetrics();
250 // If the DM server does not have a device pre-provisioned for attestation- 257 // If the DM server does not have a device pre-provisioned for attestation-
251 // based enrollment and we have a fallback authentication, show it. 258 // based enrollment and we have a fallback authentication, show it.
252 if (status.status() == policy::EnrollmentStatus::STATUS_REGISTRATION_FAILED && 259 if (status.status() == policy::EnrollmentStatus::STATUS_REGISTRATION_FAILED &&
253 status.client_status() == policy::DM_STATUS_SERVICE_DEVICE_NOT_FOUND && 260 status.client_status() == policy::DM_STATUS_SERVICE_DEVICE_NOT_FOUND &&
254 current_auth_ == AUTH_ATTESTATION && AdvanceToNextAuth()) 261 current_auth_ == AUTH_ATTESTATION && AdvanceToNextAuth())
255 Show(); 262 Show();
256 else 263 else {
257 actor_->ShowEnrollmentStatus(status); 264 actor_->ShowEnrollmentStatus(status);
265 if (policy::DeviceCloudPolicyManagerChromeOS::
266 GetZeroTouchEnrollmentMode() ==
267 policy::ZeroTouchEnrollmentMode::HANDS_OFF) {
268 backoff_->InformOfRequest(false);
269 timer_.Start(FROM_HERE, backoff_->GetTimeUntilRelease(),
270 base::Bind(&EnrollmentScreen::OnRetry,
joth 2016/11/23 22:24:02 I don't have a strong preference, but it maybe cle
kumarniranjan 2016/11/24 18:12:46 I agree. I ended up calling the method "ProcessRet
271 weak_ptr_factory_.GetWeakPtr()));
272 }
273 }
258 } 274 }
259 275
260 void EnrollmentScreen::OnOtherError( 276 void EnrollmentScreen::OnOtherError(
261 EnterpriseEnrollmentHelper::OtherError error) { 277 EnterpriseEnrollmentHelper::OtherError error) {
joth 2016/11/23 22:24:02 Wonder if we should retry here too? https://cs.ch
kumarniranjan 2016/11/24 18:12:46 Considering we are in hands-off mode, it can't hur
262 RecordEnrollmentErrorMetrics(); 278 RecordEnrollmentErrorMetrics();
263 actor_->ShowOtherError(error); 279 actor_->ShowOtherError(error);
264 } 280 }
265 281
266 void EnrollmentScreen::OnDeviceEnrolled(const std::string& additional_token) { 282 void EnrollmentScreen::OnDeviceEnrolled(const std::string& additional_token) {
267 // TODO(pbond): remove this LOG once http://crbug.com/586961 is fixed. 283 // TODO(pbond): remove this LOG once http://crbug.com/586961 is fixed.
268 LOG(WARNING) << "Device is successfully enrolled."; 284 LOG(WARNING) << "Device is successfully enrolled.";
269 if (!additional_token.empty()) 285 if (!additional_token.empty())
270 SendEnrollmentAuthToken(additional_token); 286 SendEnrollmentAuthToken(additional_token);
271 287
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 std::string location = policy ? policy->annotated_location() : std::string(); 340 std::string location = policy ? policy->annotated_location() : std::string();
325 actor_->ShowAttributePromptScreen(asset_id, location); 341 actor_->ShowAttributePromptScreen(asset_id, location);
326 } 342 }
327 343
328 void EnrollmentScreen::SendEnrollmentAuthToken(const std::string& token) { 344 void EnrollmentScreen::SendEnrollmentAuthToken(const std::string& token) {
329 DCHECK(shark_controller_); 345 DCHECK(shark_controller_);
330 shark_controller_->OnAuthenticationDone(enrolling_user_domain_, token); 346 shark_controller_->OnAuthenticationDone(enrolling_user_domain_, token);
331 } 347 }
332 348
333 void EnrollmentScreen::ShowEnrollmentStatusOnSuccess() { 349 void EnrollmentScreen::ShowEnrollmentStatusOnSuccess() {
350 backoff_->InformOfRequest(true);
334 if (elapsed_timer_) 351 if (elapsed_timer_)
335 UMA_ENROLLMENT_TIME(kMetricEnrollmentTimeSuccess, elapsed_timer_); 352 UMA_ENROLLMENT_TIME(kMetricEnrollmentTimeSuccess, elapsed_timer_);
336 actor_->ShowEnrollmentStatus(policy::EnrollmentStatus::ForStatus( 353 actor_->ShowEnrollmentStatus(policy::EnrollmentStatus::ForStatus(
337 policy::EnrollmentStatus::STATUS_SUCCESS)); 354 policy::EnrollmentStatus::STATUS_SUCCESS));
338 } 355 }
339 356
340 void EnrollmentScreen::UMA(policy::MetricEnrollment sample) { 357 void EnrollmentScreen::UMA(policy::MetricEnrollment sample) {
341 EnrollmentUMA(sample, config_.mode); 358 EnrollmentUMA(sample, config_.mode);
342 } 359 }
343 360
344 void EnrollmentScreen::ShowSigninScreen() { 361 void EnrollmentScreen::ShowSigninScreen() {
345 actor_->Show(); 362 actor_->Show();
346 actor_->ShowSigninScreen(); 363 actor_->ShowSigninScreen();
347 } 364 }
348 365
349 void EnrollmentScreen::RecordEnrollmentErrorMetrics() { 366 void EnrollmentScreen::RecordEnrollmentErrorMetrics() {
350 enrollment_failed_once_ = true; 367 enrollment_failed_once_ = true;
351 // TODO(drcrash): Maybe create multiple metrics (http://crbug.com/640313)? 368 // TODO(drcrash): Maybe create multiple metrics (http://crbug.com/640313)?
352 if (elapsed_timer_) 369 if (elapsed_timer_)
353 UMA_ENROLLMENT_TIME(kMetricEnrollmentTimeFailure, elapsed_timer_); 370 UMA_ENROLLMENT_TIME(kMetricEnrollmentTimeFailure, elapsed_timer_);
354 } 371 }
355 372
356 } // namespace chromeos 373 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698