// 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_DEVICE_POLICY_CACHE_H_ #define CHROME_BROWSER_POLICY_DEVICE_POLICY_CACHE_H_ #include #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/chromeos/settings/device_settings_service.h" #include "chrome/browser/policy/cloud_policy_cache_base.h" namespace policy { class CloudPolicyDataStore; class EnterpriseInstallAttributes; class PolicyMap; // CloudPolicyCacheBase implementation that persists policy information // to ChromeOS' session manager (via DeviceSettingsService). class DevicePolicyCache : public CloudPolicyCacheBase, public chromeos::DeviceSettingsService::Observer { public: DevicePolicyCache(CloudPolicyDataStore* data_store, EnterpriseInstallAttributes* install_attributes); virtual ~DevicePolicyCache(); // CloudPolicyCacheBase implementation: virtual void Load() OVERRIDE; virtual bool SetPolicy( const enterprise_management::PolicyFetchResponse& policy) OVERRIDE; virtual void SetUnmanaged() OVERRIDE; virtual void SetFetchingDone() OVERRIDE; // DeviceSettingsService::Observer implementation: virtual void OwnershipStatusChanged() OVERRIDE; virtual void DeviceSettingsUpdated() OVERRIDE; private: friend class DevicePolicyCacheTest; friend class DevicePolicyCacheTestHelper; // Alternate c'tor allowing tests to mock out the DeviceSettingsService // singleton. DevicePolicyCache( CloudPolicyDataStore* data_store, EnterpriseInstallAttributes* install_attributes, chromeos::DeviceSettingsService* device_settings_service); // CloudPolicyCacheBase implementation: virtual bool DecodePolicyData( const enterprise_management::PolicyData& policy_data, PolicyMap* policies) OVERRIDE; // Handles completion of policy store operations. void PolicyStoreOpCompleted(); // Checks with immutable attributes whether this is an enterprise device and // read the registration user if this is the case. void CheckImmutableAttributes(); // Tries to install the initial device policy retrieved from signed settings. // Fills in |device_token| if it could be extracted from the loaded protobuf. void InstallInitialPolicy( chromeos::DeviceSettingsService::Status status, const enterprise_management::PolicyData* policy_data, std::string* device_token); // Ensures that CrosSettings has established trust on the reporting prefs and // publishes the |device_token| loaded from the cache. It's important that we // have fully-initialized device settings s.t. device status uploads get the // correct reporting policy flags. void SetTokenAndFlagReady(const std::string& device_token); // Checks whether a policy fetch is pending and sends out a notification if // that is the case. void CheckFetchingDone(); CloudPolicyDataStore* data_store_; EnterpriseInstallAttributes* install_attributes_; chromeos::DeviceSettingsService* device_settings_service_; base::WeakPtrFactory weak_ptr_factory_; bool policy_fetch_pending_; DISALLOW_COPY_AND_ASSIGN(DevicePolicyCache); }; } // namespace policy #endif // CHROME_BROWSER_POLICY_DEVICE_POLICY_CACHE_H_