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_STORE_CHROMEOS_H_
      6 #define CHROME_BROWSER_CHROMEOS_POLICY_DEVICE_CLOUD_POLICY_STORE_CHROMEOS_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/compiler_specific.h"
     10 #include "base/memory/ref_counted.h"
     11 #include "base/memory/scoped_ptr.h"
     12 #include "base/memory/weak_ptr.h"
     13 #include "chrome/browser/chromeos/policy/device_cloud_policy_validator.h"
     14 #include "chrome/browser/chromeos/settings/device_settings_service.h"
     15 #include "components/policy/core/common/cloud/cloud_policy_store.h"
     16 
     17 namespace base {
     18 class SequencedTaskRunner;
     19 }
     20 
     21 namespace enterprise_management {
     22 class PolicyFetchResponse;
     23 }
     24 
     25 namespace policy {
     26 
     27 class EnterpriseInstallAttributes;
     28 
     29 // CloudPolicyStore implementation for device policy on Chrome OS. Policy is
     30 // stored/loaded via DBus to/from session_manager.
     31 class DeviceCloudPolicyStoreChromeOS
     32     : public CloudPolicyStore,
     33       public chromeos::DeviceSettingsService::Observer {
     34  public:
     35   DeviceCloudPolicyStoreChromeOS(
     36       chromeos::DeviceSettingsService* device_settings_service,
     37       EnterpriseInstallAttributes* install_attributes,
     38       scoped_refptr<base::SequencedTaskRunner> background_task_runner);
     39   virtual ~DeviceCloudPolicyStoreChromeOS();
     40 
     41   // CloudPolicyStore:
     42   virtual void Store(
     43       const enterprise_management::PolicyFetchResponse& policy) OVERRIDE;
     44   virtual void Load() OVERRIDE;
     45 
     46   // Installs initial policy. This is different from Store() in that it skips
     47   // the signature validation step against already-installed policy. The checks
     48   // against installation-time attributes are performed nevertheless. The result
     49   // of the operation is reported through the OnStoreLoaded() or OnStoreError()
     50   // observer callbacks.
     51   void InstallInitialPolicy(
     52       const enterprise_management::PolicyFetchResponse& policy);
     53 
     54   // chromeos::DeviceSettingsService::Observer:
     55   virtual void OwnershipStatusChanged() OVERRIDE;
     56   virtual void DeviceSettingsUpdated() OVERRIDE;
     57 
     58  private:
     59   // Create a validator for |policy| with basic device policy configuration and
     60   // OnPolicyStored() as the completion callback.
     61   scoped_ptr<DeviceCloudPolicyValidator> CreateValidator(
     62       const enterprise_management::PolicyFetchResponse& policy);
     63 
     64   // Called on completion on the policy validation prior to storing policy.
     65   // Starts the actual store operation.
     66   void OnPolicyToStoreValidated(DeviceCloudPolicyValidator* validator);
     67 
     68   // Handles store completion operations updates status.
     69   void OnPolicyStored();
     70 
     71   // Re-syncs policy and status from |device_settings_service_|.
     72   void UpdateFromService();
     73 
     74   chromeos::DeviceSettingsService* device_settings_service_;
     75   EnterpriseInstallAttributes* install_attributes_;
     76 
     77   scoped_refptr<base::SequencedTaskRunner> background_task_runner_;
     78 
     79   // Whether enterprise enrollment validation has yet been done.
     80   bool enrollment_validation_done_;
     81 
     82   base::WeakPtrFactory<DeviceCloudPolicyStoreChromeOS> weak_factory_;
     83 
     84   DISALLOW_COPY_AND_ASSIGN(DeviceCloudPolicyStoreChromeOS);
     85 };
     86 
     87 }  // namespace policy
     88 
     89 #endif  // CHROME_BROWSER_CHROMEOS_POLICY_DEVICE_CLOUD_POLICY_STORE_CHROMEOS_H_
     90