Chromium Code Reviews| Index: chrome/browser/policy/file_based_policy_provider.h |
| diff --git a/chrome/browser/policy/file_based_policy_provider.h b/chrome/browser/policy/file_based_policy_provider.h |
| index a4e989d9158e9f948d498972e65f15a3d2fd6415..d49ace770ab6494f4e3ee4a9f23b4c0de0cd4fd4 100644 |
| --- a/chrome/browser/policy/file_based_policy_provider.h |
| +++ b/chrome/browser/policy/file_based_policy_provider.h |
| @@ -14,31 +14,24 @@ |
| #include "base/time.h" |
| #include "base/weak_ptr.h" |
|
Mattias Nissler (ping if slow)
2010/12/06 10:26:20
not needed?
danno
2010/12/06 14:05:12
Done.
|
| #include "chrome/browser/file_path_watcher.h" |
|
Mattias Nissler (ping if slow)
2010/12/06 10:26:20
not needed?
danno
2010/12/06 14:05:12
Done.
|
| +#include "chrome/browser/policy/asynchronous_policy_provider.h" |
| #include "chrome/browser/policy/configuration_policy_provider.h" |
|
Mattias Nissler (ping if slow)
2010/12/06 10:26:20
don't need that header.
danno
2010/12/06 14:05:12
Done.
|
| -class CancelableTask; |
| -class DictionaryValue; |
| -class MessageLoop; |
| - |
| namespace policy { |
| -class FileBasedPolicyLoader; |
| -class FileBasedPolicyWatcher; |
| - |
| // File based policy provider that coordinates watching and reloading policy |
| // information from the configuration path. Actual logic for loading policy |
| // information is handled by a delegate passed at construction time. |
| -class FileBasedPolicyProvider |
| - : public ConfigurationPolicyProvider, |
| - public base::SupportsWeakPtr<FileBasedPolicyProvider> { |
| +class FileBasedPolicyProvider : public AsynchronousPolicyProvider { |
| public: |
| + |
| // Delegate interface for actual policy loading from the system. |
| - class Delegate { |
| + class ProviderDelegate : public AsynchronousPolicyProvider::Delegate { |
| public: |
| - virtual ~Delegate(); |
| + explicit ProviderDelegate(const FilePath& config_file_path); |
| + virtual ~ProviderDelegate(); |
| - // Loads the policy information. Ownership of the return value is |
| - // transferred to the caller. |
| + // AsynchronousPolicyProvider::Delegate implementation: |
| virtual DictionaryValue* Load() = 0; |
| // Gets the last modification timestamp for the policy information from the |
| @@ -48,152 +41,21 @@ class FileBasedPolicyProvider |
| const FilePath& config_file_path() { return config_file_path_; } |
| - protected: |
| - explicit Delegate(const FilePath& config_file_path); |
| - |
| private: |
| - // The path at which we look for configuration files. |
| const FilePath config_file_path_; |
| - DISALLOW_COPY_AND_ASSIGN(Delegate); |
| + DISALLOW_COPY_AND_ASSIGN(ProviderDelegate); |
| }; |
| // Assumes ownership of |delegate|. |
| FileBasedPolicyProvider(const PolicyDefinitionList* policy_list, |
| - Delegate* delegate); |
| - virtual ~FileBasedPolicyProvider(); |
| - |
| - // ConfigurationPolicyProvider implementation. |
| - virtual bool Provide(ConfigurationPolicyStoreInterface* store); |
| + ProviderDelegate* delegate); |
| + virtual ~FileBasedPolicyProvider() {} |
| private: |
| - // Watches for changes to the configuration directory. |
| - scoped_refptr<FileBasedPolicyWatcher> watcher_; |
| - |
| - // The loader object we use internally. |
| - scoped_refptr<FileBasedPolicyLoader> loader_; |
| - |
| DISALLOW_COPY_AND_ASSIGN(FileBasedPolicyProvider); |
| }; |
| -// FilePathWatcher delegate implementation that handles change notifications for |
| -// the configuration file or directory. It keeps the authorative version of the |
| -// currently effective policy dictionary and updates it as appropriate. The |
| -// actual loading logic is handled by a delegate. |
| -class FileBasedPolicyLoader : public FilePathWatcher::Delegate { |
| - public: |
| - // Creates a new loader that'll load its data from |config_file_path|. |
| - // Assumes ownership of |delegate|, which provides the actual loading logic. |
| - // The parameters |settle_interval_seconds| and |reload_interval_minutes| |
| - // specify the time to wait before reading the file contents after a change |
| - // and the period for checking |config_file_path| for changes, respectively. |
| - FileBasedPolicyLoader(base::WeakPtr<ConfigurationPolicyProvider> provider, |
| - FileBasedPolicyProvider::Delegate* delegate, |
| - int settle_interval_seconds, |
| - 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(); |
| - |
| - // Gets the current dictionary value object. Ownership of the returned value |
| - // is transferred to the caller. |
| - DictionaryValue* GetPolicy(); |
| - |
| - const FilePath& config_file_path() { return delegate_->config_file_path(); } |
| - |
| - // FilePathWatcher::Delegate implementation: |
| - void OnFilePathChanged(const FilePath& path); |
| - void OnError(); |
| - |
| - private: |
| - // FileBasedPolicyLoader objects should only be deleted by |
| - // RefCountedThreadSafe. |
| - friend class base::RefCountedThreadSafe<FileBasedPolicyLoader>; |
| - virtual ~FileBasedPolicyLoader(); |
| - |
| - // Checks whether reading policy information is safe to do. 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); |
| - |
| - // Schedules a reload task to run when |delay| expires. 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 delegate. |
| - scoped_ptr<FileBasedPolicyProvider::Delegate> delegate_; |
| - |
| - // The provider this loader is associated with. Access only on the thread that |
| - // called the constructor. See |origin_loop_| below. |
| - base::WeakPtr<ConfigurationPolicyProvider> 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_; |
| - |
| - // Records last known modification timestamp of |config_file_path_|. |
| - base::Time last_modification_file_; |
| - |
| - // The wall clock time at which the last modification timestamp was recorded. |
| - // It's better to not assume the file notification time and the wall clock |
| - // times come from the same source, just in case there is some non-local |
| - // filesystem involved. |
| - base::Time last_modification_clock_; |
| - |
| - // 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(FileBasedPolicyLoader); |
| -}; |
| - |
| -// Wraps a FilePathWatcher for the configuration path and takes care of |
| -// initializing the watcher object on the file thread. |
| -class FileBasedPolicyWatcher |
| - : public base::RefCountedThreadSafe<FileBasedPolicyWatcher> { |
| - public: |
| - FileBasedPolicyWatcher(); |
| - |
| - // Runs initialization. This is in a separate method since we need to post a |
| - // task (which cannot be done from the constructor). |
| - void Init(FileBasedPolicyLoader* loader); |
| - |
| - private: |
| - // FileBasedPolicyWatcher objects should only be deleted by |
| - // RefCountedThreadSafe. |
| - friend class base::RefCountedThreadSafe<FileBasedPolicyWatcher>; |
| - virtual ~FileBasedPolicyWatcher(); |
| - |
| - // Actually sets up the watch with the FilePathWatcher code. |
| - void InitWatcher(const scoped_refptr<FileBasedPolicyLoader>& loader); |
| - |
| - // Wrapped watcher that takes care of the actual watching. |
| - FilePathWatcher watcher_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(FileBasedPolicyWatcher); |
| -}; |
| - |
| } // namespace policy |
| #endif // CHROME_BROWSER_POLICY_FILE_BASED_POLICY_PROVIDER_H_ |