Home | History | Annotate | Download | only in policy
      1 // Copyright (c) 2012 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_CHROMEOS_POLICY_DEVICE_CLOUD_POLICY_MANAGER_CHROMEOS_H_
      6 #define CHROME_BROWSER_CHROMEOS_POLICY_DEVICE_CLOUD_POLICY_MANAGER_CHROMEOS_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/basictypes.h"
     12 #include "base/compiler_specific.h"
     13 #include "base/memory/ref_counted.h"
     14 #include "base/memory/scoped_ptr.h"
     15 #include "chrome/browser/chromeos/policy/server_backed_state_keys_broker.h"
     16 #include "components/policy/core/common/cloud/cloud_policy_client.h"
     17 #include "components/policy/core/common/cloud/cloud_policy_manager.h"
     18 
     19 namespace base {
     20 class SequencedTaskRunner;
     21 }
     22 
     23 namespace chromeos {
     24 namespace attestation {
     25 class AttestationPolicyObserver;
     26 }
     27 }
     28 
     29 class PrefRegistrySimple;
     30 class PrefService;
     31 
     32 namespace policy {
     33 
     34 class DeviceCloudPolicyStoreChromeOS;
     35 
     36 // CloudPolicyManager specialization for device policy on Chrome OS.
     37 class DeviceCloudPolicyManagerChromeOS : public CloudPolicyManager {
     38  public:
     39   // |task_runner| is the runner for policy refresh tasks.
     40   DeviceCloudPolicyManagerChromeOS(
     41       scoped_ptr<DeviceCloudPolicyStoreChromeOS> store,
     42       const scoped_refptr<base::SequencedTaskRunner>& task_runner,
     43       ServerBackedStateKeysBroker* state_keys_broker);
     44   virtual ~DeviceCloudPolicyManagerChromeOS();
     45 
     46   // Initializes state keys and requisition information.
     47   void Initialize(PrefService* local_state);
     48 
     49   // TODO(davidyu): Move these two functions to a more appropriate place. See
     50   // http://crbug.com/383695.
     51   // Gets/Sets the device requisition.
     52   std::string GetDeviceRequisition() const;
     53   void SetDeviceRequisition(const std::string& requisition);
     54   bool IsRemoraRequisition() const;
     55   bool IsSharkRequisition() const;
     56 
     57   // CloudPolicyManager:
     58   virtual void Shutdown() OVERRIDE;
     59 
     60   // Pref registration helper.
     61   static void RegisterPrefs(PrefRegistrySimple* registry);
     62 
     63   // Returns the device serial number, or an empty string if not available.
     64   static std::string GetMachineID();
     65 
     66   // Returns the machine model, or an empty string if not available.
     67   static std::string GetMachineModel();
     68 
     69   // Returns the robot 'email address' associated with the device robot
     70   // account (sometimes called a service account) associated with this device
     71   // during enterprise enrollment.
     72   std::string GetRobotAccountId();
     73 
     74   // Starts the connection via |client_to_connect|.
     75   void StartConnection(scoped_ptr<CloudPolicyClient> client_to_connect,
     76                        scoped_ptr<CloudPolicyClient::StatusProvider>
     77                            device_status_provider);
     78 
     79   DeviceCloudPolicyStoreChromeOS* device_store() {
     80     return device_store_.get();
     81   }
     82 
     83  private:
     84   // Saves the state keys received from |session_manager_client_|.
     85   void OnStateKeysUpdated();
     86 
     87   // Initializes requisition settings at OOBE with values from VPD.
     88   void InitializeRequisition();
     89 
     90   // Points to the same object as the base CloudPolicyManager::store(), but with
     91   // actual device policy specific type.
     92   scoped_ptr<DeviceCloudPolicyStoreChromeOS> device_store_;
     93   ServerBackedStateKeysBroker* state_keys_broker_;
     94 
     95   ServerBackedStateKeysBroker::Subscription state_keys_update_subscription_;
     96 
     97   // PrefService instance to read the policy refresh rate from.
     98   PrefService* local_state_;
     99 
    100   scoped_ptr<chromeos::attestation::AttestationPolicyObserver>
    101       attestation_policy_observer_;
    102 
    103   // TODO(davidyu): Currently we need to keep this object alive while
    104   // CloudPolicyClient is in use. We should have CPC take over the
    105   // ownership of this object instead. See http://crbug.com/383696.
    106   scoped_ptr<CloudPolicyClient::StatusProvider> device_status_provider_;
    107 
    108   DISALLOW_COPY_AND_ASSIGN(DeviceCloudPolicyManagerChromeOS);
    109 };
    110 
    111 }  // namespace policy
    112 
    113 #endif  // CHROME_BROWSER_CHROMEOS_POLICY_DEVICE_CLOUD_POLICY_MANAGER_CHROMEOS_H_
    114