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/policy/enrollment_handler_chromeos.h" | 5 #include "chrome/browser/chromeos/policy/enrollment_handler_chromeos.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | |
| 8 #include "base/logging.h" | 9 #include "base/logging.h" |
| 9 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 10 #include "chrome/browser/browser_process.h" | 11 #include "chrome/browser/browser_process.h" |
| 11 #include "chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.h" | 12 #include "chrome/browser/chromeos/policy/device_cloud_policy_store_chromeos.h" |
| 12 #include "chrome/browser/chromeos/settings/device_oauth2_token_service.h" | 13 #include "chrome/browser/chromeos/settings/device_oauth2_token_service.h" |
| 13 #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h " | 14 #include "chrome/browser/chromeos/settings/device_oauth2_token_service_factory.h " |
| 14 #include "chrome/browser/policy/cloud/cloud_policy_constants.h" | 15 #include "chrome/browser/policy/cloud/cloud_policy_constants.h" |
| 15 #include "chrome/browser/policy/proto/chromeos/chrome_device_policy.pb.h" | 16 #include "chrome/browser/policy/proto/chromeos/chrome_device_policy.pb.h" |
| 16 #include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h" | 17 #include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h" |
| 18 #include "chrome/common/chrome_switches.h" | |
| 17 #include "google_apis/gaia/gaia_urls.h" | 19 #include "google_apis/gaia/gaia_urls.h" |
| 18 #include "net/http/http_status_code.h" | 20 #include "net/http/http_status_code.h" |
| 19 | 21 |
| 20 namespace em = enterprise_management; | 22 namespace em = enterprise_management; |
| 21 | 23 |
| 22 namespace policy { | 24 namespace policy { |
| 23 | 25 |
| 24 namespace { | 26 namespace { |
| 25 | 27 |
| 26 // Retry for InstallAttrs initialization every 500ms. | 28 // Retry for InstallAttrs initialization every 500ms. |
| 27 const int kLockRetryIntervalMs = 500; | 29 const int kLockRetryIntervalMs = 500; |
| 28 // Maximum time to retry InstallAttrs initialization before we give up. | 30 // Maximum time to retry InstallAttrs initialization before we give up. |
| 29 const int kLockRetryTimeoutMs = 10 * 60 * 1000; // 10 minutes. | 31 const int kLockRetryTimeoutMs = 10 * 60 * 1000; // 10 minutes. |
| 30 | 32 |
| 33 // Testing token used when the enrollment-skip-robot-auth is set to skip talking | |
| 34 // to GAIA for an actual token. This is needed to be able to run against the | |
| 35 // testing DMServer implementations. | |
| 36 const char kTestingRobotToken[] = "test-token"; | |
| 37 | |
| 31 } // namespace | 38 } // namespace |
| 32 | 39 |
| 33 EnrollmentHandlerChromeOS::EnrollmentHandlerChromeOS( | 40 EnrollmentHandlerChromeOS::EnrollmentHandlerChromeOS( |
| 34 DeviceCloudPolicyStoreChromeOS* store, | 41 DeviceCloudPolicyStoreChromeOS* store, |
| 35 EnterpriseInstallAttributes* install_attributes, | 42 EnterpriseInstallAttributes* install_attributes, |
| 36 scoped_ptr<CloudPolicyClient> client, | 43 scoped_ptr<CloudPolicyClient> client, |
| 37 scoped_refptr<base::SequencedTaskRunner> background_task_runner, | 44 scoped_refptr<base::SequencedTaskRunner> background_task_runner, |
| 38 const std::string& auth_token, | 45 const std::string& auth_token, |
| 39 const std::string& client_id, | 46 const std::string& client_id, |
| 40 bool is_auto_enrollment, | 47 bool is_auto_enrollment, |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 180 } | 187 } |
| 181 | 188 |
| 182 void EnrollmentHandlerChromeOS::PolicyValidated( | 189 void EnrollmentHandlerChromeOS::PolicyValidated( |
| 183 DeviceCloudPolicyValidator* validator) { | 190 DeviceCloudPolicyValidator* validator) { |
| 184 CHECK_EQ(STEP_VALIDATION, enrollment_step_); | 191 CHECK_EQ(STEP_VALIDATION, enrollment_step_); |
| 185 if (validator->success()) { | 192 if (validator->success()) { |
| 186 policy_ = validator->policy().Pass(); | 193 policy_ = validator->policy().Pass(); |
| 187 username_ = validator->policy_data()->username(); | 194 username_ = validator->policy_data()->username(); |
| 188 device_id_ = validator->policy_data()->device_id(); | 195 device_id_ = validator->policy_data()->device_id(); |
| 189 | 196 |
| 197 if (CommandLine::ForCurrentProcess()->HasSwitch( | |
| 198 switches::kEnrollmentSkipRobotAuth)) { | |
| 199 // For test purposes we allow enrollment to succeed without proper robot | |
| 200 // account and use the provided value as a token. | |
| 201 refresh_token_ = kTestingRobotToken; | |
| 202 enrollment_step_ = STEP_LOCK_DEVICE, | |
| 203 StartLockDevice(username_, device_mode_, device_id_); | |
| 204 return; | |
| 205 } | |
| 206 | |
| 190 enrollment_step_ = STEP_ROBOT_AUTH_FETCH; | 207 enrollment_step_ = STEP_ROBOT_AUTH_FETCH; |
| 191 client_->FetchRobotAuthCodes(auth_token_); | 208 client_->FetchRobotAuthCodes(auth_token_); |
| 192 } else { | 209 } else { |
| 193 ReportResult(EnrollmentStatus::ForValidationError(validator->status())); | 210 ReportResult(EnrollmentStatus::ForValidationError(validator->status())); |
| 194 } | 211 } |
| 195 } | 212 } |
| 196 | 213 |
| 197 void EnrollmentHandlerChromeOS::OnRobotAuthCodesFetched( | 214 void EnrollmentHandlerChromeOS::OnRobotAuthCodesFetched( |
| 198 CloudPolicyClient* client) { | 215 CloudPolicyClient* client) { |
| 199 DCHECK_EQ(client_.get(), client); | 216 DCHECK_EQ(client_.get(), client); |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 327 chromeos::DeviceOAuth2TokenService* token_service) { | 344 chromeos::DeviceOAuth2TokenService* token_service) { |
| 328 CHECK_EQ(STEP_STORE_ROBOT_AUTH, enrollment_step_); | 345 CHECK_EQ(STEP_STORE_ROBOT_AUTH, enrollment_step_); |
| 329 // Store the robot API auth refresh token. | 346 // Store the robot API auth refresh token. |
| 330 if (!token_service) { | 347 if (!token_service) { |
| 331 LOG(ERROR) << "Failed to store API refresh token (no token service)."; | 348 LOG(ERROR) << "Failed to store API refresh token (no token service)."; |
| 332 ReportResult(EnrollmentStatus::ForStatus( | 349 ReportResult(EnrollmentStatus::ForStatus( |
| 333 EnrollmentStatus::STATUS_ROBOT_REFRESH_STORE_FAILED)); | 350 EnrollmentStatus::STATUS_ROBOT_REFRESH_STORE_FAILED)); |
| 334 return; | 351 return; |
| 335 } | 352 } |
| 336 | 353 |
| 337 if (!token_service->SetAndSaveRefreshToken(refresh_token_)) { | 354 if (!token_service->SetAndSaveRefreshToken(refresh_token_)) { |
|
Joao da Silva
2013/11/05 16:25:48
I think this block could be skipped when the switc
pastarmovj
2013/11/05 16:38:58
Actually I think it is better to set it to this ob
| |
| 338 LOG(ERROR) << "Failed to store API refresh token."; | 355 LOG(ERROR) << "Failed to store API refresh token."; |
| 339 ReportResult(EnrollmentStatus::ForStatus( | 356 ReportResult(EnrollmentStatus::ForStatus( |
| 340 EnrollmentStatus::STATUS_ROBOT_REFRESH_STORE_FAILED)); | 357 EnrollmentStatus::STATUS_ROBOT_REFRESH_STORE_FAILED)); |
| 341 return; | 358 return; |
| 342 } | 359 } |
| 343 | 360 |
| 344 enrollment_step_ = STEP_STORE_POLICY; | 361 enrollment_step_ = STEP_STORE_POLICY; |
| 345 store_->InstallInitialPolicy(*policy_); | 362 store_->InstallInitialPolicy(*policy_); |
| 346 } | 363 } |
| 347 | 364 |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 362 << " " << status.client_status() | 379 << " " << status.client_status() |
| 363 << " " << status.validation_status() | 380 << " " << status.validation_status() |
| 364 << " " << status.store_status(); | 381 << " " << status.store_status(); |
| 365 } | 382 } |
| 366 | 383 |
| 367 if (!callback.is_null()) | 384 if (!callback.is_null()) |
| 368 callback.Run(status); | 385 callback.Run(status); |
| 369 } | 386 } |
| 370 | 387 |
| 371 } // namespace policy | 388 } // namespace policy |
| OLD | NEW |