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

Unified Diff: chrome/browser/policy/cloud_policy_client.h

Issue 9109009: Introduce CloudPolicyClient (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Restore DCHECKS. Created 8 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/policy/cloud_policy_client.h
diff --git a/chrome/browser/policy/cloud_policy_client.h b/chrome/browser/policy/cloud_policy_client.h
new file mode 100644
index 0000000000000000000000000000000000000000..bdda599105277ebd8188f0af34b98f47170536f1
--- /dev/null
+++ b/chrome/browser/policy/cloud_policy_client.h
@@ -0,0 +1,207 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_POLICY_CLOUD_POLICY_CLIENT_H_
+#define CHROME_BROWSER_POLICY_CLOUD_POLICY_CLIENT_H_
+#pragma once
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/observer_list.h"
+#include "base/time.h"
+#include "chrome/browser/policy/cloud_policy_constants.h"
+#include "chrome/browser/policy/policy_constants.h"
+
+namespace enterprise_management {
+class DeviceManagementResponse;
+class DeviceRegisterRequest;
+class DeviceStatusReportRequest;
+class PolicyFetchRequest;
+class PolicyFetchResponse;
+class SessionStatusReportRequest;
+}
+
+namespace policy {
+
+class DeviceManagementRequestJob;
+class DeviceManagementService;
+
+// Implements the core logic required to talk to the device management service.
+// Also keeps track of the current state of the association with the service,
+// such as whether there is a valid registration (DMToken is present in that
+// case) and whether and what errors occurred in the latest request.
+//
+// Note that CloudPolicyClient doesn't do any validation of policy responses
+// such as signature and time stamp checks. These happen once the policy gets
+// installed in the cloud policy cache.
+class CloudPolicyClient {
+ public:
+ // Observer interface for state and policy changes.
+ class Observer {
+ public:
+ virtual ~Observer();
+
+ // Called when a policy fetch completes successfully. If a policy fetch
+ // triggers an error, OnClientError() will fire.
+ virtual void OnPolicyFetched(CloudPolicyClient* client) = 0;
+
+ // Called upon registration state changes. This callback is invoked for
+ // successful completion of registration and unregistration requests.
+ virtual void OnRegistrationStateChanged(CloudPolicyClient* client) = 0;
+
+ // Indicates there's been an error in a previously-issued request.
+ virtual void OnClientError(CloudPolicyClient* client) = 0;
+ };
+
+ // Delegate interface for supplying status information to upload to the server
+ // as part of the policy fetch request.
+ class StatusProvider {
+ public:
+ virtual ~StatusProvider();
+
+ // Retrieves status information to send with the next policy fetch.
+ // Implementations must return true if status information was filled in.
+ virtual bool GetDeviceStatus(
+ enterprise_management::DeviceStatusReportRequest* status) = 0;
+ virtual bool GetSessionStatus(
+ enterprise_management::SessionStatusReportRequest* status) = 0;
+
+ // Called after the status information has successfully been submitted to
+ // the server.
+ virtual void OnSubmittedSuccessfully() = 0;
+ };
+
+ // |provider| and |service| are weak pointers and it's the caller's
+ // responsibility to keep them valid for the lifetime of CloudPolicyClient.
+ CloudPolicyClient(const std::string& machine_id,
+ const std::string& machine_model,
+ UserAffiliation user_affiliation,
+ PolicyScope scope,
+ StatusProvider* provider,
+ DeviceManagementService* service);
+ virtual ~CloudPolicyClient();
+
+ // Sets the DMToken, thereby establishing a registration with the server. A
+ // policy fetch is not automatically issued but can be requested by calling
+ // FetchPolicy().
+ virtual void SetupRegistration(const std::string& dm_token,
+ const std::string& client_id);
+
+ // Attempts to register with the device management service. Results in a
+ // registration change or error notification.
+ virtual void Register(const std::string& auth_token);
+
+ // Requests a policy fetch. The client being registered is a prerequisite to
+ // this operation and this call will CHECK if the client is not in registered
+ // state. FetchPolicy() triggers a policy fetch from the cloud. A policy
+ // change notification is reported to the observers and the new policy blob
+ // can be retrieved once the policy fetch operation completes. In case of
+ // multiple requests to fetch policy, new requests will cancel any pending
+ // requests and the latest request will eventually trigger notifications.
+ virtual void FetchPolicy();
+
+ // Sends an unregistration request to the server.
+ virtual void Unregister();
+
+ // Adds an observer to be called back upon policy and state changes.
+ void AddObserver(Observer* observer);
+
+ // Removes the specified observer.
+ void RemoveObserver(Observer* observer);
+
+ void set_submit_machine_id(bool submit_machine_id) {
+ submit_machine_id_ = submit_machine_id;
+ }
+
+ void set_last_policy_timestamp(const base::Time& timestamp) {
+ last_policy_timestamp_ = timestamp;
+ }
+
+ void set_public_key_version(int public_key_version) {
+ public_key_version_ = public_key_version;
+ public_key_version_valid_ = true;
+ }
+
+ void clear_public_key_version() {
+ public_key_version_valid_ = false;
+ }
+
+ // Whether the client is registered with the device management service.
+ bool is_registered() const { return !dm_token_.empty(); }
+
+ // The policy response as obtained by the last request to the cloud. This
+ // policy blob hasn't gone through verification, so it's contents cannot be
+ // trusted. Use CloudPolicyStore::policy() and CloudPolicyStore::policy_map()
+ // instead for making policy decisions.
+ const enterprise_management::PolicyFetchResponse* policy() const {
+ return policy_.get();
+ }
+
+ DeviceManagementStatus status() const {
+ return status_;
+ }
+
+ protected:
+ // Sets the registration type suitable for the policy scope used.
+ void SetRegistrationType(
+ enterprise_management::DeviceRegisterRequest* request) const;
+
+ // Sets the appropriate policy type in the fetch request.
+ void SetPolicyType(enterprise_management::PolicyFetchRequest* request) const;
+
+ // Callback for registration requests.
+ void OnRegisterCompleted(
+ DeviceManagementStatus status,
+ const enterprise_management::DeviceManagementResponse& response);
+
+ // Callback for policy fetch requests.
+ void OnPolicyFetchCompleted(
+ DeviceManagementStatus status,
+ const enterprise_management::DeviceManagementResponse& response);
+
+ // Callback for unregistration requests.
+ void OnUnregisterCompleted(
+ DeviceManagementStatus status,
+ const enterprise_management::DeviceManagementResponse& response);
+
+ // Observer notification helpers.
+ void NotifyPolicyFetched();
+ void NotifyRegistrationStateChanged();
+ void NotifyClientError();
+
+ // Data necessary for constructing policy requests.
+ const std::string machine_id_;
+ const std::string machine_model_;
+ const UserAffiliation user_affiliation_;
+ const PolicyScope scope_;
+
+ std::string dm_token_;
+ std::string client_id_;
+ bool submit_machine_id_;
+ base::Time last_policy_timestamp_;
+ int public_key_version_;
+ bool public_key_version_valid_;
+
+ // Used for issuing requests to the cloud.
+ DeviceManagementService* service_;
+ scoped_ptr<DeviceManagementRequestJob> request_job_;
+
+ // Status upload data is produced by |status_provider_|.
+ StatusProvider* status_provider_;
+
+ // The policy blob returned by the last policy fetch operation.
+ scoped_ptr<enterprise_management::PolicyFetchResponse> policy_;
+ DeviceManagementStatus status_;
+
+ ObserverList<Observer, true> observers_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(CloudPolicyClient);
+};
+
+} // namespace policy
+
+#endif // CHROME_BROWSER_POLICY_CLOUD_POLICY_CLIENT_H_
« no previous file with comments | « chrome/browser/policy/auto_enrollment_client_unittest.cc ('k') | chrome/browser/policy/cloud_policy_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698