blob: 9ffc67aa4c2e4c51a18437d5ee72430977f5ba59 [file] [log] [blame]
// Copyright 2016 The Chromium 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 CHROME_BROWSER_PREFS_PREFERENCES_MANAGER_H_
#define CHROME_BROWSER_PREFS_PREFERENCES_MANAGER_H_
#include <memory>
#include "base/macros.h"
#include "services/preferences/public/interfaces/preferences.mojom.h"
namespace test {
class PreferencesManagerTest;
}
class PrefChangeRegistrar;
class PrefService;
class Profile;
// Implementation of prefs::mojom::PreferencesManager that accepts a single
// prefs::mojom::PreferencesObserver.
//
// After calling AddObserver PreferencesManager will begin observing changes to
// the requested preferences, notifying the client of all changes.
class PreferencesManager : public prefs::mojom::PreferencesManager {
public:
explicit PreferencesManager(Profile* profile);
~PreferencesManager() override;
private:
friend class test::PreferencesManagerTest;
// PrefChangeRegistrar::NamedChangeCallback:
void PreferenceChanged(const std::string& preference_name);
// mojom::PreferencesManager:
void AddObserver(prefs::mojom::PreferencesObserverPtr client) override;
void SetPreferences(
std::unique_ptr<base::DictionaryValue> preferences) override;
void Subscribe(const std::vector<std::string>& preferences) override;
// Tracks the desired preferences, and listens for updates.
std::unique_ptr<PrefChangeRegistrar> preferences_change_registrar_;
prefs::mojom::PreferencesObserverPtr client_;
PrefService* service_;
// Used to prevent notifying |client_| of changes caused by it calling
// SetPreferences.
bool setting_preferences_;
DISALLOW_COPY_AND_ASSIGN(PreferencesManager);
};
#endif // CHROME_BROWSER_PREFS_PREFERENCES_MANAGER_H_