Chromium Code Reviews| OLD | NEW | 
|---|---|
| 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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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), | 
| 68 actor_(actor), | 68 actor_(actor), | 
| 69 weak_ptr_factory_(this) {} | 69 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.
 
 | |
| 70 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.
 
 | |
| 71 weak_ptr_factory_(this) { | |
| 72 // It is okay to initialize the fields of retry_policy_ after constructing | |
| 73 // retry_backoff_ with a pointer to this struct. | |
| 74 retry_policy_.num_errors_to_ignore = 0; | |
| 75 retry_policy_.initial_delay_ms = 4000; | |
| 76 retry_policy_.multiply_factor = 1.5; | |
| 77 retry_policy_.jitter_factor = 0.1; | |
| 78 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
 
 | |
| 79 retry_policy_.entry_lifetime_ms = -1; | |
| 80 retry_policy_.always_use_initial_delay = true; | |
| 81 } | |
| 70 | 82 | 
| 71 EnrollmentScreen::~EnrollmentScreen() { | 83 EnrollmentScreen::~EnrollmentScreen() { | 
| 72 DCHECK(!enrollment_helper_ || g_browser_process->IsShuttingDown()); | 84 DCHECK(!enrollment_helper_ || g_browser_process->IsShuttingDown()); | 
| 73 } | 85 } | 
| 74 | 86 | 
| 75 void EnrollmentScreen::SetParameters( | 87 void EnrollmentScreen::SetParameters( | 
| 76 const policy::EnrollmentConfig& enrollment_config, | 88 const policy::EnrollmentConfig& enrollment_config, | 
| 77 pairing_chromeos::ControllerPairingController* shark_controller) { | 89 pairing_chromeos::ControllerPairingController* shark_controller) { | 
| 78 enrollment_config_ = enrollment_config; | 90 enrollment_config_ = enrollment_config; | 
| 79 switch (enrollment_config_.auth_mechanism) { | 91 switch (enrollment_config_.auth_mechanism) { | 
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 191 // TODO(rsorokin): Move ShowAdJoin after STEP_REGISTRATION | 203 // TODO(rsorokin): Move ShowAdJoin after STEP_REGISTRATION | 
| 192 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 204 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 
| 193 chromeos::switches::kEnableAd)) { | 205 chromeos::switches::kEnableAd)) { | 
| 194 actor_->ShowAdJoin(); | 206 actor_->ShowAdJoin(); | 
| 195 } else { | 207 } else { | 
| 196 OnAdJoined(""); | 208 OnAdJoined(""); | 
| 197 } | 209 } | 
| 198 } | 210 } | 
| 199 | 211 | 
| 200 void EnrollmentScreen::OnRetry() { | 212 void EnrollmentScreen::OnRetry() { | 
| 213 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.
 
 | |
| 214 LOG(WARNING) << "Enrollment retry " << num_retries_ | |
| 215 << " initiated by user button press."; | |
| 216 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
 
 | |
| 217 } | |
| 218 | |
| 219 void EnrollmentScreen::AutomaticRetry() { | |
| 
 
xiyuan
2016/11/28 22:16:34
nit: AutomaticRetry -> StartRetryTimer
 
 | |
| 220 retry_backoff_.InformOfRequest(false); | |
| 221 retry_timer_.Start(FROM_HERE, retry_backoff_.GetTimeUntilRelease(), | |
| 222 base::Bind(&EnrollmentScreen::ProcessRetry, | |
| 223 weak_ptr_factory_.GetWeakPtr())); | |
| 224 num_retries_++; | |
| 
 
xiyuan
2016/11/28 22:16:34
nit: ditto
 
kumarniranjan
2016/12/05 22:04:52
Done.
 
 | |
| 225 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
 
 | |
| 226 } | |
| 227 | |
| 228 void EnrollmentScreen::ProcessRetry() { | |
| 201 Show(); | 229 Show(); | 
| 202 } | 230 } | 
| 203 | 231 | 
| 204 void EnrollmentScreen::OnCancel() { | 232 void EnrollmentScreen::OnCancel() { | 
| 205 if (AdvanceToNextAuth()) { | 233 if (AdvanceToNextAuth()) { | 
| 206 Show(); | 234 Show(); | 
| 207 return; | 235 return; | 
| 208 } | 236 } | 
| 209 | 237 | 
| 210 UMA(policy::kMetricEnrollmentCancelled); | 238 UMA(policy::kMetricEnrollmentCancelled); | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 244 void EnrollmentScreen::OnEnrollmentError(policy::EnrollmentStatus status) { | 272 void EnrollmentScreen::OnEnrollmentError(policy::EnrollmentStatus status) { | 
| 245 // TODO(pbond): remove this LOG once http://crbug.com/586961 is fixed. | 273 // TODO(pbond): remove this LOG once http://crbug.com/586961 is fixed. | 
| 246 LOG(WARNING) << "Enrollment error occured: status=" << status.status() | 274 LOG(WARNING) << "Enrollment error occured: status=" << status.status() | 
| 247 << " http status=" << status.http_status() | 275 << " http status=" << status.http_status() | 
| 248 << " DM status=" << status.client_status(); | 276 << " DM status=" << status.client_status(); | 
| 249 RecordEnrollmentErrorMetrics(); | 277 RecordEnrollmentErrorMetrics(); | 
| 250 // If the DM server does not have a device pre-provisioned for attestation- | 278 // If the DM server does not have a device pre-provisioned for attestation- | 
| 251 // based enrollment and we have a fallback authentication, show it. | 279 // based enrollment and we have a fallback authentication, show it. | 
| 252 if (status.status() == policy::EnrollmentStatus::STATUS_REGISTRATION_FAILED && | 280 if (status.status() == policy::EnrollmentStatus::STATUS_REGISTRATION_FAILED && | 
| 253 status.client_status() == policy::DM_STATUS_SERVICE_DEVICE_NOT_FOUND && | 281 status.client_status() == policy::DM_STATUS_SERVICE_DEVICE_NOT_FOUND && | 
| 254 current_auth_ == AUTH_ATTESTATION && AdvanceToNextAuth()) | 282 current_auth_ == AUTH_ATTESTATION && AdvanceToNextAuth()) { | 
| 255 Show(); | 283 Show(); | 
| 256 else | 284 } else { | 
| 257 actor_->ShowEnrollmentStatus(status); | 285 actor_->ShowEnrollmentStatus(status); | 
| 286 if (policy::DeviceCloudPolicyManagerChromeOS:: | |
| 287 GetZeroTouchEnrollmentMode() == | |
| 288 policy::ZeroTouchEnrollmentMode::HANDS_OFF) | |
| 
 
xiyuan
2016/11/28 22:16:34
nit: wrap the condition into a helper function (e.
 
 | |
| 289 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
 
 | |
| 290 } | |
| 258 } | 291 } | 
| 259 | 292 | 
| 260 void EnrollmentScreen::OnOtherError( | 293 void EnrollmentScreen::OnOtherError( | 
| 261 EnterpriseEnrollmentHelper::OtherError error) { | 294 EnterpriseEnrollmentHelper::OtherError error) { | 
| 262 RecordEnrollmentErrorMetrics(); | 295 RecordEnrollmentErrorMetrics(); | 
| 263 actor_->ShowOtherError(error); | 296 actor_->ShowOtherError(error); | 
| 297 if (policy::DeviceCloudPolicyManagerChromeOS::GetZeroTouchEnrollmentMode() == | |
| 298 policy::ZeroTouchEnrollmentMode::HANDS_OFF) | |
| 299 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
 
 | |
| 264 } | 300 } | 
| 265 | 301 | 
| 266 void EnrollmentScreen::OnDeviceEnrolled(const std::string& additional_token) { | 302 void EnrollmentScreen::OnDeviceEnrolled(const std::string& additional_token) { | 
| 267 // TODO(pbond): remove this LOG once http://crbug.com/586961 is fixed. | 303 // TODO(pbond): remove this LOG once http://crbug.com/586961 is fixed. | 
| 268 LOG(WARNING) << "Device is successfully enrolled."; | 304 LOG(WARNING) << "Device is successfully enrolled."; | 
| 269 if (!additional_token.empty()) | 305 if (!additional_token.empty()) | 
| 270 SendEnrollmentAuthToken(additional_token); | 306 SendEnrollmentAuthToken(additional_token); | 
| 271 | 307 | 
| 272 enrollment_helper_->GetDeviceAttributeUpdatePermission(); | 308 enrollment_helper_->GetDeviceAttributeUpdatePermission(); | 
| 273 } | 309 } | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 324 std::string location = policy ? policy->annotated_location() : std::string(); | 360 std::string location = policy ? policy->annotated_location() : std::string(); | 
| 325 actor_->ShowAttributePromptScreen(asset_id, location); | 361 actor_->ShowAttributePromptScreen(asset_id, location); | 
| 326 } | 362 } | 
| 327 | 363 | 
| 328 void EnrollmentScreen::SendEnrollmentAuthToken(const std::string& token) { | 364 void EnrollmentScreen::SendEnrollmentAuthToken(const std::string& token) { | 
| 329 DCHECK(shark_controller_); | 365 DCHECK(shark_controller_); | 
| 330 shark_controller_->OnAuthenticationDone(enrolling_user_domain_, token); | 366 shark_controller_->OnAuthenticationDone(enrolling_user_domain_, token); | 
| 331 } | 367 } | 
| 332 | 368 | 
| 333 void EnrollmentScreen::ShowEnrollmentStatusOnSuccess() { | 369 void EnrollmentScreen::ShowEnrollmentStatusOnSuccess() { | 
| 370 retry_backoff_.InformOfRequest(true); | |
| 334 if (elapsed_timer_) | 371 if (elapsed_timer_) | 
| 335 UMA_ENROLLMENT_TIME(kMetricEnrollmentTimeSuccess, elapsed_timer_); | 372 UMA_ENROLLMENT_TIME(kMetricEnrollmentTimeSuccess, elapsed_timer_); | 
| 336 actor_->ShowEnrollmentStatus(policy::EnrollmentStatus::ForStatus( | 373 actor_->ShowEnrollmentStatus(policy::EnrollmentStatus::ForStatus( | 
| 337 policy::EnrollmentStatus::STATUS_SUCCESS)); | 374 policy::EnrollmentStatus::STATUS_SUCCESS)); | 
| 338 } | 375 } | 
| 339 | 376 | 
| 340 void EnrollmentScreen::UMA(policy::MetricEnrollment sample) { | 377 void EnrollmentScreen::UMA(policy::MetricEnrollment sample) { | 
| 341 EnrollmentUMA(sample, config_.mode); | 378 EnrollmentUMA(sample, config_.mode); | 
| 342 } | 379 } | 
| 343 | 380 | 
| 344 void EnrollmentScreen::ShowSigninScreen() { | 381 void EnrollmentScreen::ShowSigninScreen() { | 
| 345 actor_->Show(); | 382 actor_->Show(); | 
| 346 actor_->ShowSigninScreen(); | 383 actor_->ShowSigninScreen(); | 
| 347 } | 384 } | 
| 348 | 385 | 
| 349 void EnrollmentScreen::RecordEnrollmentErrorMetrics() { | 386 void EnrollmentScreen::RecordEnrollmentErrorMetrics() { | 
| 350 enrollment_failed_once_ = true; | 387 enrollment_failed_once_ = true; | 
| 351 // TODO(drcrash): Maybe create multiple metrics (http://crbug.com/640313)? | 388 // TODO(drcrash): Maybe create multiple metrics (http://crbug.com/640313)? | 
| 352 if (elapsed_timer_) | 389 if (elapsed_timer_) | 
| 353 UMA_ENROLLMENT_TIME(kMetricEnrollmentTimeFailure, elapsed_timer_); | 390 UMA_ENROLLMENT_TIME(kMetricEnrollmentTimeFailure, elapsed_timer_); | 
| 354 } | 391 } | 
| 355 | 392 | 
| 356 } // namespace chromeos | 393 } // namespace chromeos | 
| OLD | NEW |