blob: eeec8a9674ec99fe43c606d22c75c7080e8e31af [file] [log] [blame]
// Copyright 2014 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 COMPONENTS_DOM_DISTILLER_CORE_DISTILLED_PAGE_PREFS_H_
#define COMPONENTS_DOM_DISTILLER_CORE_DISTILLED_PAGE_PREFS_H_
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
class PrefService;
namespace user_prefs {
class PrefRegistrySyncable;
}
namespace dom_distiller {
// Interface for preferences used for distilled page.
class DistilledPagePrefs {
public:
// Possible font families for distilled page.
enum FontFamily {
#define DEFINE_FONT_FAMILY(name, value) name = value,
#include "components/dom_distiller/core/font_family_list.h"
#undef DEFINE_FONT_FAMILY
};
// Possible themes for distilled page.
enum Theme {
#define DEFINE_THEME(name, value) name = value,
#include "components/dom_distiller/core/theme_list.h"
#undef DEFINE_THEME
};
class Observer {
public:
virtual void OnChangeFontFamily(FontFamily font) = 0;
virtual void OnChangeTheme(Theme theme) = 0;
};
explicit DistilledPagePrefs(PrefService* pref_service);
~DistilledPagePrefs();
static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
// Sets the user's preference for the font family of distilled pages.
void SetFontFamily(FontFamily new_font);
// Returns the user's preference for the font family of distilled pages.
FontFamily GetFontFamily();
// Sets the user's preference for the theme of distilled pages.
void SetTheme(Theme new_theme);
// Returns the user's preference for the theme of distilled pages.
Theme GetTheme();
void AddObserver(Observer* obs);
void RemoveObserver(Observer* obs);
private:
// Notifies all Observers of new font family.
void NotifyOnChangeFontFamily(FontFamily font_family);
// Notifies all Observers of new theme.
void NotifyOnChangeTheme(Theme theme);
PrefService* pref_service_;
ObserverList<Observer> observers_;
base::WeakPtrFactory<DistilledPagePrefs> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(DistilledPagePrefs);
};
} // namespace dom_distiller
#endif // COMPONENTS_DOM_DISTILLER_CORE_DISTILLED_PAGE_PREFS_H_