mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	- Add new API to retrieve/observe configuration values. - cefclient: Add https://tests/config to inspect configuration values in real time.
		
			
				
	
	
		
			105 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (c) 2022 The Chromium Embedded Framework 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 CEF_LIBCEF_BROWSER_PREFS_PREF_HELPER_H_
 | |
| #define CEF_LIBCEF_BROWSER_PREFS_PREF_HELPER_H_
 | |
| 
 | |
| #include <unordered_map>
 | |
| 
 | |
| #include "base/memory/raw_ptr.h"
 | |
| #include "base/observer_list.h"
 | |
| #include "cef/include/cef_registration.h"
 | |
| #include "cef/include/cef_values.h"
 | |
| #include "components/prefs/pref_observer.h"
 | |
| 
 | |
| class CefPreferenceObserver;
 | |
| class CefRegistration;
 | |
| class PrefService;
 | |
| 
 | |
| namespace pref_helper {
 | |
| 
 | |
| // Function names and arguments match the CefPreferenceManager interface.
 | |
| 
 | |
| bool HasPreference(PrefService* pref_service, const CefString& name);
 | |
| 
 | |
| CefRefPtr<CefValue> GetPreference(PrefService* pref_service,
 | |
|                                   const CefString& name);
 | |
| 
 | |
| CefRefPtr<CefDictionaryValue> GetAllPreferences(PrefService* pref_service,
 | |
|                                                 bool include_defaults);
 | |
| 
 | |
| bool CanSetPreference(PrefService* pref_service, const CefString& name);
 | |
| 
 | |
| bool SetPreference(PrefService* pref_service,
 | |
|                    const CefString& name,
 | |
|                    CefRefPtr<CefValue> value,
 | |
|                    CefString& error);
 | |
| 
 | |
| class Registration : public base::CheckedObserver {
 | |
|  public:
 | |
|   virtual void Detach() = 0;
 | |
|   virtual void RunCallback() const = 0;
 | |
|   virtual void RunCallback(const CefString& name) const = 0;
 | |
| };
 | |
| 
 | |
| class RegistrationImpl;
 | |
| 
 | |
| // Automatically manages the registration of one or more CefPreferenceObserver
 | |
| // objects with a PrefService. When the Registrar is destroyed, all registered
 | |
| // observers are automatically unregistered with the PrefService. Loosely based
 | |
| // on PrefChangeRegistrar.
 | |
| class Registrar final : public PrefObserver {
 | |
|  public:
 | |
|   Registrar() = default;
 | |
| 
 | |
|   Registrar(const Registrar&) = delete;
 | |
|   Registrar& operator=(const Registrar&) = delete;
 | |
| 
 | |
|   ~Registrar();
 | |
| 
 | |
|   // Must be called before adding or removing observers. Can be called more
 | |
|   // than once as long as the value of |service| doesn't change.
 | |
|   void Init(PrefService* service);
 | |
| 
 | |
|   // Removes all observers and clears the reference to the PrefService.
 | |
|   // `Init` must be called before adding or removing any observers.
 | |
|   void Reset();
 | |
| 
 | |
|   // Removes all observers that have been previously added with a call to Add.
 | |
|   void RemoveAll();
 | |
| 
 | |
|   // Returns true if no observers are registered.
 | |
|   bool IsEmpty() const;
 | |
| 
 | |
|   // Adds a pref |observer| for the specified pref |name|. All registered
 | |
|   // observers will be automatically unregistered and detached when the
 | |
|   // Registrar's destructor is called.
 | |
|   CefRefPtr<CefRegistration> AddObserver(
 | |
|       const CefString& name,
 | |
|       CefRefPtr<CefPreferenceObserver> observer);
 | |
| 
 | |
|  private:
 | |
|   friend class RegistrationImpl;
 | |
| 
 | |
|   void RemoveObserver(std::string_view name, Registration* registration);
 | |
| 
 | |
|   // PrefObserver:
 | |
|   void OnPreferenceChanged(PrefService* service,
 | |
|                            std::string_view pref_name) override;
 | |
| 
 | |
|   raw_ptr<PrefService, AcrossTasksDanglingUntriaged> service_ = nullptr;
 | |
| 
 | |
|   // Observers registered for a preference by name.
 | |
|   using ObserverMap =
 | |
|       std::unordered_map<std::string, base::ObserverList<Registration>>;
 | |
|   ObserverMap name_observers_;
 | |
| 
 | |
|   // Observers registered for all preferences.
 | |
|   base::ObserverList<Registration> all_observers_;
 | |
| };
 | |
| 
 | |
| }  // namespace pref_helper
 | |
| 
 | |
| #endif  // CEF_LIBCEF_BROWSER_PREFS_PREF_HELPER_H_
 |