1// Copyright 2013 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_WEB_RESOURCE_EULA_ACCEPTED_NOTIFIER_H_
6#define CHROME_BROWSER_WEB_RESOURCE_EULA_ACCEPTED_NOTIFIER_H_
7
8#include "base/basictypes.h"
9#include "base/prefs/pref_change_registrar.h"
10
11class PrefService;
12
13// Helper class for querying the EULA accepted state and receiving a
14// notification when the EULA is accepted.
15class EulaAcceptedNotifier {
16 public:
17  // Observes EULA accepted state changes.
18  class Observer {
19   public:
20    virtual void OnEulaAccepted() = 0;
21  };
22
23  explicit EulaAcceptedNotifier(PrefService* local_state);
24  virtual ~EulaAcceptedNotifier();
25
26  // Initializes this class with the given |observer|. Must be called before
27  // the class is used.
28  void Init(Observer* observer);
29
30  // Returns true if the EULA has been accepted. If the EULA has not yet been
31  // accepted, begins monitoring the EULA state and will notify the observer
32  // once the EULA has been accepted.
33  virtual bool IsEulaAccepted();
34
35  // Factory method for this class.
36  static EulaAcceptedNotifier* Create();
37
38 protected:
39  // Notifies the observer that the EULA has been updated, made protected for
40  // testing.
41  void NotifyObserver();
42
43 private:
44  // Callback for EULA accepted pref change notification.
45  void OnPrefChanged();
46
47  // Local state pref service for querying the EULA accepted pref.
48  PrefService* local_state_;
49
50  // Used to listen for the EULA accepted pref change notification.
51  PrefChangeRegistrar registrar_;
52
53  // Observer of the EULA accepted notification.
54  Observer* observer_;
55
56  DISALLOW_COPY_AND_ASSIGN(EulaAcceptedNotifier);
57};
58
59#endif  // CHROME_BROWSER_WEB_RESOURCE_EULA_ACCEPTED_NOTIFIER_H_
60