| 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 "components/policy/core/common/cloud/cloud_policy_client.h" | 5 #include "components/policy/core/common/cloud/cloud_policy_client.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 CloudPolicyClient::Observer::~Observer() {} | 46 CloudPolicyClient::Observer::~Observer() {} |
| 47 | 47 |
| 48 void CloudPolicyClient::Observer::OnRobotAuthCodesFetched( | 48 void CloudPolicyClient::Observer::OnRobotAuthCodesFetched( |
| 49 CloudPolicyClient* client) {} | 49 CloudPolicyClient* client) {} |
| 50 | 50 |
| 51 CloudPolicyClient::CloudPolicyClient( | 51 CloudPolicyClient::CloudPolicyClient( |
| 52 const std::string& machine_id, | 52 const std::string& machine_id, |
| 53 const std::string& machine_model, | 53 const std::string& machine_model, |
| 54 const std::string& verification_key_hash, | 54 const std::string& verification_key_hash, |
| 55 DeviceManagementService* service, | 55 DeviceManagementService* service, |
| 56 scoped_refptr<net::URLRequestContextGetter> request_context) | 56 scoped_refptr<net::URLRequestContextGetter> request_context, |
| 57 SigningService* signing_service) |
| 57 : machine_id_(machine_id), | 58 : machine_id_(machine_id), |
| 58 machine_model_(machine_model), | 59 machine_model_(machine_model), |
| 59 verification_key_hash_(verification_key_hash), | 60 verification_key_hash_(verification_key_hash), |
| 60 device_mode_(DEVICE_MODE_NOT_SET), | |
| 61 submit_machine_id_(false), | |
| 62 public_key_version_(-1), | |
| 63 public_key_version_valid_(false), | |
| 64 invalidation_version_(0), | |
| 65 fetched_invalidation_version_(0), | |
| 66 service_(service), // Can be null for unit tests. | 61 service_(service), // Can be null for unit tests. |
| 67 status_(DM_STATUS_SUCCESS), | 62 signing_service_(signing_service), |
| 68 request_context_(request_context) { | 63 request_context_(request_context), |
| 64 weak_ptr_factory_(this) { |
| 69 } | 65 } |
| 70 | 66 |
| 71 CloudPolicyClient::~CloudPolicyClient() { | 67 CloudPolicyClient::~CloudPolicyClient() { |
| 72 base::STLDeleteValues(&responses_); | 68 base::STLDeleteValues(&responses_); |
| 73 } | 69 } |
| 74 | 70 |
| 75 void CloudPolicyClient::SetupRegistration(const std::string& dm_token, | 71 void CloudPolicyClient::SetupRegistration(const std::string& dm_token, |
| 76 const std::string& client_id) { | 72 const std::string& client_id) { |
| 77 DCHECK(!dm_token.empty()); | 73 DCHECK(!dm_token.empty()); |
| 78 DCHECK(!client_id.empty()); | 74 DCHECK(!client_id.empty()); |
| 79 DCHECK(!is_registered()); | 75 DCHECK(!is_registered()); |
| 80 | 76 |
| 81 dm_token_ = dm_token; | 77 dm_token_ = dm_token; |
| 82 client_id_ = client_id; | 78 client_id_ = client_id; |
| 83 request_jobs_.clear(); | 79 request_jobs_.clear(); |
| 84 policy_fetch_request_job_.reset(); | 80 policy_fetch_request_job_.reset(); |
| 85 base::STLDeleteValues(&responses_); | 81 base::STLDeleteValues(&responses_); |
| 86 | 82 |
| 87 NotifyRegistrationStateChanged(); | 83 NotifyRegistrationStateChanged(); |
| 88 } | 84 } |
| 89 | 85 |
| 86 // Sets the client ID or generate a new one. A new one is intentionally |
| 87 // generated on each new registration request in order to preserve privacy. |
| 88 // Reusing IDs would mean the server could track clients by their registration |
| 89 // attempts. |
| 90 void CloudPolicyClient::SetClientId(const std::string& client_id) { |
| 91 client_id_ = client_id.empty() ? base::GenerateGUID() : client_id; |
| 92 } |
| 93 |
| 90 void CloudPolicyClient::Register(em::DeviceRegisterRequest::Type type, | 94 void CloudPolicyClient::Register(em::DeviceRegisterRequest::Type type, |
| 91 em::DeviceRegisterRequest::Flavor flavor, | 95 em::DeviceRegisterRequest::Flavor flavor, |
| 92 const std::string& auth_token, | 96 const std::string& auth_token, |
| 93 const std::string& client_id, | 97 const std::string& client_id, |
| 94 const std::string& requisition, | 98 const std::string& requisition, |
| 95 const std::string& current_state_key) { | 99 const std::string& current_state_key) { |
| 96 DCHECK(service_); | 100 DCHECK(service_); |
| 97 DCHECK(!auth_token.empty()); | 101 DCHECK(!auth_token.empty()); |
| 98 DCHECK(!is_registered()); | 102 DCHECK(!is_registered()); |
| 99 | 103 |
| 100 if (client_id.empty()) { | 104 SetClientId(client_id); |
| 101 // Generate a new client ID. This is intentionally done on each new | |
| 102 // registration request in order to preserve privacy. Reusing IDs would mean | |
| 103 // the server could track clients by their registration attempts. | |
| 104 client_id_ = base::GenerateGUID(); | |
| 105 } else { | |
| 106 client_id_ = client_id; | |
| 107 } | |
| 108 | 105 |
| 109 policy_fetch_request_job_.reset( | 106 policy_fetch_request_job_.reset( |
| 110 service_->CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION, | 107 service_->CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION, |
| 111 GetRequestContext())); | 108 GetRequestContext())); |
| 112 policy_fetch_request_job_->SetOAuthToken(auth_token); | 109 policy_fetch_request_job_->SetOAuthToken(auth_token); |
| 113 policy_fetch_request_job_->SetClientID(client_id_); | 110 policy_fetch_request_job_->SetClientID(client_id_); |
| 114 | 111 |
| 115 em::DeviceRegisterRequest* request = | 112 em::DeviceRegisterRequest* request = |
| 116 policy_fetch_request_job_->GetRequest()->mutable_register_request(); | 113 policy_fetch_request_job_->GetRequest()->mutable_register_request(); |
| 117 if (!client_id.empty()) | 114 if (!client_id.empty()) |
| 118 request->set_reregister(true); | 115 request->set_reregister(true); |
| 119 request->set_type(type); | 116 request->set_type(type); |
| 120 if (!machine_id_.empty()) | 117 if (!machine_id_.empty()) |
| 121 request->set_machine_id(machine_id_); | 118 request->set_machine_id(machine_id_); |
| 122 if (!machine_model_.empty()) | 119 if (!machine_model_.empty()) |
| 123 request->set_machine_model(machine_model_); | 120 request->set_machine_model(machine_model_); |
| 124 if (!requisition.empty()) | 121 if (!requisition.empty()) |
| 125 request->set_requisition(requisition); | 122 request->set_requisition(requisition); |
| 126 if (!current_state_key.empty()) | 123 if (!current_state_key.empty()) |
| 127 request->set_server_backed_state_key(current_state_key); | 124 request->set_server_backed_state_key(current_state_key); |
| 128 request->set_flavor(flavor); | 125 request->set_flavor(flavor); |
| 129 | 126 |
| 130 policy_fetch_request_job_->SetRetryCallback( | 127 policy_fetch_request_job_->SetRetryCallback( |
| 131 base::Bind(&CloudPolicyClient::OnRetryRegister, base::Unretained(this))); | 128 base::Bind(&CloudPolicyClient::OnRetryRegister, |
| 129 weak_ptr_factory_.GetWeakPtr())); |
| 132 | 130 |
| 133 policy_fetch_request_job_->Start( | 131 policy_fetch_request_job_->Start( |
| 134 base::Bind(&CloudPolicyClient::OnRegisterCompleted, | 132 base::Bind(&CloudPolicyClient::OnRegisterCompleted, |
| 135 base::Unretained(this))); | 133 weak_ptr_factory_.GetWeakPtr())); |
| 134 } |
| 135 |
| 136 void CloudPolicyClient::RegisterWithCertificate( |
| 137 em::DeviceRegisterRequest::Type type, |
| 138 em::DeviceRegisterRequest::Flavor flavor, |
| 139 const std::string& pem_certificate_chain, |
| 140 const std::string& client_id, |
| 141 const std::string& requisition, |
| 142 const std::string& current_state_key) { |
| 143 DCHECK(signing_service_); |
| 144 DCHECK(service_); |
| 145 DCHECK(!pem_certificate_chain.empty()); |
| 146 DCHECK(!is_registered()); |
| 147 |
| 148 SetClientId(client_id); |
| 149 |
| 150 em::CertificateBasedDeviceRegistrationData data; |
| 151 data.set_certificate_type(em::CertificateBasedDeviceRegistrationData:: |
| 152 ENTERPRISE_ENROLLMENT_CERTIFICATE); |
| 153 data.set_device_certificate(pem_certificate_chain); |
| 154 |
| 155 em::DeviceRegisterRequest* request = data.mutable_device_register_request(); |
| 156 if (!client_id.empty()) |
| 157 request->set_reregister(true); |
| 158 request->set_type(type); |
| 159 if (!machine_id_.empty()) |
| 160 request->set_machine_id(machine_id_); |
| 161 if (!machine_model_.empty()) |
| 162 request->set_machine_model(machine_model_); |
| 163 if (!requisition.empty()) |
| 164 request->set_requisition(requisition); |
| 165 if (!current_state_key.empty()) |
| 166 request->set_server_backed_state_key(current_state_key); |
| 167 request->set_flavor(flavor); |
| 168 |
| 169 signing_service_->SignData(data.SerializeAsString(), |
| 170 base::Bind(&CloudPolicyClient::OnRegisterWithCertificateRequestSigned, |
| 171 weak_ptr_factory_.GetWeakPtr())); |
| 172 } |
| 173 |
| 174 void CloudPolicyClient::OnRegisterWithCertificateRequestSigned(bool success, |
| 175 em::SignedData signed_data) { |
| 176 if (!success) { |
| 177 const em::DeviceManagementResponse response; |
| 178 OnRegisterCompleted(DM_STATUS_CANNOT_SIGN_REQUEST, 0, response); |
| 179 return; |
| 180 } |
| 181 |
| 182 policy_fetch_request_job_.reset( |
| 183 service_->CreateJob( |
| 184 DeviceManagementRequestJob::TYPE_CERT_BASED_REGISTRATION, |
| 185 GetRequestContext())); |
| 186 policy_fetch_request_job_->SetClientID(client_id_); |
| 187 em::SignedData* signed_request = policy_fetch_request_job_->GetRequest()-> |
| 188 mutable_cert_based_register_request()->mutable_signed_request(); |
| 189 signed_request->set_data(signed_data.data()); |
| 190 signed_request->set_signature(signed_data.signature()); |
| 191 signed_request->set_extra_data_bytes(signed_data.extra_data_bytes()); |
| 192 policy_fetch_request_job_->SetRetryCallback( |
| 193 base::Bind(&CloudPolicyClient::OnRetryRegister, |
| 194 weak_ptr_factory_.GetWeakPtr())); |
| 195 policy_fetch_request_job_->Start( |
| 196 base::Bind(&CloudPolicyClient::OnRegisterCompleted, |
| 197 weak_ptr_factory_.GetWeakPtr())); |
| 136 } | 198 } |
| 137 | 199 |
| 138 void CloudPolicyClient::SetInvalidationInfo(int64_t version, | 200 void CloudPolicyClient::SetInvalidationInfo(int64_t version, |
| 139 const std::string& payload) { | 201 const std::string& payload) { |
| 140 invalidation_version_ = version; | 202 invalidation_version_ = version; |
| 141 invalidation_payload_ = payload; | 203 invalidation_payload_ = payload; |
| 142 } | 204 } |
| 143 | 205 |
| 144 void CloudPolicyClient::FetchPolicy() { | 206 void CloudPolicyClient::FetchPolicy() { |
| 145 CHECK(is_registered()); | 207 CHECK(is_registered()); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 } | 260 } |
| 199 } | 261 } |
| 200 | 262 |
| 201 // Set the fetched invalidation version to the latest invalidation version | 263 // Set the fetched invalidation version to the latest invalidation version |
| 202 // since it is now the invalidation version used for the latest fetch. | 264 // since it is now the invalidation version used for the latest fetch. |
| 203 fetched_invalidation_version_ = invalidation_version_; | 265 fetched_invalidation_version_ = invalidation_version_; |
| 204 | 266 |
| 205 // Fire the job. | 267 // Fire the job. |
| 206 policy_fetch_request_job_->Start( | 268 policy_fetch_request_job_->Start( |
| 207 base::Bind(&CloudPolicyClient::OnPolicyFetchCompleted, | 269 base::Bind(&CloudPolicyClient::OnPolicyFetchCompleted, |
| 208 base::Unretained(this))); | 270 weak_ptr_factory_.GetWeakPtr())); |
| 209 } | 271 } |
| 210 | 272 |
| 211 void CloudPolicyClient::FetchRobotAuthCodes(const std::string& auth_token) { | 273 void CloudPolicyClient::FetchRobotAuthCodes(const std::string& auth_token) { |
| 212 CHECK(is_registered()); | 274 CHECK(is_registered()); |
| 213 DCHECK(!auth_token.empty()); | 275 DCHECK(!auth_token.empty()); |
| 214 | 276 |
| 215 policy_fetch_request_job_.reset(service_->CreateJob( | 277 policy_fetch_request_job_.reset(service_->CreateJob( |
| 216 DeviceManagementRequestJob::TYPE_API_AUTH_CODE_FETCH, | 278 DeviceManagementRequestJob::TYPE_API_AUTH_CODE_FETCH, |
| 217 GetRequestContext())); | 279 GetRequestContext())); |
| 218 // The credentials of a domain user are needed in order to mint a new OAuth2 | 280 // The credentials of a domain user are needed in order to mint a new OAuth2 |
| 219 // authorization token for the robot account. | 281 // authorization token for the robot account. |
| 220 policy_fetch_request_job_->SetOAuthToken(auth_token); | 282 policy_fetch_request_job_->SetOAuthToken(auth_token); |
| 221 policy_fetch_request_job_->SetDMToken(dm_token_); | 283 policy_fetch_request_job_->SetDMToken(dm_token_); |
| 222 policy_fetch_request_job_->SetClientID(client_id_); | 284 policy_fetch_request_job_->SetClientID(client_id_); |
| 223 | 285 |
| 224 em::DeviceServiceApiAccessRequest* request = | 286 em::DeviceServiceApiAccessRequest* request = |
| 225 policy_fetch_request_job_->GetRequest()-> | 287 policy_fetch_request_job_->GetRequest()-> |
| 226 mutable_service_api_access_request(); | 288 mutable_service_api_access_request(); |
| 227 request->set_oauth2_client_id( | 289 request->set_oauth2_client_id( |
| 228 GaiaUrls::GetInstance()->oauth2_chrome_client_id()); | 290 GaiaUrls::GetInstance()->oauth2_chrome_client_id()); |
| 229 request->add_auth_scope(GaiaConstants::kAnyApiOAuth2Scope); | 291 request->add_auth_scope(GaiaConstants::kAnyApiOAuth2Scope); |
| 230 | 292 |
| 231 policy_fetch_request_job_->Start( | 293 policy_fetch_request_job_->Start( |
| 232 base::Bind(&CloudPolicyClient::OnFetchRobotAuthCodesCompleted, | 294 base::Bind(&CloudPolicyClient::OnFetchRobotAuthCodesCompleted, |
| 233 base::Unretained(this))); | 295 weak_ptr_factory_.GetWeakPtr())); |
| 234 } | 296 } |
| 235 | 297 |
| 236 void CloudPolicyClient::Unregister() { | 298 void CloudPolicyClient::Unregister() { |
| 237 DCHECK(service_); | 299 DCHECK(service_); |
| 238 policy_fetch_request_job_.reset( | 300 policy_fetch_request_job_.reset( |
| 239 service_->CreateJob(DeviceManagementRequestJob::TYPE_UNREGISTRATION, | 301 service_->CreateJob(DeviceManagementRequestJob::TYPE_UNREGISTRATION, |
| 240 GetRequestContext())); | 302 GetRequestContext())); |
| 241 policy_fetch_request_job_->SetDMToken(dm_token_); | 303 policy_fetch_request_job_->SetDMToken(dm_token_); |
| 242 policy_fetch_request_job_->SetClientID(client_id_); | 304 policy_fetch_request_job_->SetClientID(client_id_); |
| 243 policy_fetch_request_job_->GetRequest()->mutable_unregister_request(); | 305 policy_fetch_request_job_->GetRequest()->mutable_unregister_request(); |
| 244 policy_fetch_request_job_->Start( | 306 policy_fetch_request_job_->Start( |
| 245 base::Bind(&CloudPolicyClient::OnUnregisterCompleted, | 307 base::Bind(&CloudPolicyClient::OnUnregisterCompleted, |
| 246 base::Unretained(this))); | 308 weak_ptr_factory_.GetWeakPtr())); |
| 247 } | 309 } |
| 248 | 310 |
| 249 void CloudPolicyClient::UploadCertificate( | 311 void CloudPolicyClient::UploadCertificate( |
| 250 const std::string& certificate_data, | 312 const std::string& certificate_data, |
| 251 const CloudPolicyClient::StatusCallback& callback) { | 313 const CloudPolicyClient::StatusCallback& callback) { |
| 252 CHECK(is_registered()); | 314 CHECK(is_registered()); |
| 253 std::unique_ptr<DeviceManagementRequestJob> request_job( | 315 std::unique_ptr<DeviceManagementRequestJob> request_job( |
| 254 service_->CreateJob(DeviceManagementRequestJob::TYPE_UPLOAD_CERTIFICATE, | 316 service_->CreateJob(DeviceManagementRequestJob::TYPE_UPLOAD_CERTIFICATE, |
| 255 GetRequestContext())); | 317 GetRequestContext())); |
| 256 request_job->SetDMToken(dm_token_); | 318 request_job->SetDMToken(dm_token_); |
| 257 request_job->SetClientID(client_id_); | 319 request_job->SetClientID(client_id_); |
| 258 | 320 |
| 259 em::DeviceManagementRequest* request = request_job->GetRequest(); | 321 em::DeviceManagementRequest* request = request_job->GetRequest(); |
| 260 request->mutable_cert_upload_request()->set_device_certificate( | 322 request->mutable_cert_upload_request()->set_device_certificate( |
| 261 certificate_data); | 323 certificate_data); |
| 262 | 324 |
| 263 const DeviceManagementRequestJob::Callback job_callback = | 325 const DeviceManagementRequestJob::Callback job_callback = |
| 264 base::Bind(&CloudPolicyClient::OnCertificateUploadCompleted, | 326 base::Bind(&CloudPolicyClient::OnCertificateUploadCompleted, |
| 265 base::Unretained(this), request_job.get(), callback); | 327 weak_ptr_factory_.GetWeakPtr(), request_job.get(), callback); |
| 266 | 328 |
| 267 request_jobs_.push_back(std::move(request_job)); | 329 request_jobs_.push_back(std::move(request_job)); |
| 268 request_jobs_.back()->Start(job_callback); | 330 request_jobs_.back()->Start(job_callback); |
| 269 } | 331 } |
| 270 | 332 |
| 271 void CloudPolicyClient::UploadDeviceStatus( | 333 void CloudPolicyClient::UploadDeviceStatus( |
| 272 const em::DeviceStatusReportRequest* device_status, | 334 const em::DeviceStatusReportRequest* device_status, |
| 273 const em::SessionStatusReportRequest* session_status, | 335 const em::SessionStatusReportRequest* session_status, |
| 274 const CloudPolicyClient::StatusCallback& callback) { | 336 const CloudPolicyClient::StatusCallback& callback) { |
| 275 CHECK(is_registered()); | 337 CHECK(is_registered()); |
| 276 // Should pass in at least one type of status. | 338 // Should pass in at least one type of status. |
| 277 DCHECK(device_status || session_status); | 339 DCHECK(device_status || session_status); |
| 278 std::unique_ptr<DeviceManagementRequestJob> request_job(service_->CreateJob( | 340 std::unique_ptr<DeviceManagementRequestJob> request_job(service_->CreateJob( |
| 279 DeviceManagementRequestJob::TYPE_UPLOAD_STATUS, GetRequestContext())); | 341 DeviceManagementRequestJob::TYPE_UPLOAD_STATUS, GetRequestContext())); |
| 280 request_job->SetDMToken(dm_token_); | 342 request_job->SetDMToken(dm_token_); |
| 281 request_job->SetClientID(client_id_); | 343 request_job->SetClientID(client_id_); |
| 282 | 344 |
| 283 em::DeviceManagementRequest* request = request_job->GetRequest(); | 345 em::DeviceManagementRequest* request = request_job->GetRequest(); |
| 284 if (device_status) | 346 if (device_status) |
| 285 *request->mutable_device_status_report_request() = *device_status; | 347 *request->mutable_device_status_report_request() = *device_status; |
| 286 if (session_status) | 348 if (session_status) |
| 287 *request->mutable_session_status_report_request() = *session_status; | 349 *request->mutable_session_status_report_request() = *session_status; |
| 288 | 350 |
| 289 const DeviceManagementRequestJob::Callback job_callback = | 351 const DeviceManagementRequestJob::Callback job_callback = |
| 290 base::Bind(&CloudPolicyClient::OnStatusUploadCompleted, | 352 base::Bind(&CloudPolicyClient::OnStatusUploadCompleted, |
| 291 base::Unretained(this), request_job.get(), callback); | 353 weak_ptr_factory_.GetWeakPtr(), request_job.get(), callback); |
| 292 | 354 |
| 293 request_jobs_.push_back(std::move(request_job)); | 355 request_jobs_.push_back(std::move(request_job)); |
| 294 request_jobs_.back()->Start(job_callback); | 356 request_jobs_.back()->Start(job_callback); |
| 295 } | 357 } |
| 296 | 358 |
| 297 void CloudPolicyClient::FetchRemoteCommands( | 359 void CloudPolicyClient::FetchRemoteCommands( |
| 298 std::unique_ptr<RemoteCommandJob::UniqueIDType> last_command_id, | 360 std::unique_ptr<RemoteCommandJob::UniqueIDType> last_command_id, |
| 299 const std::vector<em::RemoteCommandResult>& command_results, | 361 const std::vector<em::RemoteCommandResult>& command_results, |
| 300 const RemoteCommandCallback& callback) { | 362 const RemoteCommandCallback& callback) { |
| 301 CHECK(is_registered()); | 363 CHECK(is_registered()); |
| 302 std::unique_ptr<DeviceManagementRequestJob> request_job(service_->CreateJob( | 364 std::unique_ptr<DeviceManagementRequestJob> request_job(service_->CreateJob( |
| 303 DeviceManagementRequestJob::TYPE_REMOTE_COMMANDS, GetRequestContext())); | 365 DeviceManagementRequestJob::TYPE_REMOTE_COMMANDS, GetRequestContext())); |
| 304 | 366 |
| 305 request_job->SetDMToken(dm_token_); | 367 request_job->SetDMToken(dm_token_); |
| 306 request_job->SetClientID(client_id_); | 368 request_job->SetClientID(client_id_); |
| 307 | 369 |
| 308 em::DeviceRemoteCommandRequest* const request = | 370 em::DeviceRemoteCommandRequest* const request = |
| 309 request_job->GetRequest()->mutable_remote_command_request(); | 371 request_job->GetRequest()->mutable_remote_command_request(); |
| 310 | 372 |
| 311 if (last_command_id) | 373 if (last_command_id) |
| 312 request->set_last_command_unique_id(*last_command_id); | 374 request->set_last_command_unique_id(*last_command_id); |
| 313 | 375 |
| 314 for (const auto& command_result : command_results) | 376 for (const auto& command_result : command_results) |
| 315 *request->add_command_results() = command_result; | 377 *request->add_command_results() = command_result; |
| 316 | 378 |
| 317 const DeviceManagementRequestJob::Callback job_callback = | 379 const DeviceManagementRequestJob::Callback job_callback = |
| 318 base::Bind(&CloudPolicyClient::OnRemoteCommandsFetched, | 380 base::Bind(&CloudPolicyClient::OnRemoteCommandsFetched, |
| 319 base::Unretained(this), request_job.get(), callback); | 381 weak_ptr_factory_.GetWeakPtr(), request_job.get(), callback); |
| 320 | 382 |
| 321 request_jobs_.push_back(std::move(request_job)); | 383 request_jobs_.push_back(std::move(request_job)); |
| 322 request_jobs_.back()->Start(job_callback); | 384 request_jobs_.back()->Start(job_callback); |
| 323 } | 385 } |
| 324 | 386 |
| 325 void CloudPolicyClient::GetDeviceAttributeUpdatePermission( | 387 void CloudPolicyClient::GetDeviceAttributeUpdatePermission( |
| 326 const std::string &auth_token, | 388 const std::string &auth_token, |
| 327 const CloudPolicyClient::StatusCallback& callback) { | 389 const CloudPolicyClient::StatusCallback& callback) { |
| 328 // TODO(pbond): remove this LOG once http://crbug.com/586961 is fixed. | 390 // TODO(pbond): remove this LOG once http://crbug.com/586961 is fixed. |
| 329 LOG(WARNING) << "Send DeviceAttributeUpdatePermissionRequest"; | 391 LOG(WARNING) << "Send DeviceAttributeUpdatePermissionRequest"; |
| 330 CHECK(is_registered()); | 392 CHECK(is_registered()); |
| 331 DCHECK(!auth_token.empty()); | 393 DCHECK(!auth_token.empty()); |
| 332 | 394 |
| 333 std::unique_ptr<DeviceManagementRequestJob> request_job(service_->CreateJob( | 395 std::unique_ptr<DeviceManagementRequestJob> request_job(service_->CreateJob( |
| 334 DeviceManagementRequestJob::TYPE_ATTRIBUTE_UPDATE_PERMISSION, | 396 DeviceManagementRequestJob::TYPE_ATTRIBUTE_UPDATE_PERMISSION, |
| 335 GetRequestContext())); | 397 GetRequestContext())); |
| 336 | 398 |
| 337 request_job->SetOAuthToken(auth_token); | 399 request_job->SetOAuthToken(auth_token); |
| 338 request_job->SetClientID(client_id_); | 400 request_job->SetClientID(client_id_); |
| 339 | 401 |
| 340 request_job->GetRequest()-> | 402 request_job->GetRequest()-> |
| 341 mutable_device_attribute_update_permission_request(); | 403 mutable_device_attribute_update_permission_request(); |
| 342 | 404 |
| 343 const DeviceManagementRequestJob::Callback job_callback = | 405 const DeviceManagementRequestJob::Callback job_callback = |
| 344 base::Bind(&CloudPolicyClient::OnDeviceAttributeUpdatePermissionCompleted, | 406 base::Bind(&CloudPolicyClient::OnDeviceAttributeUpdatePermissionCompleted, |
| 345 base::Unretained(this), request_job.get(), callback); | 407 weak_ptr_factory_.GetWeakPtr(), request_job.get(), callback); |
| 346 | 408 |
| 347 request_jobs_.push_back(std::move(request_job)); | 409 request_jobs_.push_back(std::move(request_job)); |
| 348 request_jobs_.back()->Start(job_callback); | 410 request_jobs_.back()->Start(job_callback); |
| 349 } | 411 } |
| 350 | 412 |
| 351 void CloudPolicyClient::UpdateDeviceAttributes( | 413 void CloudPolicyClient::UpdateDeviceAttributes( |
| 352 const std::string& auth_token, | 414 const std::string& auth_token, |
| 353 const std::string& asset_id, | 415 const std::string& asset_id, |
| 354 const std::string& location, | 416 const std::string& location, |
| 355 const CloudPolicyClient::StatusCallback& callback) { | 417 const CloudPolicyClient::StatusCallback& callback) { |
| 356 CHECK(is_registered()); | 418 CHECK(is_registered()); |
| 357 DCHECK(!auth_token.empty()); | 419 DCHECK(!auth_token.empty()); |
| 358 | 420 |
| 359 std::unique_ptr<DeviceManagementRequestJob> request_job(service_->CreateJob( | 421 std::unique_ptr<DeviceManagementRequestJob> request_job(service_->CreateJob( |
| 360 DeviceManagementRequestJob::TYPE_ATTRIBUTE_UPDATE, GetRequestContext())); | 422 DeviceManagementRequestJob::TYPE_ATTRIBUTE_UPDATE, GetRequestContext())); |
| 361 | 423 |
| 362 request_job->SetOAuthToken(auth_token); | 424 request_job->SetOAuthToken(auth_token); |
| 363 request_job->SetClientID(client_id_); | 425 request_job->SetClientID(client_id_); |
| 364 | 426 |
| 365 em::DeviceAttributeUpdateRequest* request = | 427 em::DeviceAttributeUpdateRequest* request = |
| 366 request_job->GetRequest()->mutable_device_attribute_update_request(); | 428 request_job->GetRequest()->mutable_device_attribute_update_request(); |
| 367 | 429 |
| 368 request->set_asset_id(asset_id); | 430 request->set_asset_id(asset_id); |
| 369 request->set_location(location); | 431 request->set_location(location); |
| 370 | 432 |
| 371 const DeviceManagementRequestJob::Callback job_callback = | 433 const DeviceManagementRequestJob::Callback job_callback = |
| 372 base::Bind(&CloudPolicyClient::OnDeviceAttributeUpdated, | 434 base::Bind(&CloudPolicyClient::OnDeviceAttributeUpdated, |
| 373 base::Unretained(this), request_job.get(), callback); | 435 weak_ptr_factory_.GetWeakPtr(), request_job.get(), callback); |
| 374 | 436 |
| 375 request_jobs_.push_back(std::move(request_job)); | 437 request_jobs_.push_back(std::move(request_job)); |
| 376 request_jobs_.back()->Start(job_callback); | 438 request_jobs_.back()->Start(job_callback); |
| 377 } | 439 } |
| 378 | 440 |
| 379 void CloudPolicyClient::UpdateGcmId( | 441 void CloudPolicyClient::UpdateGcmId( |
| 380 const std::string& gcm_id, | 442 const std::string& gcm_id, |
| 381 const CloudPolicyClient::StatusCallback& callback) { | 443 const CloudPolicyClient::StatusCallback& callback) { |
| 382 CHECK(is_registered()); | 444 CHECK(is_registered()); |
| 383 | 445 |
| 384 std::unique_ptr<DeviceManagementRequestJob> request_job(service_->CreateJob( | 446 std::unique_ptr<DeviceManagementRequestJob> request_job(service_->CreateJob( |
| 385 DeviceManagementRequestJob::TYPE_GCM_ID_UPDATE, GetRequestContext())); | 447 DeviceManagementRequestJob::TYPE_GCM_ID_UPDATE, GetRequestContext())); |
| 386 | 448 |
| 387 request_job->SetDMToken(dm_token_); | 449 request_job->SetDMToken(dm_token_); |
| 388 request_job->SetClientID(client_id_); | 450 request_job->SetClientID(client_id_); |
| 389 | 451 |
| 390 em::GcmIdUpdateRequest* const request = | 452 em::GcmIdUpdateRequest* const request = |
| 391 request_job->GetRequest()->mutable_gcm_id_update_request(); | 453 request_job->GetRequest()->mutable_gcm_id_update_request(); |
| 392 | 454 |
| 393 request->set_gcm_id(gcm_id); | 455 request->set_gcm_id(gcm_id); |
| 394 | 456 |
| 395 const DeviceManagementRequestJob::Callback job_callback = | 457 const DeviceManagementRequestJob::Callback job_callback = |
| 396 base::Bind(&CloudPolicyClient::OnGcmIdUpdated, base::Unretained(this), | 458 base::Bind(&CloudPolicyClient::OnGcmIdUpdated, |
| 397 request_job.get(), callback); | 459 weak_ptr_factory_.GetWeakPtr(), request_job.get(), callback); |
| 398 | 460 |
| 399 request_jobs_.push_back(std::move(request_job)); | 461 request_jobs_.push_back(std::move(request_job)); |
| 400 request_jobs_.back()->Start(job_callback); | 462 request_jobs_.back()->Start(job_callback); |
| 401 } | 463 } |
| 402 | 464 |
| 403 void CloudPolicyClient::AddObserver(Observer* observer) { | 465 void CloudPolicyClient::AddObserver(Observer* observer) { |
| 404 observers_.AddObserver(observer); | 466 observers_.AddObserver(observer); |
| 405 } | 467 } |
| 406 | 468 |
| 407 void CloudPolicyClient::RemoveObserver(Observer* observer) { | 469 void CloudPolicyClient::RemoveObserver(Observer* observer) { |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 717 | 779 |
| 718 void CloudPolicyClient::NotifyRobotAuthCodesFetched() { | 780 void CloudPolicyClient::NotifyRobotAuthCodesFetched() { |
| 719 FOR_EACH_OBSERVER(Observer, observers_, OnRobotAuthCodesFetched(this)); | 781 FOR_EACH_OBSERVER(Observer, observers_, OnRobotAuthCodesFetched(this)); |
| 720 } | 782 } |
| 721 | 783 |
| 722 void CloudPolicyClient::NotifyClientError() { | 784 void CloudPolicyClient::NotifyClientError() { |
| 723 FOR_EACH_OBSERVER(Observer, observers_, OnClientError(this)); | 785 FOR_EACH_OBSERVER(Observer, observers_, OnClientError(this)); |
| 724 } | 786 } |
| 725 | 787 |
| 726 } // namespace policy | 788 } // namespace policy |
| OLD | NEW |