13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// found in the LICENSE file. 4201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 5201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#ifndef CHROME_BROWSER_POLICY_DEVICE_MANAGEMENT_SERVICE_H_ 6201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#define CHROME_BROWSER_POLICY_DEVICE_MANAGEMENT_SERVICE_H_ 7201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#pragma once 8201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 9201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include <deque> 10201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include <map> 11201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include <string> 12201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 13201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "base/basictypes.h" 14201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/policy/device_management_backend.h" 15201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/common/net/url_fetcher.h" 16201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "googleurl/src/gurl.h" 17201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 18201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass Profile; 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace net { 21201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass URLRequestContextGetter; 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 23201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 24201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochnamespace policy { 25201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 26201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass DeviceManagementBackendImpl; 27201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 28201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// The device management service is responsible for everything related to 29201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// communication with the device management server. It creates the backends 30201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// objects that the device management policy provider and friends use to issue 31201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// requests. 32201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass DeviceManagementService : public URLFetcher::Delegate { 33201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public: 34201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Describes a device management job handled by the service. 35201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch class DeviceManagementJob { 36201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public: 37201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual ~DeviceManagementJob() {} 38201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 39201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Handles the URL request response. 403f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen virtual void HandleResponse(const net::URLRequestStatus& status, 413f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen int response_code, 423f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const ResponseCookies& cookies, 433f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const std::string& data) = 0; 44201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 45201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Gets the URL to contact. 46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual GURL GetURL(const std::string& server_url) = 0; 47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 48201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Configures the fetcher, setting up payload and headers. 49201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void ConfigureRequest(URLFetcher* fetcher) = 0; 50201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch }; 51201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 52201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch explicit DeviceManagementService(const std::string& server_url); 53201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual ~DeviceManagementService(); 54201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 55201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Constructs a device management backend for use by client code. Ownership of 56201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // the returned backend object is transferred to the caller. 57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Marked virtual for the benefit of tests. 58dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual DeviceManagementBackend* CreateBackend(); 59201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 60201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Provides the backend with a request context so it can make actual network 61201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // requests. This will also fire any requests queued earlier. 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void Initialize(net::URLRequestContextGetter* request_context_getter); 63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 64201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Makes the service stop all requests and drop the reference to the request 65201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // context. 66201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void Shutdown(); 67201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 68201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Adds a job. Caller must make sure the job pointer stays valid until the job 69201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // completes or gets cancelled via RemoveJob(). 70201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void AddJob(DeviceManagementJob* job); 71201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 72201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Removes a job. The job will be removed and won't receive a completion 73201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // callback. 74201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void RemoveJob(DeviceManagementJob* job); 75201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 76201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private: 77201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch typedef std::map<const URLFetcher*, DeviceManagementJob*> JobFetcherMap; 78201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch typedef std::deque<DeviceManagementJob*> JobQueue; 79201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 80201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Starts the given job. 81201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void StartJob(DeviceManagementJob* job); 82201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 83201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // URLFetcher::Delegate override. 84201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void OnURLFetchComplete(const URLFetcher* source, 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const GURL& url, 863f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const net::URLRequestStatus& status, 87201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch int response_code, 88201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const ResponseCookies& cookies, 89201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::string& data); 90201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 91201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Server at which to contact the service. 92201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::string server_url_; 93201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 94201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The request context we use. 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<net::URLRequestContextGetter> request_context_getter_; 96201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 97201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The jobs we currently have in flight. 98201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch JobFetcherMap pending_jobs_; 99201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 100201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Jobs that are registered, but not started yet. 101201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch JobQueue queued_jobs_; 102201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 103201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch DISALLOW_COPY_AND_ASSIGN(DeviceManagementService); 104201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 105201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 106201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} // namespace policy 107201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 108201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#endif // CHROME_BROWSER_POLICY_DEVICE_MANAGEMENT_SERVICE_H_ 109