1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// Use of this source code is governed by a BSD-style license that can be 3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// found in the LICENSE file. 4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#ifndef CHROME_BROWSER_CHROMEOS_POLICY_DEVICE_CLOUD_POLICY_STORE_CHROMEOS_H_ 6eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov#define CHROME_BROWSER_CHROMEOS_POLICY_DEVICE_CLOUD_POLICY_STORE_CHROMEOS_H_ 7436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 8436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include "base/basictypes.h" 9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "base/compiler_specific.h" 10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "base/memory/ref_counted.h" 11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "base/memory/scoped_ptr.h" 12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "base/memory/weak_ptr.h" 13436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include "chrome/browser/chromeos/policy/device_cloud_policy_validator.h" 14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "chrome/browser/chromeos/settings/device_settings_service.h" 15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "components/policy/core/common/cloud/cloud_policy_store.h" 16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovnamespace base { 18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovclass SequencedTaskRunner; 19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovnamespace enterprise_management { 22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovclass PolicyFetchResponse; 23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovnamespace policy { 26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 27436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovclass EnterpriseInstallAttributes; 28436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 29436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// CloudPolicyStore implementation for device policy on Chrome OS. Policy is 30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// stored/loaded via DBus to/from session_manager. 31436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovclass DeviceCloudPolicyStoreChromeOS 32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov : public CloudPolicyStore, 33436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov public chromeos::DeviceSettingsService::Observer { 34436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov public: 35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov DeviceCloudPolicyStoreChromeOS( 36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov chromeos::DeviceSettingsService* device_settings_service, 37436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov EnterpriseInstallAttributes* install_attributes, 38436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov scoped_refptr<base::SequencedTaskRunner> background_task_runner); 39436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov virtual ~DeviceCloudPolicyStoreChromeOS(); 40436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 41436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov // CloudPolicyStore: 42436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov virtual void Store( 43436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov const enterprise_management::PolicyFetchResponse& policy) OVERRIDE; 44436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov virtual void Load() OVERRIDE; 45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Installs initial policy. This is different from Store() in that it skips 47436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov // the signature validation step against already-installed policy. The checks 48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // against installation-time attributes are performed nevertheless. The result 49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // of the operation is reported through the OnStoreLoaded() or OnStoreError() 50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // observer callbacks. 51eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov void InstallInitialPolicy( 52436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov const enterprise_management::PolicyFetchResponse& policy); 53436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // chromeos::DeviceSettingsService::Observer: 55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov virtual void OwnershipStatusChanged() OVERRIDE; 56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov virtual void DeviceSettingsUpdated() OVERRIDE; 57b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 58436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov private: 59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Create a validator for |policy| with basic device policy configuration and 60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // OnPolicyStored() as the completion callback. 61436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov scoped_ptr<DeviceCloudPolicyValidator> CreateValidator( 62b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov const enterprise_management::PolicyFetchResponse& policy); 63436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 64436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov // Called on completion on the policy validation prior to storing policy. 65436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov // Starts the actual store operation. 66b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov void OnPolicyToStoreValidated(DeviceCloudPolicyValidator* validator); 67436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 68b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Handles store completion operations updates status. 69eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov void OnPolicyStored(); 70eb0bae136f4eeaaf29761dddb148b118fb824632Dmitriy Ivanov 71b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Re-syncs policy and status from |device_settings_service_|. 72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov void UpdateFromService(); 73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov chromeos::DeviceSettingsService* device_settings_service_; 75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov EnterpriseInstallAttributes* install_attributes_; 76b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov scoped_refptr<base::SequencedTaskRunner> background_task_runner_; 78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 79b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Whether enterprise enrollment validation has yet been done. 80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov bool enrollment_validation_done_; 81b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 82b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov base::WeakPtrFactory<DeviceCloudPolicyStoreChromeOS> weak_factory_; 83b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 84b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov DISALLOW_COPY_AND_ASSIGN(DeviceCloudPolicyStoreChromeOS); 85b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}; 86436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 87436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} // namespace policy 88436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 89b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif // CHROME_BROWSER_CHROMEOS_POLICY_DEVICE_CLOUD_POLICY_STORE_CHROMEOS_H_ 90436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov