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