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 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 const std::string& data) { | 165 const std::string& data) { |
164 // Delete ourselves when this is done. | 166 // Delete ourselves when this is done. |
165 scoped_ptr<DeviceManagementJob> scoped_killer(this); | 167 scoped_ptr<DeviceManagementJob> scoped_killer(this); |
166 | 168 |
167 if (status.status() != net::URLRequestStatus::SUCCESS) { | 169 if (status.status() != net::URLRequestStatus::SUCCESS) { |
168 OnError(DeviceManagementBackend::kErrorRequestFailed); | 170 OnError(DeviceManagementBackend::kErrorRequestFailed); |
169 return; | 171 return; |
170 } | 172 } |
171 | 173 |
172 if (response_code != 200) { | 174 if (response_code != 200) { |
173 OnError(DeviceManagementBackend::kErrorHttpStatus); | 175 if (response_code == 400) |
| 176 OnError(DeviceManagementBackend::kErrorRequestInvalid); |
| 177 else |
| 178 OnError(DeviceManagementBackend::kErrorHttpStatus); |
174 return; | 179 return; |
175 } | 180 } |
176 | 181 |
177 em::DeviceManagementResponse response; | 182 em::DeviceManagementResponse response; |
178 if (!response.ParseFromString(data)) { | 183 if (!response.ParseFromString(data)) { |
179 OnError(DeviceManagementBackend::kErrorResponseDecoding); | 184 OnError(DeviceManagementBackend::kErrorResponseDecoding); |
180 return; | 185 return; |
181 } | 186 } |
182 | 187 |
183 // Check service error code. | 188 // Check service error code. |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 } | 228 } |
224 | 229 |
225 // Handles device registration jobs. | 230 // Handles device registration jobs. |
226 class DeviceManagementRegisterJob : public DeviceManagementJobBase { | 231 class DeviceManagementRegisterJob : public DeviceManagementJobBase { |
227 public: | 232 public: |
228 DeviceManagementRegisterJob( | 233 DeviceManagementRegisterJob( |
229 DeviceManagementBackendImpl* backend_impl, | 234 DeviceManagementBackendImpl* backend_impl, |
230 const std::string& auth_token, | 235 const std::string& auth_token, |
231 const std::string& device_id, | 236 const std::string& device_id, |
232 const em::DeviceRegisterRequest& request, | 237 const em::DeviceRegisterRequest& request, |
233 DeviceManagementBackend::DeviceRegisterResponseDelegate* delegate); | 238 DeviceManagementBackend::DeviceRegisterResponseDelegate* delegate) |
| 239 : DeviceManagementJobBase( |
| 240 backend_impl, |
| 241 DeviceManagementBackendImpl::kValueRequestRegister, |
| 242 device_id), |
| 243 delegate_(delegate) { |
| 244 SetAuthToken(auth_token); |
| 245 em::DeviceManagementRequest request_wrapper; |
| 246 request_wrapper.mutable_register_request()->CopyFrom(request); |
| 247 SetPayload(request_wrapper); |
| 248 } |
234 virtual ~DeviceManagementRegisterJob() {} | 249 virtual ~DeviceManagementRegisterJob() {} |
235 | 250 |
236 private: | 251 private: |
237 // DeviceManagementJobBase overrides. | 252 // DeviceManagementJobBase overrides. |
238 virtual void OnError(DeviceManagementBackend::ErrorCode error) { | 253 virtual void OnError(DeviceManagementBackend::ErrorCode error) { |
239 delegate_->OnError(error); | 254 delegate_->OnError(error); |
240 } | 255 } |
241 virtual void OnResponse(const em::DeviceManagementResponse& response) { | 256 virtual void OnResponse(const em::DeviceManagementResponse& response) { |
242 delegate_->HandleRegisterResponse(response.register_response()); | 257 delegate_->HandleRegisterResponse(response.register_response()); |
243 } | 258 } |
244 | 259 |
245 DeviceManagementBackend::DeviceRegisterResponseDelegate* delegate_; | 260 DeviceManagementBackend::DeviceRegisterResponseDelegate* delegate_; |
246 | 261 |
247 DISALLOW_COPY_AND_ASSIGN(DeviceManagementRegisterJob); | 262 DISALLOW_COPY_AND_ASSIGN(DeviceManagementRegisterJob); |
248 }; | 263 }; |
249 | 264 |
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. | 265 // Handles device unregistration jobs. |
268 class DeviceManagementUnregisterJob : public DeviceManagementJobBase { | 266 class DeviceManagementUnregisterJob : public DeviceManagementJobBase { |
269 public: | 267 public: |
270 DeviceManagementUnregisterJob( | 268 DeviceManagementUnregisterJob( |
271 DeviceManagementBackendImpl* backend_impl, | 269 DeviceManagementBackendImpl* backend_impl, |
| 270 const std::string& device_management_token, |
272 const std::string& device_id, | 271 const std::string& device_id, |
273 const std::string& device_management_token, | |
274 const em::DeviceUnregisterRequest& request, | 272 const em::DeviceUnregisterRequest& request, |
275 DeviceManagementBackend::DeviceUnregisterResponseDelegate* delegate); | 273 DeviceManagementBackend::DeviceUnregisterResponseDelegate* delegate) |
| 274 : DeviceManagementJobBase( |
| 275 backend_impl, |
| 276 DeviceManagementBackendImpl::kValueRequestUnregister, |
| 277 device_id), |
| 278 delegate_(delegate) { |
| 279 SetDeviceManagementToken(device_management_token); |
| 280 em::DeviceManagementRequest request_wrapper; |
| 281 request_wrapper.mutable_unregister_request()->CopyFrom(request); |
| 282 SetPayload(request_wrapper); |
| 283 } |
276 virtual ~DeviceManagementUnregisterJob() {} | 284 virtual ~DeviceManagementUnregisterJob() {} |
277 | 285 |
278 private: | 286 private: |
279 // DeviceManagementJobBase overrides. | 287 // DeviceManagementJobBase overrides. |
280 virtual void OnError(DeviceManagementBackend::ErrorCode error) { | 288 virtual void OnError(DeviceManagementBackend::ErrorCode error) { |
281 delegate_->OnError(error); | 289 delegate_->OnError(error); |
282 } | 290 } |
283 virtual void OnResponse(const em::DeviceManagementResponse& response) { | 291 virtual void OnResponse(const em::DeviceManagementResponse& response) { |
284 delegate_->HandleUnregisterResponse(response.unregister_response()); | 292 delegate_->HandleUnregisterResponse(response.unregister_response()); |
285 } | 293 } |
286 | 294 |
287 DeviceManagementBackend::DeviceUnregisterResponseDelegate* delegate_; | 295 DeviceManagementBackend::DeviceUnregisterResponseDelegate* delegate_; |
288 | 296 |
289 DISALLOW_COPY_AND_ASSIGN(DeviceManagementUnregisterJob); | 297 DISALLOW_COPY_AND_ASSIGN(DeviceManagementUnregisterJob); |
290 }; | 298 }; |
291 | 299 |
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. | 300 // Handles policy request jobs. |
310 class DeviceManagementPolicyJob : public DeviceManagementJobBase { | 301 class DeviceManagementPolicyJob : public DeviceManagementJobBase { |
311 public: | 302 public: |
312 DeviceManagementPolicyJob( | 303 DeviceManagementPolicyJob( |
313 DeviceManagementBackendImpl* backend_impl, | 304 DeviceManagementBackendImpl* backend_impl, |
314 const std::string& device_management_token, | 305 const std::string& device_management_token, |
315 const std::string& device_id, | 306 const std::string& device_id, |
316 const em::DevicePolicyRequest& request, | 307 const em::DevicePolicyRequest& request, |
317 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate); | 308 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate) |
| 309 : DeviceManagementJobBase( |
| 310 backend_impl, |
| 311 DeviceManagementBackendImpl::kValueRequestPolicy, |
| 312 device_id), |
| 313 delegate_(delegate) { |
| 314 SetDeviceManagementToken(device_management_token); |
| 315 em::DeviceManagementRequest request_wrapper; |
| 316 request_wrapper.mutable_policy_request()->CopyFrom(request); |
| 317 SetPayload(request_wrapper); |
| 318 } |
318 virtual ~DeviceManagementPolicyJob() {} | 319 virtual ~DeviceManagementPolicyJob() {} |
319 | 320 |
320 private: | 321 private: |
321 // DeviceManagementJobBase overrides. | 322 // DeviceManagementJobBase overrides. |
322 virtual void OnError(DeviceManagementBackend::ErrorCode error) { | 323 virtual void OnError(DeviceManagementBackend::ErrorCode error) { |
323 delegate_->OnError(error); | 324 delegate_->OnError(error); |
324 } | 325 } |
325 virtual void OnResponse(const em::DeviceManagementResponse& response) { | 326 virtual void OnResponse(const em::DeviceManagementResponse& response) { |
326 delegate_->HandlePolicyResponse(response.policy_response()); | 327 delegate_->HandlePolicyResponse(response.policy_response()); |
327 } | 328 } |
328 | 329 |
329 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate_; | 330 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate_; |
330 | 331 |
331 DISALLOW_COPY_AND_ASSIGN(DeviceManagementPolicyJob); | 332 DISALLOW_COPY_AND_ASSIGN(DeviceManagementPolicyJob); |
332 }; | 333 }; |
333 | 334 |
334 DeviceManagementPolicyJob::DeviceManagementPolicyJob( | 335 // Handles cloud policy request jobs. |
335 DeviceManagementBackendImpl* backend_impl, | 336 class CloudPolicyJob : public DeviceManagementJobBase { |
336 const std::string& device_management_token, | 337 public: |
337 const std::string& device_id, | 338 CloudPolicyJob( |
338 const em::DevicePolicyRequest& request, | 339 DeviceManagementBackendImpl* backend_impl, |
339 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate) | 340 const std::string& device_management_token, |
340 : DeviceManagementJobBase( | 341 const std::string& device_id, |
| 342 const em::CloudPolicyRequest& request, |
| 343 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate) |
| 344 : DeviceManagementJobBase( |
341 backend_impl, | 345 backend_impl, |
342 DeviceManagementBackendImpl::kValueRequestPolicy, | 346 DeviceManagementBackendImpl::kValueRequestCloudPolicy, |
343 device_id), | 347 device_id), |
344 delegate_(delegate) { | 348 delegate_(delegate) { |
345 SetDeviceManagementToken(device_management_token); | 349 SetDeviceManagementToken(device_management_token); |
346 em::DeviceManagementRequest request_wrapper; | 350 em::DeviceManagementRequest request_wrapper; |
347 request_wrapper.mutable_policy_request()->CopyFrom(request); | 351 request_wrapper.mutable_cloud_policy_request()->CopyFrom(request); |
348 SetPayload(request_wrapper); | 352 SetPayload(request_wrapper); |
349 } | 353 } |
| 354 virtual ~CloudPolicyJob() {} |
| 355 |
| 356 private: |
| 357 // DeviceManagementJobBase overrides. |
| 358 virtual void OnError(DeviceManagementBackend::ErrorCode error) { |
| 359 delegate_->OnError(error); |
| 360 } |
| 361 virtual void OnResponse(const em::DeviceManagementResponse& response) { |
| 362 delegate_->HandleCloudPolicyResponse(response.cloud_policy_response()); |
| 363 } |
| 364 |
| 365 DeviceManagementBackend::DevicePolicyResponseDelegate* delegate_; |
| 366 |
| 367 DISALLOW_COPY_AND_ASSIGN(CloudPolicyJob); |
| 368 }; |
350 | 369 |
351 DeviceManagementBackendImpl::DeviceManagementBackendImpl( | 370 DeviceManagementBackendImpl::DeviceManagementBackendImpl( |
352 DeviceManagementService* service) | 371 DeviceManagementService* service) |
353 : service_(service) { | 372 : service_(service) { |
354 } | 373 } |
355 | 374 |
356 DeviceManagementBackendImpl::~DeviceManagementBackendImpl() { | 375 DeviceManagementBackendImpl::~DeviceManagementBackendImpl() { |
357 // Swap to a helper, so we don't interfere with the unregistration on delete. | 376 // Swap to a helper, so we don't interfere with the unregistration on delete. |
358 JobSet to_be_deleted; | 377 JobSet to_be_deleted; |
359 to_be_deleted.swap(pending_jobs_); | 378 to_be_deleted.swap(pending_jobs_); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 | 421 |
403 void DeviceManagementBackendImpl::ProcessPolicyRequest( | 422 void DeviceManagementBackendImpl::ProcessPolicyRequest( |
404 const std::string& device_management_token, | 423 const std::string& device_management_token, |
405 const std::string& device_id, | 424 const std::string& device_id, |
406 const em::DevicePolicyRequest& request, | 425 const em::DevicePolicyRequest& request, |
407 DevicePolicyResponseDelegate* delegate) { | 426 DevicePolicyResponseDelegate* delegate) { |
408 AddJob(new DeviceManagementPolicyJob(this, device_management_token, device_id, | 427 AddJob(new DeviceManagementPolicyJob(this, device_management_token, device_id, |
409 request, delegate)); | 428 request, delegate)); |
410 } | 429 } |
411 | 430 |
| 431 void DeviceManagementBackendImpl::ProcessCloudPolicyRequest( |
| 432 const std::string& device_management_token, |
| 433 const std::string& device_id, |
| 434 const em::CloudPolicyRequest& request, |
| 435 DevicePolicyResponseDelegate* delegate) { |
| 436 AddJob(new CloudPolicyJob(this, device_management_token, device_id, |
| 437 request, delegate)); |
| 438 } |
| 439 |
412 } // namespace policy | 440 } // namespace policy |
OLD | NEW |