| Index: chrome/browser/policy/config_dir_policy_provider.h
|
| ===================================================================
|
| --- chrome/browser/policy/config_dir_policy_provider.h (revision 56841)
|
| +++ chrome/browser/policy/config_dir_policy_provider.h (working copy)
|
| @@ -8,139 +8,35 @@
|
|
|
| #include "base/basictypes.h"
|
| #include "base/file_path.h"
|
| -#include "base/lock.h"
|
| -#include "base/ref_counted.h"
|
| -#include "base/scoped_ptr.h"
|
| -#include "base/weak_ptr.h"
|
| -#include "chrome/browser/file_path_watcher.h"
|
| #include "chrome/browser/policy/configuration_policy_provider.h"
|
|
|
| -class ConfigDirPolicyProvider;
|
| class DictionaryValue;
|
| -class MessageLoop;
|
|
|
| -// FilePathWatcher delegate implementation that handles change notifications for
|
| -// the configuration directory. It keeps the authorative version of the
|
| -// currently effective policy dictionary and updates it as appropriate.
|
| -class PolicyDirLoader : public FilePathWatcher::Delegate {
|
| - public:
|
| - // Create a new loader that'll load its data from |config_dir|.
|
| - PolicyDirLoader(base::WeakPtr<ConfigDirPolicyProvider> provider,
|
| - const FilePath& config_dir,
|
| - int settle_interval_second,
|
| - int reload_interval_minutes);
|
| -
|
| - // Stops any pending reload tasks.
|
| - void Stop();
|
| -
|
| - // Reloads the policies and sends out a notification, if appropriate. Must be
|
| - // called on the file thread.
|
| - void Reload();
|
| -
|
| - // Get the current dictionary value object. Ownership of the returned value is
|
| - // transferred to the caller.
|
| - DictionaryValue* GetPolicy();
|
| -
|
| - const FilePath& config_dir() { return config_dir_; }
|
| -
|
| - // FilePathWatcher::Delegate implementation:
|
| - void OnFilePathChanged(const FilePath& path);
|
| - void OnError();
|
| -
|
| - private:
|
| - // Load the policy information. Ownership of the return value is transferred
|
| - // to the caller.
|
| - DictionaryValue* Load();
|
| -
|
| - // Check the directory modification time to see whether reading the
|
| - // configuration directory is safe. If not, returns false and the delay until
|
| - // it is considered safe to reload in |delay|.
|
| - bool IsSafeToReloadPolicy(const base::Time& now, base::TimeDelta* delay);
|
| -
|
| - // Post a reload task. Must be called on the file thread.
|
| - void ScheduleReloadTask(const base::TimeDelta& delay);
|
| -
|
| - // Notifies the policy provider to send out a policy changed notification.
|
| - // Must be called on |origin_loop_|.
|
| - void NotifyPolicyChanged();
|
| -
|
| - // Invoked from the reload task on the file thread.
|
| - void ReloadFromTask();
|
| -
|
| - // The provider this loader is associated with. Access only on the thread that
|
| - // called the constructor. See |origin_loop_| below.
|
| - base::WeakPtr<ConfigDirPolicyProvider> provider_;
|
| -
|
| - // The message loop on which this object was constructed and |provider_|
|
| - // received on. Recorded so we can call back into the non thread safe provider
|
| - // to fire the notification.
|
| - MessageLoop* origin_loop_;
|
| -
|
| - // The directory in which we look for configuration files.
|
| - const FilePath config_dir_;
|
| -
|
| - // Protects |policy_|.
|
| - Lock lock_;
|
| -
|
| - // The current policy definition.
|
| - scoped_ptr<DictionaryValue> policy_;
|
| -
|
| - // The reload task. Access only on the file thread. Holds a reference to the
|
| - // currently posted task, so we can cancel and repost it if necessary.
|
| - CancelableTask* reload_task_;
|
| -
|
| - // Settle and reload intervals.
|
| - const int settle_interval_seconds_;
|
| - const int reload_interval_minutes_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(PolicyDirLoader);
|
| -};
|
| -
|
| -// Wraps a FilePathWatcher for the configuration directory and takes care of
|
| -// initializing the watcher object on the file thread.
|
| -class PolicyDirWatcher : public FilePathWatcher,
|
| - public base::RefCountedThreadSafe<PolicyDirWatcher> {
|
| - public:
|
| - PolicyDirWatcher() {}
|
| -
|
| - // Run initialization. This is in a separate method since we need to post a
|
| - // task (which cannot be done from the constructor).
|
| - void Init(PolicyDirLoader* loader);
|
| -
|
| - private:
|
| - // Actually sets up the watch with the FilePathWatcher code.
|
| - void InitWatcher(const scoped_refptr<PolicyDirLoader>& loader);
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(PolicyDirWatcher);
|
| -};
|
| -
|
| // A policy provider implementation backed by a set of files in a given
|
| // directory. The files should contain JSON-formatted policy settings. They are
|
| // merged together and the result is returned via the
|
| // ConfigurationPolicyProvider interface. The files are consulted in
|
| // lexicographic file name order, so the last value read takes precedence in
|
| // case of preference key collisions.
|
| -class ConfigDirPolicyProvider
|
| - : public ConfigurationPolicyProvider,
|
| - public base::SupportsWeakPtr<ConfigDirPolicyProvider> {
|
| +class ConfigDirPolicyProvider : public ConfigurationPolicyProvider {
|
| public:
|
| explicit ConfigDirPolicyProvider(const FilePath& config_dir);
|
| - virtual ~ConfigDirPolicyProvider();
|
| + virtual ~ConfigDirPolicyProvider() { }
|
|
|
| // ConfigurationPolicyProvider implementation.
|
| virtual bool Provide(ConfigurationPolicyStore* store);
|
|
|
| private:
|
| + // Read and merge the files from the configuration directory.
|
| + DictionaryValue* ReadPolicies();
|
| +
|
| // Decodes the value tree and writes the configuration to the given |store|.
|
| void DecodePolicyValueTree(DictionaryValue* policies,
|
| ConfigurationPolicyStore* store);
|
|
|
| - // Watches for changes to the configuration directory.
|
| - scoped_refptr<PolicyDirWatcher> watcher_;
|
| + // The directory in which we look for configuration files.
|
| + const FilePath config_dir_;
|
|
|
| - // The loader object we use internally.
|
| - scoped_refptr<PolicyDirLoader> loader_;
|
| -
|
| DISALLOW_COPY_AND_ASSIGN(ConfigDirPolicyProvider);
|
| };
|
|
|
|
|