// Copyright (c) 2010 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_FILE_BASED_POLICY_PROVIDER_H_
#define CHROME_BROWSER_POLICY_FILE_BASED_POLICY_PROVIDER_H_
#pragma once
#include "base/file_path.h"
#include "base/time.h"
#include "chrome/browser/policy/asynchronous_policy_provider.h"
namespace policy {
// 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 AsynchronousPolicyProvider {
public:
// Delegate interface for actual policy loading from the system.
class ProviderDelegate : public AsynchronousPolicyProvider::Delegate {
public:
explicit ProviderDelegate(const FilePath& config_file_path);
virtual ~ProviderDelegate();
// AsynchronousPolicyProvider::Delegate implementation:
virtual DictionaryValue* Load() = 0;
// Gets the last modification timestamp for the policy information from the
// filesystem. Returns base::Time() if the information is not present, in
// which case Load() should return an empty dictionary.
virtual base::Time GetLastModification() = 0;
const FilePath& config_file_path() { return config_file_path_; }
private:
const FilePath config_file_path_;
DISALLOW_COPY_AND_ASSIGN(ProviderDelegate);
};
// Assumes ownership of |delegate|.
FileBasedPolicyProvider(const PolicyDefinitionList* policy_list,
ProviderDelegate* delegate);
virtual ~FileBasedPolicyProvider() {}
private:
DISALLOW_COPY_AND_ASSIGN(FileBasedPolicyProvider);
};
} // namespace policy
#endif // CHROME_BROWSER_POLICY_FILE_BASED_POLICY_PROVIDER_H_