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

Unified Diff: chrome/browser/chromeos/login/enrollment/enrollment_screen.cc

Issue 2526973002: Added retry policy (Closed)
Patch Set: Added retry policy Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/login/enrollment/enrollment_screen.cc
diff --git a/chrome/browser/chromeos/login/enrollment/enrollment_screen.cc b/chrome/browser/chromeos/login/enrollment/enrollment_screen.cc
index b752d4e61daf06870246a90520e41c1071b32fdf..e64ada44c8c263a49032b8736c57b9397106e18e 100644
--- a/chrome/browser/chromeos/login/enrollment/enrollment_screen.cc
+++ b/chrome/browser/chromeos/login/enrollment/enrollment_screen.cc
@@ -66,7 +66,19 @@ EnrollmentScreen::EnrollmentScreen(BaseScreenDelegate* base_screen_delegate,
EnrollmentScreenActor* actor)
: BaseScreen(base_screen_delegate),
actor_(actor),
- weak_ptr_factory_(this) {}
+ retry_backoff_(&retry_policy_),
xiyuan 2016/11/28 22:16:34 Can we use a unique_ptr and create |retry_backoff_
kumarniranjan 2016/12/05 22:04:53 Done.
+ num_retries_(0),
xiyuan 2016/11/28 22:16:34 nit: move the initializer to header https://chrom
kumarniranjan 2016/12/05 22:04:52 Done.
+ weak_ptr_factory_(this) {
+ // It is okay to initialize the fields of retry_policy_ after constructing
+ // retry_backoff_ with a pointer to this struct.
+ retry_policy_.num_errors_to_ignore = 0;
+ retry_policy_.initial_delay_ms = 4000;
+ retry_policy_.multiply_factor = 1.5;
+ retry_policy_.jitter_factor = 0.1;
+ retry_policy_.maximum_backoff_ms = 480000;
The one and only Dr. Crash 2016/11/30 23:30:08 You set a maximum backoff but you never call Shoul
kumarniranjan 2016/12/05 22:04:52 Jonathan wanted the maximum interval between retry
joth__google 2016/12/05 22:59:26 I gave a bit of reasoning in https://codereview.ch
+ retry_policy_.entry_lifetime_ms = -1;
+ retry_policy_.always_use_initial_delay = true;
+}
EnrollmentScreen::~EnrollmentScreen() {
DCHECK(!enrollment_helper_ || g_browser_process->IsShuttingDown());
@@ -198,6 +210,22 @@ void EnrollmentScreen::OnLoginDone(const std::string& user,
}
void EnrollmentScreen::OnRetry() {
+ num_retries_++;
xiyuan 2016/11/28 22:16:34 nit: ++num_retries_;
The one and only Dr. Crash 2016/11/30 23:09:56 Yes! (Sorry, I am a big fan of pre-increment/decre
kumarniranjan 2016/12/05 22:04:52 Done.
+ LOG(WARNING) << "Enrollment retry " << num_retries_
+ << " initiated by user button press.";
+ ProcessRetry();
xiyuan 2016/11/28 22:16:34 retry_timer_.Stop() in case the timer is running?
kumarniranjan 2016/12/05 22:04:52 Good catch! We don't want an automatic retry to ha
+}
+
+void EnrollmentScreen::AutomaticRetry() {
xiyuan 2016/11/28 22:16:34 nit: AutomaticRetry -> StartRetryTimer
+ retry_backoff_.InformOfRequest(false);
+ retry_timer_.Start(FROM_HERE, retry_backoff_.GetTimeUntilRelease(),
+ base::Bind(&EnrollmentScreen::ProcessRetry,
+ weak_ptr_factory_.GetWeakPtr()));
+ num_retries_++;
xiyuan 2016/11/28 22:16:34 nit: ditto
kumarniranjan 2016/12/05 22:04:52 Done.
+ LOG(WARNING) << "Enrollment retry " << num_retries_ << " initiated by timer.";
xiyuan 2016/11/28 22:16:34 What is the purpose of |num_retries_| other than o
kumarniranjan 2016/12/05 22:04:52 It gives us the capability to set an upper limit o
+}
+
+void EnrollmentScreen::ProcessRetry() {
Show();
}
@@ -251,16 +279,24 @@ void EnrollmentScreen::OnEnrollmentError(policy::EnrollmentStatus status) {
// based enrollment and we have a fallback authentication, show it.
if (status.status() == policy::EnrollmentStatus::STATUS_REGISTRATION_FAILED &&
status.client_status() == policy::DM_STATUS_SERVICE_DEVICE_NOT_FOUND &&
- current_auth_ == AUTH_ATTESTATION && AdvanceToNextAuth())
+ current_auth_ == AUTH_ATTESTATION && AdvanceToNextAuth()) {
Show();
- else
+ } else {
actor_->ShowEnrollmentStatus(status);
+ if (policy::DeviceCloudPolicyManagerChromeOS::
+ GetZeroTouchEnrollmentMode() ==
+ policy::ZeroTouchEnrollmentMode::HANDS_OFF)
xiyuan 2016/11/28 22:16:34 nit: wrap the condition into a helper function (e.
+ AutomaticRetry();
xiyuan 2016/11/28 22:16:34 nit: wrap with {} since condition takes more than
The one and only Dr. Crash 2016/11/30 23:09:56 Probably unnecessary once a helper method is avail
+ }
}
void EnrollmentScreen::OnOtherError(
EnterpriseEnrollmentHelper::OtherError error) {
RecordEnrollmentErrorMetrics();
actor_->ShowOtherError(error);
+ if (policy::DeviceCloudPolicyManagerChromeOS::GetZeroTouchEnrollmentMode() ==
+ policy::ZeroTouchEnrollmentMode::HANDS_OFF)
+ AutomaticRetry();
xiyuan 2016/11/28 22:16:33 nit: wrap with {}
The one and only Dr. Crash 2016/11/30 23:09:56 Probably unnecessary once a helper method is avail
}
void EnrollmentScreen::OnDeviceEnrolled(const std::string& additional_token) {
@@ -331,6 +367,7 @@ void EnrollmentScreen::SendEnrollmentAuthToken(const std::string& token) {
}
void EnrollmentScreen::ShowEnrollmentStatusOnSuccess() {
+ retry_backoff_.InformOfRequest(true);
if (elapsed_timer_)
UMA_ENROLLMENT_TIME(kMetricEnrollmentTimeSuccess, elapsed_timer_);
actor_->ShowEnrollmentStatus(policy::EnrollmentStatus::ForStatus(

Powered by Google App Engine
This is Rietveld 408576698