1 // Copyright (c) 2012 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 COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_OBSERVABLE_PROVIDER_H_
6 #define COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_OBSERVABLE_PROVIDER_H_
7 
8 #include <string>
9 
10 #include "base/observer_list.h"
11 #include "base/threading/thread_checker.h"
12 #include "components/content_settings/core/browser/content_settings_observer.h"
13 #include "components/content_settings/core/browser/content_settings_provider.h"
14 #include "components/content_settings/core/common/content_settings_pattern.h"
15 
16 namespace content_settings {
17 
18 class ObservableProvider : public ProviderInterface {
19  public:
20   ObservableProvider();
21   ~ObservableProvider() override;
22 
23   void AddObserver(Observer* observer);
24   void RemoveObserver(Observer* observer);
25 
26  protected:
27   void NotifyObservers(const ContentSettingsPattern& primary_pattern,
28                        const ContentSettingsPattern& secondary_pattern,
29                        ContentSettingsType content_type,
30                        const std::string& resource_identifier);
31   void RemoveAllObservers();
32   bool CalledOnValidThread();
33 
34  private:
35   base::ThreadChecker thread_checker_;
36   base::ObserverList<Observer, true>::Unchecked observer_list_;
37 };
38 
39 }  // namespace content_settings
40 
41 #endif  // COMPONENTS_CONTENT_SETTINGS_CORE_BROWSER_CONTENT_SETTINGS_OBSERVABLE_PROVIDER_H_
42