• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #ifndef CHROME_BROWSER_POLICY_DEVICE_MANAGEMENT_SERVICE_H_
6 #define CHROME_BROWSER_POLICY_DEVICE_MANAGEMENT_SERVICE_H_
7 #pragma once
8 
9 #include <deque>
10 #include <map>
11 #include <string>
12 
13 #include "base/basictypes.h"
14 #include "chrome/browser/policy/device_management_backend.h"
15 #include "chrome/common/net/url_fetcher.h"
16 #include "googleurl/src/gurl.h"
17 
18 class Profile;
19 
20 namespace net {
21 class URLRequestContextGetter;
22 }
23 
24 namespace policy {
25 
26 class DeviceManagementBackendImpl;
27 
28 // The device management service is responsible for everything related to
29 // communication with the device management server. It creates the backends
30 // objects that the device management policy provider and friends use to issue
31 // requests.
32 class DeviceManagementService : public URLFetcher::Delegate {
33  public:
34   // Describes a device management job handled by the service.
35   class DeviceManagementJob {
36    public:
~DeviceManagementJob()37     virtual ~DeviceManagementJob() {}
38 
39     // Handles the URL request response.
40     virtual void HandleResponse(const net::URLRequestStatus& status,
41                                 int response_code,
42                                 const ResponseCookies& cookies,
43                                 const std::string& data) = 0;
44 
45     // Gets the URL to contact.
46     virtual GURL GetURL(const std::string& server_url) = 0;
47 
48     // Configures the fetcher, setting up payload and headers.
49     virtual void ConfigureRequest(URLFetcher* fetcher) = 0;
50   };
51 
52   explicit DeviceManagementService(const std::string& server_url);
53   virtual ~DeviceManagementService();
54 
55   // Constructs a device management backend for use by client code. Ownership of
56   // the returned backend object is transferred to the caller.
57   // Marked virtual for the benefit of tests.
58   virtual DeviceManagementBackend* CreateBackend();
59 
60   // Provides the backend with a request context so it can make actual network
61   // requests. This will also fire any requests queued earlier.
62   void Initialize(net::URLRequestContextGetter* request_context_getter);
63 
64   // Makes the service stop all requests and drop the reference to the request
65   // context.
66   void Shutdown();
67 
68   // Adds a job. Caller must make sure the job pointer stays valid until the job
69   // completes or gets cancelled via RemoveJob().
70   void AddJob(DeviceManagementJob* job);
71 
72   // Removes a job. The job will be removed and won't receive a completion
73   // callback.
74   void RemoveJob(DeviceManagementJob* job);
75 
76  private:
77   typedef std::map<const URLFetcher*, DeviceManagementJob*> JobFetcherMap;
78   typedef std::deque<DeviceManagementJob*> JobQueue;
79 
80   // Starts the given job.
81   void StartJob(DeviceManagementJob* job);
82 
83   // URLFetcher::Delegate override.
84   virtual void OnURLFetchComplete(const URLFetcher* source,
85                                   const GURL& url,
86                                   const net::URLRequestStatus& status,
87                                   int response_code,
88                                   const ResponseCookies& cookies,
89                                   const std::string& data);
90 
91   // Server at which to contact the service.
92   const std::string server_url_;
93 
94   // The request context we use.
95   scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
96 
97   // The jobs we currently have in flight.
98   JobFetcherMap pending_jobs_;
99 
100   // Jobs that are registered, but not started yet.
101   JobQueue queued_jobs_;
102 
103   DISALLOW_COPY_AND_ASSIGN(DeviceManagementService);
104 };
105 
106 }  // namespace policy
107 
108 #endif  // CHROME_BROWSER_POLICY_DEVICE_MANAGEMENT_SERVICE_H_
109