| 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/policy/enrollment_handler_chromeos.h" | 5 #include "chrome/browser/chromeos/policy/enrollment_handler_chromeos.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 11 #include "base/location.h" | 11 #include "base/location.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/single_thread_task_runner.h" | 13 #include "base/single_thread_task_runner.h" |
| 14 #include "base/threading/thread_task_runner_handle.h" | 14 #include "base/threading/thread_task_runner_handle.h" |
| 15 #include "chrome/browser/browser_process.h" | 15 #include "chrome/browser/browser_process.h" |
| 16 #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h" | 16 #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h" |
| 17 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" | 17 #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" |
| 18 #include "chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.h" | 18 #include "chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.h" |
| 19 #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h" | 19 #include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h" |
| 20 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" | 20 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" |
| 21 #include "chrome/browser/chromeos/policy/server_backed_state_keys_broker.h" | 21 #include "chrome/browser/chromeos/policy/server_backed_state_keys_broker.h" |
| 22 #include "chrome/browser/chromeos/profiles/profile_helper.h" | 22 #include "chrome/browser/chromeos/profiles/profile_helper.h" |
| 23 #include "chrome/browser/chromeos/settings/device_oauth2_token_service.h" | 23 #include "chrome/browser/chromeos/settings/device_oauth2_token_service.h" |
| 24 #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h
" | 24 #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h
" |
| 25 #include "chrome/browser/profiles/profile.h" | 25 #include "chrome/browser/profiles/profile.h" |
| 26 #include "chromeos/attestation/attestation_flow.h" | 26 #include "chromeos/attestation/attestation_flow.h" |
| 27 #include "chromeos/chromeos_switches.h" | 27 #include "chromeos/chromeos_switches.h" |
| 28 #include "chromeos/dbus/auth_policy_client.h" |
| 29 #include "chromeos/dbus/dbus_thread_manager.h" |
| 28 #include "google_apis/gaia/gaia_auth_util.h" | 30 #include "google_apis/gaia/gaia_auth_util.h" |
| 29 #include "google_apis/gaia/gaia_urls.h" | 31 #include "google_apis/gaia/gaia_urls.h" |
| 30 #include "net/http/http_status_code.h" | 32 #include "net/http/http_status_code.h" |
| 31 | 33 |
| 32 namespace em = enterprise_management; | 34 namespace em = enterprise_management; |
| 33 | 35 |
| 34 namespace policy { | 36 namespace policy { |
| 35 | 37 |
| 36 namespace { | 38 namespace { |
| 37 | 39 |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 void EnrollmentHandlerChromeOS::OnStoreError(CloudPolicyStore* store) { | 245 void EnrollmentHandlerChromeOS::OnStoreError(CloudPolicyStore* store) { |
| 244 DCHECK_EQ(store_, store); | 246 DCHECK_EQ(store_, store); |
| 245 if (enrollment_step_ == STEP_STORE_TOKEN_AND_ID) { | 247 if (enrollment_step_ == STEP_STORE_TOKEN_AND_ID) { |
| 246 // Calling OwnerSettingsServiceChromeOS::SetManagementSettings() | 248 // Calling OwnerSettingsServiceChromeOS::SetManagementSettings() |
| 247 // on a non- enterprise-managed device will fail as | 249 // on a non- enterprise-managed device will fail as |
| 248 // DeviceCloudPolicyStore listens to all changes on device | 250 // DeviceCloudPolicyStore listens to all changes on device |
| 249 // settings, and it calls OnStoreError() when the device is not | 251 // settings, and it calls OnStoreError() when the device is not |
| 250 // enterprise-managed. | 252 // enterprise-managed. |
| 251 return; | 253 return; |
| 252 } | 254 } |
| 255 LOG(ERROR) << "Error in device policy store."; |
| 253 ReportResult(EnrollmentStatus::ForStoreError(store_->status(), | 256 ReportResult(EnrollmentStatus::ForStoreError(store_->status(), |
| 254 store_->validation_status())); | 257 store_->validation_status())); |
| 255 } | 258 } |
| 256 | 259 |
| 257 void EnrollmentHandlerChromeOS::HandleStateKeysResult( | 260 void EnrollmentHandlerChromeOS::HandleStateKeysResult( |
| 258 const std::vector<std::string>& state_keys) { | 261 const std::vector<std::string>& state_keys) { |
| 259 CHECK_EQ(STEP_STATE_KEYS, enrollment_step_); | 262 CHECK_EQ(STEP_STATE_KEYS, enrollment_step_); |
| 260 | 263 |
| 261 // Make sure state keys are available if forced re-enrollment is on. | 264 // Make sure state keys are available if forced re-enrollment is on. |
| 262 if (chromeos::AutoEnrollmentController::GetMode() == | 265 if (chromeos::AutoEnrollmentController::GetMode() == |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 481 void EnrollmentHandlerChromeOS::HandleStoreRobotAuthTokenResult(bool result) { | 484 void EnrollmentHandlerChromeOS::HandleStoreRobotAuthTokenResult(bool result) { |
| 482 CHECK_EQ(STEP_STORE_ROBOT_AUTH, enrollment_step_); | 485 CHECK_EQ(STEP_STORE_ROBOT_AUTH, enrollment_step_); |
| 483 | 486 |
| 484 if (!result) { | 487 if (!result) { |
| 485 LOG(ERROR) << "Failed to store API refresh token."; | 488 LOG(ERROR) << "Failed to store API refresh token."; |
| 486 ReportResult(EnrollmentStatus::ForStatus( | 489 ReportResult(EnrollmentStatus::ForStatus( |
| 487 EnrollmentStatus::STATUS_ROBOT_REFRESH_STORE_FAILED)); | 490 EnrollmentStatus::STATUS_ROBOT_REFRESH_STORE_FAILED)); |
| 488 return; | 491 return; |
| 489 } | 492 } |
| 490 | 493 |
| 494 SetStep(STEP_STORE_POLICY); |
| 491 if (device_mode_ == policy::DEVICE_MODE_ENTERPRISE_AD) { | 495 if (device_mode_ == policy::DEVICE_MODE_ENTERPRISE_AD) { |
| 492 ReportResult(EnrollmentStatus::ForStatus(EnrollmentStatus::STATUS_SUCCESS)); | 496 CHECK(install_attributes_->IsActiveDirectoryManaged()); |
| 497 // Update device settings so that in case of Active Directory unsigned |
| 498 // policy is accepted. |
| 499 chromeos::DeviceSettingsService::Get()->SetDeviceMode( |
| 500 install_attributes_->GetMode()); |
| 501 chromeos::DBusThreadManager::Get() |
| 502 ->GetAuthPolicyClient() |
| 503 ->RefreshDevicePolicy(base::Bind( |
| 504 &EnrollmentHandlerChromeOS::HandleActiveDirectoryPolicyRefreshed, |
| 505 weak_ptr_factory_.GetWeakPtr())); |
| 493 } else { | 506 } else { |
| 494 SetStep(STEP_STORE_POLICY); | |
| 495 store_->InstallInitialPolicy(*policy_); | 507 store_->InstallInitialPolicy(*policy_); |
| 496 } | 508 } |
| 497 } | 509 } |
| 498 | 510 |
| 511 void EnrollmentHandlerChromeOS::HandleActiveDirectoryPolicyRefreshed( |
| 512 bool success) { |
| 513 DCHECK_EQ(STEP_STORE_POLICY, enrollment_step_); |
| 514 |
| 515 if (!success) { |
| 516 LOG(ERROR) << "Failed to load Active Directory policy."; |
| 517 ReportResult(EnrollmentStatus::ForStatus( |
| 518 EnrollmentStatus::STATUS_ACTIVE_DIRECTORY_POLICY_FETCH_FAILED)); |
| 519 return; |
| 520 } |
| 521 |
| 522 // After that, the enrollment flow continues in one of the OnStore* observers. |
| 523 store_->Load(); |
| 524 } |
| 525 |
| 499 void EnrollmentHandlerChromeOS::Stop() { | 526 void EnrollmentHandlerChromeOS::Stop() { |
| 500 if (client_.get()) | 527 if (client_.get()) |
| 501 client_->RemoveObserver(this); | 528 client_->RemoveObserver(this); |
| 502 SetStep(STEP_FINISHED); | 529 SetStep(STEP_FINISHED); |
| 503 weak_ptr_factory_.InvalidateWeakPtrs(); | 530 weak_ptr_factory_.InvalidateWeakPtrs(); |
| 504 completion_callback_.Reset(); | 531 completion_callback_.Reset(); |
| 505 } | 532 } |
| 506 | 533 |
| 507 void EnrollmentHandlerChromeOS::ReportResult(EnrollmentStatus status) { | 534 void EnrollmentHandlerChromeOS::ReportResult(EnrollmentStatus status) { |
| 508 EnrollmentCallback callback = completion_callback_; | 535 EnrollmentCallback callback = completion_callback_; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 520 callback.Run(status); | 547 callback.Run(status); |
| 521 } | 548 } |
| 522 | 549 |
| 523 void EnrollmentHandlerChromeOS::SetStep(EnrollmentStep step) { | 550 void EnrollmentHandlerChromeOS::SetStep(EnrollmentStep step) { |
| 524 DCHECK_LE(enrollment_step_, step); | 551 DCHECK_LE(enrollment_step_, step); |
| 525 VLOG(1) << "Step: " << step; | 552 VLOG(1) << "Step: " << step; |
| 526 enrollment_step_ = step; | 553 enrollment_step_ = step; |
| 527 } | 554 } |
| 528 | 555 |
| 529 } // namespace policy | 556 } // namespace policy |
| OLD | NEW |