1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_LOADER_WIN_H_
6#define CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_LOADER_WIN_H_
7#pragma once
8
9#include "base/synchronization/waitable_event.h"
10#include "base/win/object_watcher.h"
11#include "chrome/browser/policy/asynchronous_policy_loader.h"
12
13namespace policy {
14
15// Keeps watch on Windows Group Policy notification event to trigger a policy
16// reload when Group Policy changes.
17class ConfigurationPolicyLoaderWin
18    : public AsynchronousPolicyLoader,
19      public base::win::ObjectWatcher::Delegate {
20 public:
21  ConfigurationPolicyLoaderWin(
22      AsynchronousPolicyProvider::Delegate* delegate,
23      int reload_interval_minutes);
24  virtual ~ConfigurationPolicyLoaderWin() {}
25
26 protected:
27  // AsynchronousPolicyLoader overrides:
28  virtual void InitOnFileThread();
29  virtual void StopOnFileThread();
30
31 private:
32  // Updates the watchers and schedules the reload task if appropriate.
33  void SetupWatches();
34
35  // Post a reload notification and update the watch machinery.
36  void Reload();
37
38  // ObjectWatcher::Delegate overrides:
39  virtual void OnObjectSignaled(HANDLE object);
40
41  base::WaitableEvent user_policy_changed_event_;
42  base::WaitableEvent machine_policy_changed_event_;
43  base::win::ObjectWatcher user_policy_watcher_;
44  base::win::ObjectWatcher machine_policy_watcher_;
45  bool user_policy_watcher_failed_;
46  bool machine_policy_watcher_failed_;
47
48  DISALLOW_COPY_AND_ASSIGN(ConfigurationPolicyLoaderWin);
49};
50
51}  // namespace policy
52
53#endif  // CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_LOADER_WIN_H_
54