Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: components/policy/core/common/cloud/cloud_policy_client.cc

Issue 2261763002: Device enterprise registration with a certificate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Initialize pointers to nullptr. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698