| 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/logging.h" | 10 #include "base/logging.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 | 67 |
| 68 namespace chromeos { | 68 namespace chromeos { |
| 69 | 69 |
| 70 // static | 70 // static |
| 71 EnrollmentScreen* EnrollmentScreen::Get(ScreenManager* manager) { | 71 EnrollmentScreen* EnrollmentScreen::Get(ScreenManager* manager) { |
| 72 return static_cast<EnrollmentScreen*>( | 72 return static_cast<EnrollmentScreen*>( |
| 73 manager->GetScreen(OobeScreen::SCREEN_OOBE_ENROLLMENT)); | 73 manager->GetScreen(OobeScreen::SCREEN_OOBE_ENROLLMENT)); |
| 74 } | 74 } |
| 75 | 75 |
| 76 EnrollmentScreen::EnrollmentScreen(BaseScreenDelegate* base_screen_delegate, | 76 EnrollmentScreen::EnrollmentScreen(BaseScreenDelegate* base_screen_delegate, |
| 77 EnrollmentScreenActor* actor) | 77 EnrollmentScreenView* view) |
| 78 : BaseScreen(base_screen_delegate, OobeScreen::SCREEN_OOBE_ENROLLMENT), | 78 : BaseScreen(base_screen_delegate, OobeScreen::SCREEN_OOBE_ENROLLMENT), |
| 79 actor_(actor), | 79 view_(view), |
| 80 weak_ptr_factory_(this) { | 80 weak_ptr_factory_(this) { |
| 81 retry_policy_.num_errors_to_ignore = 0; | 81 retry_policy_.num_errors_to_ignore = 0; |
| 82 retry_policy_.initial_delay_ms = kInitialDelayMS; | 82 retry_policy_.initial_delay_ms = kInitialDelayMS; |
| 83 retry_policy_.multiply_factor = kMultiplyFactor; | 83 retry_policy_.multiply_factor = kMultiplyFactor; |
| 84 retry_policy_.jitter_factor = kJitterFactor; | 84 retry_policy_.jitter_factor = kJitterFactor; |
| 85 retry_policy_.maximum_backoff_ms = kMaxDelayMS; | 85 retry_policy_.maximum_backoff_ms = kMaxDelayMS; |
| 86 retry_policy_.entry_lifetime_ms = -1; | 86 retry_policy_.entry_lifetime_ms = -1; |
| 87 retry_policy_.always_use_initial_delay = true; | 87 retry_policy_.always_use_initial_delay = true; |
| 88 retry_backoff_.reset(new net::BackoffEntry(&retry_policy_)); | 88 retry_backoff_.reset(new net::BackoffEntry(&retry_policy_)); |
| 89 } | 89 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 119 SetConfig(); | 119 SetConfig(); |
| 120 } | 120 } |
| 121 | 121 |
| 122 void EnrollmentScreen::SetConfig() { | 122 void EnrollmentScreen::SetConfig() { |
| 123 config_ = enrollment_config_; | 123 config_ = enrollment_config_; |
| 124 if (current_auth_ == AUTH_ATTESTATION) { | 124 if (current_auth_ == AUTH_ATTESTATION) { |
| 125 config_.mode = enrollment_config_.is_attestation_forced() | 125 config_.mode = enrollment_config_.is_attestation_forced() |
| 126 ? policy::EnrollmentConfig::MODE_ATTESTATION_FORCED | 126 ? policy::EnrollmentConfig::MODE_ATTESTATION_FORCED |
| 127 : policy::EnrollmentConfig::MODE_ATTESTATION; | 127 : policy::EnrollmentConfig::MODE_ATTESTATION; |
| 128 } | 128 } |
| 129 actor_->SetParameters(this, config_); | 129 view_->SetParameters(this, config_); |
| 130 enrollment_helper_ = nullptr; | 130 enrollment_helper_ = nullptr; |
| 131 } | 131 } |
| 132 | 132 |
| 133 bool EnrollmentScreen::AdvanceToNextAuth() { | 133 bool EnrollmentScreen::AdvanceToNextAuth() { |
| 134 if (current_auth_ != last_auth_ && current_auth_ == AUTH_ATTESTATION) { | 134 if (current_auth_ != last_auth_ && current_auth_ == AUTH_ATTESTATION) { |
| 135 current_auth_ = AUTH_OAUTH; | 135 current_auth_ = AUTH_OAUTH; |
| 136 SetConfig(); | 136 SetConfig(); |
| 137 return true; | 137 return true; |
| 138 } | 138 } |
| 139 return false; | 139 return false; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 break; | 175 break; |
| 176 } | 176 } |
| 177 } | 177 } |
| 178 | 178 |
| 179 void EnrollmentScreen::ShowInteractiveScreen() { | 179 void EnrollmentScreen::ShowInteractiveScreen() { |
| 180 ClearAuth(base::Bind(&EnrollmentScreen::ShowSigninScreen, | 180 ClearAuth(base::Bind(&EnrollmentScreen::ShowSigninScreen, |
| 181 weak_ptr_factory_.GetWeakPtr())); | 181 weak_ptr_factory_.GetWeakPtr())); |
| 182 } | 182 } |
| 183 | 183 |
| 184 void EnrollmentScreen::Hide() { | 184 void EnrollmentScreen::Hide() { |
| 185 actor_->Hide(); | 185 view_->Hide(); |
| 186 weak_ptr_factory_.InvalidateWeakPtrs(); | 186 weak_ptr_factory_.InvalidateWeakPtrs(); |
| 187 } | 187 } |
| 188 | 188 |
| 189 void EnrollmentScreen::AuthenticateUsingAttestation() { | 189 void EnrollmentScreen::AuthenticateUsingAttestation() { |
| 190 VLOG(1) << "Authenticating using attestation."; | 190 VLOG(1) << "Authenticating using attestation."; |
| 191 elapsed_timer_.reset(new base::ElapsedTimer()); | 191 elapsed_timer_.reset(new base::ElapsedTimer()); |
| 192 actor_->Show(); | 192 view_->Show(); |
| 193 CreateEnrollmentHelper(); | 193 CreateEnrollmentHelper(); |
| 194 enrollment_helper_->EnrollUsingAttestation(); | 194 enrollment_helper_->EnrollUsingAttestation(); |
| 195 } | 195 } |
| 196 | 196 |
| 197 void EnrollmentScreen::OnLoginDone(const std::string& user, | 197 void EnrollmentScreen::OnLoginDone(const std::string& user, |
| 198 const std::string& auth_code) { | 198 const std::string& auth_code) { |
| 199 LOG_IF(ERROR, auth_code.empty()) << "Auth code is empty."; | 199 LOG_IF(ERROR, auth_code.empty()) << "Auth code is empty."; |
| 200 elapsed_timer_.reset(new base::ElapsedTimer()); | 200 elapsed_timer_.reset(new base::ElapsedTimer()); |
| 201 enrolling_user_domain_ = gaia::ExtractDomainName(user); | 201 enrolling_user_domain_ = gaia::ExtractDomainName(user); |
| 202 UMA(enrollment_failed_once_ ? policy::kMetricEnrollmentRestarted | 202 UMA(enrollment_failed_once_ ? policy::kMetricEnrollmentRestarted |
| 203 : policy::kMetricEnrollmentStarted); | 203 : policy::kMetricEnrollmentStarted); |
| 204 | 204 |
| 205 actor_->ShowEnrollmentSpinnerScreen(); | 205 view_->ShowEnrollmentSpinnerScreen(); |
| 206 CreateEnrollmentHelper(); | 206 CreateEnrollmentHelper(); |
| 207 enrollment_helper_->EnrollUsingAuthCode( | 207 enrollment_helper_->EnrollUsingAuthCode( |
| 208 auth_code, shark_controller_ != nullptr /* fetch_additional_token */); | 208 auth_code, shark_controller_ != nullptr /* fetch_additional_token */); |
| 209 } | 209 } |
| 210 | 210 |
| 211 void EnrollmentScreen::OnRetry() { | 211 void EnrollmentScreen::OnRetry() { |
| 212 retry_task_.Cancel(); | 212 retry_task_.Cancel(); |
| 213 ProcessRetry(); | 213 ProcessRetry(); |
| 214 } | 214 } |
| 215 | 215 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 ClearAuth(base::Bind(&EnrollmentScreen::Finish, base::Unretained(this), | 249 ClearAuth(base::Bind(&EnrollmentScreen::Finish, base::Unretained(this), |
| 250 BaseScreenDelegate::ENTERPRISE_ENROLLMENT_COMPLETED)); | 250 BaseScreenDelegate::ENTERPRISE_ENROLLMENT_COMPLETED)); |
| 251 } | 251 } |
| 252 | 252 |
| 253 void EnrollmentScreen::OnAdJoined(const std::string& realm) { | 253 void EnrollmentScreen::OnAdJoined(const std::string& realm) { |
| 254 std::move(on_joined_callback_).Run(realm); | 254 std::move(on_joined_callback_).Run(realm); |
| 255 } | 255 } |
| 256 | 256 |
| 257 void EnrollmentScreen::OnAuthError(const GoogleServiceAuthError& error) { | 257 void EnrollmentScreen::OnAuthError(const GoogleServiceAuthError& error) { |
| 258 RecordEnrollmentErrorMetrics(); | 258 RecordEnrollmentErrorMetrics(); |
| 259 actor_->ShowAuthError(error); | 259 view_->ShowAuthError(error); |
| 260 } | 260 } |
| 261 | 261 |
| 262 void EnrollmentScreen::OnEnrollmentError(policy::EnrollmentStatus status) { | 262 void EnrollmentScreen::OnEnrollmentError(policy::EnrollmentStatus status) { |
| 263 // TODO(pbond): remove this LOG once http://crbug.com/586961 is fixed. | 263 // TODO(pbond): remove this LOG once http://crbug.com/586961 is fixed. |
| 264 LOG(WARNING) << "Enrollment error occured: status=" << status.status() | 264 LOG(WARNING) << "Enrollment error occured: status=" << status.status() |
| 265 << " http status=" << status.http_status() | 265 << " http status=" << status.http_status() |
| 266 << " DM status=" << status.client_status(); | 266 << " DM status=" << status.client_status(); |
| 267 RecordEnrollmentErrorMetrics(); | 267 RecordEnrollmentErrorMetrics(); |
| 268 // If the DM server does not have a device pre-provisioned for attestation- | 268 // If the DM server does not have a device pre-provisioned for attestation- |
| 269 // based enrollment and we have a fallback authentication, show it. | 269 // based enrollment and we have a fallback authentication, show it. |
| 270 if (status.status() == policy::EnrollmentStatus::REGISTRATION_FAILED && | 270 if (status.status() == policy::EnrollmentStatus::REGISTRATION_FAILED && |
| 271 status.client_status() == policy::DM_STATUS_SERVICE_DEVICE_NOT_FOUND && | 271 status.client_status() == policy::DM_STATUS_SERVICE_DEVICE_NOT_FOUND && |
| 272 current_auth_ == AUTH_ATTESTATION && AdvanceToNextAuth()) { | 272 current_auth_ == AUTH_ATTESTATION && AdvanceToNextAuth()) { |
| 273 Show(); | 273 Show(); |
| 274 } else { | 274 } else { |
| 275 actor_->ShowEnrollmentStatus(status); | 275 view_->ShowEnrollmentStatus(status); |
| 276 if (UsingHandsOffEnrollment()) | 276 if (UsingHandsOffEnrollment()) |
| 277 AutomaticRetry(); | 277 AutomaticRetry(); |
| 278 } | 278 } |
| 279 } | 279 } |
| 280 | 280 |
| 281 void EnrollmentScreen::OnOtherError( | 281 void EnrollmentScreen::OnOtherError( |
| 282 EnterpriseEnrollmentHelper::OtherError error) { | 282 EnterpriseEnrollmentHelper::OtherError error) { |
| 283 RecordEnrollmentErrorMetrics(); | 283 RecordEnrollmentErrorMetrics(); |
| 284 actor_->ShowOtherError(error); | 284 view_->ShowOtherError(error); |
| 285 if (UsingHandsOffEnrollment()) | 285 if (UsingHandsOffEnrollment()) |
| 286 AutomaticRetry(); | 286 AutomaticRetry(); |
| 287 } | 287 } |
| 288 | 288 |
| 289 void EnrollmentScreen::OnDeviceEnrolled(const std::string& additional_token) { | 289 void EnrollmentScreen::OnDeviceEnrolled(const std::string& additional_token) { |
| 290 // TODO(pbond): remove this LOG once http://crbug.com/586961 is fixed. | 290 // TODO(pbond): remove this LOG once http://crbug.com/586961 is fixed. |
| 291 LOG(WARNING) << "Device is successfully enrolled."; | 291 LOG(WARNING) << "Device is successfully enrolled."; |
| 292 if (!additional_token.empty()) | 292 if (!additional_token.empty()) |
| 293 SendEnrollmentAuthToken(additional_token); | 293 SendEnrollmentAuthToken(additional_token); |
| 294 | 294 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 318 } | 318 } |
| 319 | 319 |
| 320 } | 320 } |
| 321 | 321 |
| 322 void EnrollmentScreen::OnDeviceAttributeUploadCompleted(bool success) { | 322 void EnrollmentScreen::OnDeviceAttributeUploadCompleted(bool success) { |
| 323 if (success) { | 323 if (success) { |
| 324 // If the device attributes have been successfully uploaded, fetch policy. | 324 // If the device attributes have been successfully uploaded, fetch policy. |
| 325 policy::BrowserPolicyConnectorChromeOS* connector = | 325 policy::BrowserPolicyConnectorChromeOS* connector = |
| 326 g_browser_process->platform_part()->browser_policy_connector_chromeos(); | 326 g_browser_process->platform_part()->browser_policy_connector_chromeos(); |
| 327 connector->GetDeviceCloudPolicyManager()->core()->RefreshSoon(); | 327 connector->GetDeviceCloudPolicyManager()->core()->RefreshSoon(); |
| 328 actor_->ShowEnrollmentStatus( | 328 view_->ShowEnrollmentStatus( |
| 329 policy::EnrollmentStatus::ForStatus(policy::EnrollmentStatus::SUCCESS)); | 329 policy::EnrollmentStatus::ForStatus(policy::EnrollmentStatus::SUCCESS)); |
| 330 } else { | 330 } else { |
| 331 actor_->ShowEnrollmentStatus(policy::EnrollmentStatus::ForStatus( | 331 view_->ShowEnrollmentStatus(policy::EnrollmentStatus::ForStatus( |
| 332 policy::EnrollmentStatus::ATTRIBUTE_UPDATE_FAILED)); | 332 policy::EnrollmentStatus::ATTRIBUTE_UPDATE_FAILED)); |
| 333 } | 333 } |
| 334 } | 334 } |
| 335 | 335 |
| 336 void EnrollmentScreen::ShowAttributePromptScreen() { | 336 void EnrollmentScreen::ShowAttributePromptScreen() { |
| 337 policy::BrowserPolicyConnectorChromeOS* connector = | 337 policy::BrowserPolicyConnectorChromeOS* connector = |
| 338 g_browser_process->platform_part()->browser_policy_connector_chromeos(); | 338 g_browser_process->platform_part()->browser_policy_connector_chromeos(); |
| 339 policy::DeviceCloudPolicyManagerChromeOS* policy_manager = | 339 policy::DeviceCloudPolicyManagerChromeOS* policy_manager = |
| 340 connector->GetDeviceCloudPolicyManager(); | 340 connector->GetDeviceCloudPolicyManager(); |
| 341 | 341 |
| 342 policy::CloudPolicyStore* store = policy_manager->core()->store(); | 342 policy::CloudPolicyStore* store = policy_manager->core()->store(); |
| 343 | 343 |
| 344 const enterprise_management::PolicyData* policy = store->policy(); | 344 const enterprise_management::PolicyData* policy = store->policy(); |
| 345 | 345 |
| 346 std::string asset_id = policy ? policy->annotated_asset_id() : std::string(); | 346 std::string asset_id = policy ? policy->annotated_asset_id() : std::string(); |
| 347 std::string location = policy ? policy->annotated_location() : std::string(); | 347 std::string location = policy ? policy->annotated_location() : std::string(); |
| 348 actor_->ShowAttributePromptScreen(asset_id, location); | 348 view_->ShowAttributePromptScreen(asset_id, location); |
| 349 } | 349 } |
| 350 | 350 |
| 351 void EnrollmentScreen::SendEnrollmentAuthToken(const std::string& token) { | 351 void EnrollmentScreen::SendEnrollmentAuthToken(const std::string& token) { |
| 352 DCHECK(shark_controller_); | 352 DCHECK(shark_controller_); |
| 353 shark_controller_->OnAuthenticationDone(enrolling_user_domain_, token); | 353 shark_controller_->OnAuthenticationDone(enrolling_user_domain_, token); |
| 354 } | 354 } |
| 355 | 355 |
| 356 void EnrollmentScreen::ShowEnrollmentStatusOnSuccess() { | 356 void EnrollmentScreen::ShowEnrollmentStatusOnSuccess() { |
| 357 retry_backoff_->InformOfRequest(true); | 357 retry_backoff_->InformOfRequest(true); |
| 358 if (elapsed_timer_) | 358 if (elapsed_timer_) |
| 359 UMA_ENROLLMENT_TIME(kMetricEnrollmentTimeSuccess, elapsed_timer_); | 359 UMA_ENROLLMENT_TIME(kMetricEnrollmentTimeSuccess, elapsed_timer_); |
| 360 if (UsingHandsOffEnrollment()) { | 360 if (UsingHandsOffEnrollment()) { |
| 361 OnConfirmationClosed(); | 361 OnConfirmationClosed(); |
| 362 } else { | 362 } else { |
| 363 actor_->ShowEnrollmentStatus( | 363 view_->ShowEnrollmentStatus( |
| 364 policy::EnrollmentStatus::ForStatus(policy::EnrollmentStatus::SUCCESS)); | 364 policy::EnrollmentStatus::ForStatus(policy::EnrollmentStatus::SUCCESS)); |
| 365 } | 365 } |
| 366 } | 366 } |
| 367 | 367 |
| 368 void EnrollmentScreen::UMA(policy::MetricEnrollment sample) { | 368 void EnrollmentScreen::UMA(policy::MetricEnrollment sample) { |
| 369 EnrollmentUMA(sample, config_.mode); | 369 EnrollmentUMA(sample, config_.mode); |
| 370 } | 370 } |
| 371 | 371 |
| 372 void EnrollmentScreen::ShowSigninScreen() { | 372 void EnrollmentScreen::ShowSigninScreen() { |
| 373 actor_->Show(); | 373 view_->Show(); |
| 374 actor_->ShowSigninScreen(); | 374 view_->ShowSigninScreen(); |
| 375 } | 375 } |
| 376 | 376 |
| 377 void EnrollmentScreen::RecordEnrollmentErrorMetrics() { | 377 void EnrollmentScreen::RecordEnrollmentErrorMetrics() { |
| 378 enrollment_failed_once_ = true; | 378 enrollment_failed_once_ = true; |
| 379 // TODO(drcrash): Maybe create multiple metrics (http://crbug.com/640313)? | 379 // TODO(drcrash): Maybe create multiple metrics (http://crbug.com/640313)? |
| 380 if (elapsed_timer_) | 380 if (elapsed_timer_) |
| 381 UMA_ENROLLMENT_TIME(kMetricEnrollmentTimeFailure, elapsed_timer_); | 381 UMA_ENROLLMENT_TIME(kMetricEnrollmentTimeFailure, elapsed_timer_); |
| 382 } | 382 } |
| 383 | 383 |
| 384 void EnrollmentScreen::JoinDomain(OnDomainJoinedCallback on_joined_callback) { | 384 void EnrollmentScreen::JoinDomain(OnDomainJoinedCallback on_joined_callback) { |
| 385 on_joined_callback_ = std::move(on_joined_callback); | 385 on_joined_callback_ = std::move(on_joined_callback); |
| 386 actor_->ShowAdJoin(); | 386 view_->ShowAdJoin(); |
| 387 } | 387 } |
| 388 | 388 |
| 389 } // namespace chromeos | 389 } // namespace chromeos |
| OLD | NEW |