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

Unified Diff: chrome/browser/chromeos/policy/device_local_account_policy_service.h

Issue 342233005: Move ownership of the ComponentCloudPolicyService to the broker. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 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/chromeos/policy/device_local_account_policy_service.h
diff --git a/chrome/browser/chromeos/policy/device_local_account_policy_service.h b/chrome/browser/chromeos/policy/device_local_account_policy_service.h
index f91fc95f22ea039e1e61ee9910cf8d0606197848..3e230e6b0274db70d881a8f4d2265911721ac27f 100644
--- a/chrome/browser/chromeos/policy/device_local_account_policy_service.h
+++ b/chrome/browser/chromeos/policy/device_local_account_policy_service.h
@@ -10,6 +10,7 @@
#include <string>
#include "base/basictypes.h"
+#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/files/file_path.h"
#include "base/memory/ref_counted.h"
@@ -21,6 +22,8 @@
#include "chrome/browser/chromeos/settings/cros_settings.h"
#include "components/policy/core/common/cloud/cloud_policy_core.h"
#include "components/policy/core/common/cloud/cloud_policy_store.h"
+#include "components/policy/core/common/cloud/component_cloud_policy_service.h"
+#include "components/policy/core/common/schema_registry.h"
namespace base {
class SequencedTaskRunner;
@@ -44,8 +47,12 @@ class DeviceManagementService;
// The main switching central that downloads, caches, refreshes, etc. policy for
// a single device-local account.
-class DeviceLocalAccountPolicyBroker {
+class DeviceLocalAccountPolicyBroker
+ : public CloudPolicyStore::Observer,
+ public ComponentCloudPolicyService::Delegate {
public:
+ // |policy_update_callback| will be invoked to notify observers that the
+ // policy for |account| has been updated.
// |task_runner| is the runner for policy refresh tasks.
DeviceLocalAccountPolicyBroker(
const DeviceLocalAccount& account,
@@ -53,8 +60,9 @@ class DeviceLocalAccountPolicyBroker {
scoped_ptr<DeviceLocalAccountPolicyStore> store,
scoped_refptr<DeviceLocalAccountExternalDataManager>
external_data_manager,
+ const base::Closure& policy_updated_callback,
const scoped_refptr<base::SequencedTaskRunner>& task_runner);
- ~DeviceLocalAccountPolicyBroker();
+ virtual ~DeviceLocalAccountPolicyBroker();
// Initialize the broker, loading its |store_|.
void Initialize();
@@ -74,6 +82,12 @@ class DeviceLocalAccountPolicyBroker {
return external_data_manager_;
}
+ ComponentCloudPolicyService* component_policy_service() const {
+ return component_policy_service_.get();
+ }
+
+ SchemaRegistry* schema_registry() { return &schema_registry_; }
+
// Fire up the cloud connection for fetching policy for the account from the
// cloud if this is an enterprise-managed device.
void ConnectIfPossible(
@@ -88,20 +102,28 @@ class DeviceLocalAccountPolicyBroker {
// empty string if the policy is not present.
std::string GetDisplayName() const;
- // Returns a directory where component policy for this account can be cached.
- // The DeviceLocalAccountPolicyService takes care of cleaning up caches of
- // accounts that have been removed.
- base::FilePath GetComponentPolicyCachePath() const;
+ // CloudPolicyStore::Observer:
+ virtual void OnStoreLoaded(CloudPolicyStore* store) OVERRIDE;
+ virtual void OnStoreError(CloudPolicyStore* store) OVERRIDE;
+
+ // ComponentCloudPolicyService::Delegate:
+ virtual void OnComponentCloudPolicyUpdated() OVERRIDE;
private:
+ void CreateComponentCloudPolicyService(
+ const scoped_refptr<net::URLRequestContextGetter>& request_context);
+
const std::string account_id_;
const std::string user_id_;
const base::FilePath component_policy_cache_path_;
+ SchemaRegistry schema_registry_;
const scoped_ptr<DeviceLocalAccountPolicyStore> store_;
scoped_refptr<DeviceLocalAccountExternalDataManager> external_data_manager_;
scoped_refptr<chromeos::DeviceLocalAccountExternalPolicyLoader>
extension_loader_;
CloudPolicyCore core_;
+ scoped_ptr<ComponentCloudPolicyService> component_policy_service_;
+ base::Closure policy_update_callback_;
DISALLOW_COPY_AND_ASSIGN(DeviceLocalAccountPolicyBroker);
};
@@ -110,7 +132,7 @@ class DeviceLocalAccountPolicyBroker {
// The actual policy blobs are brokered by session_manager (to prevent file
// manipulation), and we're making signature checks on the policy blobs to
// ensure they're issued by the device owner.
-class DeviceLocalAccountPolicyService : public CloudPolicyStore::Observer {
+class DeviceLocalAccountPolicyService {
public:
// Interface for interested parties to observe policy changes.
class Observer {
@@ -122,9 +144,6 @@ class DeviceLocalAccountPolicyService : public CloudPolicyStore::Observer {
// The list of accounts has been updated.
virtual void OnDeviceLocalAccountsChanged() = 0;
-
- // The given |broker| is about to be destroyed.
- virtual void OnBrokerShutdown(DeviceLocalAccountPolicyBroker* broker) {}
};
DeviceLocalAccountPolicyService(
@@ -153,15 +172,9 @@ class DeviceLocalAccountPolicyService : public CloudPolicyStore::Observer {
// |user_id|.
bool IsPolicyAvailableForUser(const std::string& user_id);
- scoped_refptr<net::URLRequestContextGetter> request_context() const;
-
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
- // CloudPolicyStore::Observer:
- virtual void OnStoreLoaded(CloudPolicyStore* store) OVERRIDE;
- virtual void OnStoreError(CloudPolicyStore* store) OVERRIDE;
-
private:
typedef std::map<std::string, DeviceLocalAccountPolicyBroker*>
PolicyBrokerMap;
@@ -203,6 +216,9 @@ class DeviceLocalAccountPolicyService : public CloudPolicyStore::Observer {
// Find the broker for a given |store|. Returns NULL if |store| is unknown.
DeviceLocalAccountPolicyBroker* GetBrokerForStore(CloudPolicyStore* store);
+ // Notifies the |observers_| that the policy for |user_id| has changed.
+ void NotifyPolicyUpdated(const std::string& user_id);
+
ObserverList<Observer, true> observers_;
chromeos::SessionManagerClient* session_manager_client_;
@@ -220,12 +236,12 @@ class DeviceLocalAccountPolicyService : public CloudPolicyStore::Observer {
// Orphaned extension caches are removed at startup. This tracks the status of
// that process.
- enum OrphanCacheDeletionState {
+ enum OrphanExtensionCacheDeletionState {
NOT_STARTED,
IN_PROGRESS,
DONE,
};
- OrphanCacheDeletionState orphan_cache_deletion_state_;
+ OrphanExtensionCacheDeletionState orphan_extension_cache_deletion_state_;
// Account IDs whose extension cache directories are busy, either because a
// broker for the account has not shut down completely yet or because the
@@ -242,8 +258,8 @@ class DeviceLocalAccountPolicyService : public CloudPolicyStore::Observer {
const scoped_ptr<chromeos::CrosSettings::ObserverSubscription>
local_accounts_subscription_;
- // Path to the directory that contains the cached policies for components
- // for device local accounts.
+ // Path to the directory that contains the cached policy for components
+ // for device-local accounts.
base::FilePath component_policy_cache_root_;
base::WeakPtrFactory<DeviceLocalAccountPolicyService> weak_factory_;

Powered by Google App Engine
This is Rietveld 408576698