OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/policy/device_management_backend_impl.h" | 5 #include "chrome/browser/policy/device_management_backend_impl.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
11 #include "net/base/escape.h" | 11 #include "net/base/escape.h" |
12 #include "net/url_request/url_request_status.h" | 12 #include "net/url_request/url_request_status.h" |
13 #include "chrome/browser/policy/device_management_service.h" | 13 #include "chrome/browser/policy/device_management_service.h" |
14 #include "chrome/common/chrome_version_info.h" | 14 #include "chrome/common/chrome_version_info.h" |
15 | 15 |
16 namespace policy { | 16 namespace policy { |
17 | 17 |
18 // Name constants for URL query parameters. | 18 // Name constants for URL query parameters. |
19 const char DeviceManagementBackendImpl::kParamRequest[] = "request"; | 19 const char DeviceManagementBackendImpl::kParamRequest[] = "request"; |
20 const char DeviceManagementBackendImpl::kParamDeviceType[] = "devicetype"; | 20 const char DeviceManagementBackendImpl::kParamDeviceType[] = "devicetype"; |
21 const char DeviceManagementBackendImpl::kParamAppType[] = "apptype"; | 21 const char DeviceManagementBackendImpl::kParamAppType[] = "apptype"; |
22 const char DeviceManagementBackendImpl::kParamDeviceID[] = "deviceid"; | 22 const char DeviceManagementBackendImpl::kParamDeviceID[] = "deviceid"; |
23 const char DeviceManagementBackendImpl::kParamAgent[] = "agent"; | 23 const char DeviceManagementBackendImpl::kParamAgent[] = "agent"; |
24 | 24 |
25 // String constants for the device and app type we report to the server. | 25 // String constants for the device and app type we report to the server. |
26 const char DeviceManagementBackendImpl::kValueRequestRegister[] = "register"; | 26 const char DeviceManagementBackendImpl::kValueRequestRegister[] = "register"; |
27 const char DeviceManagementBackendImpl::kValueRequestUnregister[] = | 27 const char DeviceManagementBackendImpl::kValueRequestUnregister[] = |
28 "unregister"; | 28 "unregister"; |
29 const char DeviceManagementBackendImpl::kValueRequestPolicy[] = "policy"; | 29 const char DeviceManagementBackendImpl::kValueRequestPolicy[] = "policy"; |
| 30 const char DeviceManagementBackendImpl::kValueRequestCloudPolicy[] = |
| 31 "cloud_policy"; |
30 const char DeviceManagementBackendImpl::kValueDeviceType[] = "Chrome OS"; | 32 const char DeviceManagementBackendImpl::kValueDeviceType[] = "Chrome OS"; |
31 const char DeviceManagementBackendImpl::kValueAppType[] = "Chrome"; | 33 const char DeviceManagementBackendImpl::kValueAppType[] = "Chrome"; |
32 | 34 |
33 namespace { | 35 namespace { |
34 | 36 |
35 const char kValueAgent[] = "%s enterprise management client version %s (%s)"; | 37 const char kValueAgent[] = "%s enterprise management client version %s (%s)"; |
36 | 38 |
37 const char kPostContentType[] = "application/protobuf"; | 39 const char kPostContentType[] = "application/protobuf"; |
38 | 40 |
39 const char kServiceTokenAuthHeader[] = "Authorization: GoogleLogin auth="; | 41 const char kServiceTokenAuthHeader[] = "Authorization: GoogleLogin auth="; |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 } | 225 } |
224 | 226 |
225 // Handles device registration jobs. | 227 // Handles device registration jobs. |
226 class DeviceManagementRegisterJob : public DeviceManagementJobBase { | 228 class DeviceManagementRegisterJob : public DeviceManagementJobBase { |
227 public: | 229 public: |
228 DeviceManagementRegisterJob( | 230 DeviceManagementRegisterJob( |
229 DeviceManagementBackendImpl* backend_impl, | 231 DeviceManagementBackendImpl* backend_impl, |
230 const std::string& auth_token, | 232 const std::string& auth_token, |
231 const std::string& device_id, | 233 const std::string& device_id, |
232 const em::DeviceRegisterRequest& request, | 234 const em::DeviceRegisterRequest& request, |
233 DeviceManagementBackend::DeviceRegisterResponseDelegate* delegate); | 235 DeviceManagementBackend::DeviceRegisterResponseDelegate* delegate) |
| 236 : DeviceManagementJobBase( |
| 237 backend_impl, |
| 238 DeviceManagementBackendImpl::kValueRequestRegister, |
| 239 device_id), |
| 240 delegate_(delegate) { |
| 241 SetAuthToken(auth_token); |
| 242 em::DeviceManagementRequest request_wrapper; |
| 243 request_wrapper.mutable_register_request()->CopyFrom(request); |
| 244 SetPayload(request_wrapper); |
| 245 } |
234 virtual ~DeviceManagementRegisterJob() {} | 246 virtual ~DeviceManagementRegisterJob() {} |
235 | 247 |
236 private: | 248 private: |
237 // DeviceManagementJobBase overrides. | 249 // DeviceManagementJobBase overrides. |
238 virtual void OnError(DeviceManagementBackend::ErrorCode error) { | 250 virtual void OnError(DeviceManagementBackend::ErrorCode error) { |
239 delegate_->OnError(error); | 251 delegate_->OnError(error); |
240 } | 252 } |
241 virtual void OnResponse(const em::DeviceManagementResponse& response) { | 253 virtual void OnResponse(const em::DeviceManagementResponse& response) { |
242 delegate_->HandleRegisterResponse(response.register_response()); | 254 delegate_->HandleRegisterResponse(response.register_response()); |
243 } | 255 } |
244 | 256 |
245 DeviceManagementBackend::DeviceRegisterResponseDelegate* delegate_; | 257 DeviceManagementBackend::DeviceRegisterResponseDelegate* delegate_; |
246 | 258 |
247 DISALLOW_COPY_AND_ASSIGN(DeviceManagementRegisterJob); | 259 DISALLOW_COPY_AND_ASSIGN(DeviceManagementRegisterJob); |
248 }; | 260 }; |
249 | 261 |
250 DeviceManagementRegisterJob::DeviceManagementRegisterJob( | |
251 DeviceManagementBackendImpl* backend_impl, | |
252 const std::string& auth_token, | |
253 const std::string& device_id, | |
254 const em::DeviceRegisterRequest& request, | |
255 DeviceManagementBackend::DeviceRegisterResponseDelegate* delegate) | |
256 : DeviceManagementJobBase( | |
257 backend_impl, | |
258 DeviceManagementBackendImpl::kValueRequestRegister, | |
259 device_id), | |
260 delegate_(delegate) { | |
261 SetAuthToken(auth_token); | |
262 em::DeviceManagementRequest request_wrapper; | |
263 request_wrapper.mutable_register_request()->CopyFrom(request); | |
264 SetPayload(request_wrapper); | |
265 } | |
266 | |
267 // Handles device unregistration jobs. | 262 // Handles device unregistration jobs. |
268 class DeviceManagementUnregisterJob : public DeviceManagementJobBase { | 263 class DeviceManagementUnregisterJob : public DeviceManagementJobBase { |
269 public: | 264 public: |
270 DeviceManagementUnregisterJob( | 265 DeviceManagementUnregisterJob( |
271 DeviceManagementBackendImpl* backend_impl, | 266 DeviceManagementBackendImpl* backend_impl, |
272 const std::string& device_id, | 267 const std::string& device_id, |
273 const std::string& device_management_token, | 268 const std::string& device_management_token, |
274 const em::DeviceUnregisterRequest& request, | 269 const em::DeviceUnregisterRequest& request, |
275 DeviceManagementBackend::DeviceUnregisterResponseDelegate* delegate); | 270 DeviceManagementBackend::DeviceUnregisterResponseDelegate* delegate) |
| 271 : DeviceManagementJobBase( |
| 272 backend_impl, |
| 273 DeviceManagementBackendImpl::kValueRequestUnregister, |
| 274 device_id), |
| 275 delegate_(delegate) { |
| 276 SetDeviceManagementToken(device_management_token); |
| 277 em::DeviceManagementRequest request_wrapper; |
| 278 request_wrapper.mutable_unregister_request()->CopyFrom(request); |
| 279 SetPayload(request_wrapper); |
| 280 } |
276 virtual ~DeviceManagementUnregisterJob() {} | 281 virtual ~DeviceManagementUnregisterJob() {} |
277 | 282 |
278 private: | 283 private: |
279 // DeviceManagementJobBase overrides. | 284 // DeviceManagementJobBase overrides. |
280 virtual void OnError(DeviceManagementBackend::ErrorCode error) { | 285 virtual void OnError(DeviceManagementBackend::ErrorCode error) { |
281 delegate_->OnError(error); | 286 delegate_->OnError(error); |
282 } | 287 } |
283 virtual void OnResponse(const em::DeviceManagementResponse& response) { | 288 virtual void OnResponse(const em::DeviceManagementResponse& response) { |
284 delegate_->HandleUnregisterResponse(response.unregister_response()); | 289 delegate_->HandleUnregisterResponse(response.unregister_response()); |
285 } | 290 } |
286 | 291 |
287 DeviceManagementBackend::DeviceUnregisterResponseDelegate* delegate_; | 292 DeviceManagementBackend::DeviceUnregisterResponseDelegate* delegate_; |
288 | 293 |
289 DISALLOW_COPY_AND_ASSIGN(DeviceManagementUnregisterJob); | 294 DISALLOW_COPY_AND_ASSIGN(DeviceManagementUnregisterJob); |
290 }; | 295 }; |
291 | 296 |
292 DeviceManagementUnregisterJob::DeviceManagementUnregisterJob( | |
293 DeviceManagementBackendImpl* backend_impl, | |
294 const std::string& device_management_token, | |
295 const std::string& device_id, | |
296 const em::DeviceUnregisterRequest& request, | |
297 DeviceManagementBackend::DeviceUnregisterResponseDelegate* delegate) | |
298 : DeviceManagementJobBase( | |
299 backend_impl, | |
300 DeviceManagementBackendImpl::kValueRequestUnregister, | |
301 device_id), | |
302 delegate_(delegate) { | |
303 SetDeviceManagementToken(device_management_token); | |
304 em::DeviceManagementRequest request_wrapper; | |
305 request_wrapper.mutable_unregister_request()->CopyFrom(request); | |
306 SetPayload(request_wrapper); | |
307 } | |
308 | |
309 // Handles policy request jobs. | 297 // Handles policy request jobs. |
310 class DeviceManagementPolicyJob : public DeviceManagementJobBase { | 298 class DeviceManagementPolicyJob : public DeviceManagementJobBase { |
311 public: | 299 public: |
312 DeviceManagementPolicyJob( | 300 DeviceManagementPolicyJob( |
313 DeviceManagementBackendImpl* backend_impl, | 301 DeviceManagementBackendImpl* backend_impl, |
314 const std::string& device_management_token, | 302 const std::string& device_management_token, |
315 const std::string& device_id, | 303 const std::string& device_id, |
316 const em::DevicePolicyRequest& request, | 304 const em::DevicePolicyRequest& request, |
317 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate); | 305 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate) |
| 306 : DeviceManagementJobBase( |
| 307 backend_impl, |
| 308 DeviceManagementBackendImpl::kValueRequestPolicy, |
| 309 device_id), |
| 310 delegate_(delegate) { |
| 311 SetDeviceManagementToken(device_management_token); |
| 312 em::DeviceManagementRequest request_wrapper; |
| 313 request_wrapper.mutable_policy_request()->CopyFrom(request); |
| 314 SetPayload(request_wrapper); |
| 315 } |
318 virtual ~DeviceManagementPolicyJob() {} | 316 virtual ~DeviceManagementPolicyJob() {} |
319 | 317 |
320 private: | 318 private: |
321 // DeviceManagementJobBase overrides. | 319 // DeviceManagementJobBase overrides. |
322 virtual void OnError(DeviceManagementBackend::ErrorCode error) { | 320 virtual void OnError(DeviceManagementBackend::ErrorCode error) { |
323 delegate_->OnError(error); | 321 delegate_->OnError(error); |
324 } | 322 } |
325 virtual void OnResponse(const em::DeviceManagementResponse& response) { | 323 virtual void OnResponse(const em::DeviceManagementResponse& response) { |
326 delegate_->HandlePolicyResponse(response.policy_response()); | 324 delegate_->HandlePolicyResponse(response.policy_response()); |
327 } | 325 } |
328 | 326 |
329 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate_; | 327 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate_; |
330 | 328 |
331 DISALLOW_COPY_AND_ASSIGN(DeviceManagementPolicyJob); | 329 DISALLOW_COPY_AND_ASSIGN(DeviceManagementPolicyJob); |
332 }; | 330 }; |
333 | 331 |
334 DeviceManagementPolicyJob::DeviceManagementPolicyJob( | 332 // Handles cloud policy request jobs. |
335 DeviceManagementBackendImpl* backend_impl, | 333 class CloudPolicyJob : public DeviceManagementJobBase { |
336 const std::string& device_management_token, | 334 public: |
337 const std::string& device_id, | 335 CloudPolicyJob( |
338 const em::DevicePolicyRequest& request, | 336 DeviceManagementBackendImpl* backend_impl, |
339 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate) | 337 const std::string& device_management_token, |
340 : DeviceManagementJobBase( | 338 const std::string& device_id, |
| 339 const em::CloudPolicyRequest& request, |
| 340 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate) |
| 341 : DeviceManagementJobBase( |
341 backend_impl, | 342 backend_impl, |
342 DeviceManagementBackendImpl::kValueRequestPolicy, | 343 DeviceManagementBackendImpl::kValueRequestCloudPolicy, |
343 device_id), | 344 device_id), |
344 delegate_(delegate) { | 345 delegate_(delegate) { |
345 SetDeviceManagementToken(device_management_token); | 346 SetDeviceManagementToken(device_management_token); |
346 em::DeviceManagementRequest request_wrapper; | 347 em::DeviceManagementRequest request_wrapper; |
347 request_wrapper.mutable_policy_request()->CopyFrom(request); | 348 request_wrapper.mutable_cloud_policy_request()->CopyFrom(request); |
348 SetPayload(request_wrapper); | 349 SetPayload(request_wrapper); |
349 } | 350 } |
| 351 virtual ~CloudPolicyJob() {} |
| 352 |
| 353 private: |
| 354 // DeviceManagementJobBase overrides. |
| 355 virtual void OnError(DeviceManagementBackend::ErrorCode error) { |
| 356 delegate_->OnError(error); |
| 357 } |
| 358 virtual void OnResponse(const em::DeviceManagementResponse& response) { |
| 359 delegate_->HandleCloudPolicyResponse(response.cloud_policy_response()); |
| 360 } |
| 361 |
| 362 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate_; |
| 363 |
| 364 DISALLOW_COPY_AND_ASSIGN(CloudPolicyJob); |
| 365 }; |
350 | 366 |
351 DeviceManagementBackendImpl::DeviceManagementBackendImpl( | 367 DeviceManagementBackendImpl::DeviceManagementBackendImpl( |
352 DeviceManagementService* service) | 368 DeviceManagementService* service) |
353 : service_(service) { | 369 : service_(service) { |
354 } | 370 } |
355 | 371 |
356 DeviceManagementBackendImpl::~DeviceManagementBackendImpl() { | 372 DeviceManagementBackendImpl::~DeviceManagementBackendImpl() { |
357 // Swap to a helper, so we don't interfere with the unregistration on delete. | 373 // Swap to a helper, so we don't interfere with the unregistration on delete. |
358 JobSet to_be_deleted; | 374 JobSet to_be_deleted; |
359 to_be_deleted.swap(pending_jobs_); | 375 to_be_deleted.swap(pending_jobs_); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 | 418 |
403 void DeviceManagementBackendImpl::ProcessPolicyRequest( | 419 void DeviceManagementBackendImpl::ProcessPolicyRequest( |
404 const std::string& device_management_token, | 420 const std::string& device_management_token, |
405 const std::string& device_id, | 421 const std::string& device_id, |
406 const em::DevicePolicyRequest& request, | 422 const em::DevicePolicyRequest& request, |
407 DevicePolicyResponseDelegate* delegate) { | 423 DevicePolicyResponseDelegate* delegate) { |
408 AddJob(new DeviceManagementPolicyJob(this, device_management_token, device_id, | 424 AddJob(new DeviceManagementPolicyJob(this, device_management_token, device_id, |
409 request, delegate)); | 425 request, delegate)); |
410 } | 426 } |
411 | 427 |
| 428 void DeviceManagementBackendImpl::ProcessCloudPolicyRequest( |
| 429 const std::string& device_management_token, |
| 430 const std::string& device_id, |
| 431 const em::CloudPolicyRequest& request, |
| 432 DevicePolicyResponseDelegate* delegate) { |
| 433 AddJob(new CloudPolicyJob(this, device_management_token, device_id, |
| 434 request, delegate)); |
| 435 } |
| 436 |
412 } // namespace policy | 437 } // namespace policy |
OLD | NEW |