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 |