1 // Copyright 2014 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.
5 #include "components/dom_distiller/core/distilled_page_prefs.h"
8 #include "base/memory/weak_ptr.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/observer_list.h"
11 #include "base/prefs/pref_service.h"
12 #include "components/pref_registry/pref_registry_syncable.h"
16 // Path to the integer corresponding to user's preference theme.
17 const char kFontPref
[] = "dom_distiller.font_family";
18 // Path to the integer corresponding to user's preference font family.
19 const char kThemePref
[] = "dom_distiller.theme";
22 namespace dom_distiller
{
24 DistilledPagePrefs::DistilledPagePrefs(PrefService
* pref_service
)
25 : pref_service_(pref_service
), weak_ptr_factory_(this) {
28 DistilledPagePrefs::~DistilledPagePrefs() {
32 void DistilledPagePrefs::RegisterProfilePrefs(
33 user_prefs::PrefRegistrySyncable
* registry
) {
34 registry
->RegisterIntegerPref(
36 DistilledPagePrefs::LIGHT
,
37 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF
);
38 registry
->RegisterIntegerPref(
40 DistilledPagePrefs::SANS_SERIF
,
41 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF
);
44 void DistilledPagePrefs::SetFontFamily(
45 DistilledPagePrefs::FontFamily new_font_family
) {
46 pref_service_
->SetInteger(kFontPref
, new_font_family
);
47 base::MessageLoop::current()->PostTask(
49 base::Bind(&DistilledPagePrefs::NotifyOnChangeFontFamily
,
50 weak_ptr_factory_
.GetWeakPtr(),
54 DistilledPagePrefs::FontFamily
DistilledPagePrefs::GetFontFamily() {
55 int font_family
= pref_service_
->GetInteger(kFontPref
);
56 if (font_family
< 0 || font_family
>= DistilledPagePrefs::FONT_FAMILY_COUNT
) {
57 // Persisted data was incorrect, trying to clean it up by storing the
59 SetFontFamily(DistilledPagePrefs::SANS_SERIF
);
60 return DistilledPagePrefs::SANS_SERIF
;
62 return static_cast<FontFamily
>(font_family
);
65 void DistilledPagePrefs::SetTheme(DistilledPagePrefs::Theme new_theme
) {
66 pref_service_
->SetInteger(kThemePref
, new_theme
);
67 base::MessageLoop::current()->PostTask(
69 base::Bind(&DistilledPagePrefs::NotifyOnChangeTheme
,
70 weak_ptr_factory_
.GetWeakPtr(),
74 DistilledPagePrefs::Theme
DistilledPagePrefs::GetTheme() {
75 int theme
= pref_service_
->GetInteger(kThemePref
);
76 if (theme
< 0 || theme
>= DistilledPagePrefs::THEME_COUNT
) {
77 // Persisted data was incorrect, trying to clean it up by storing the
79 SetTheme(DistilledPagePrefs::LIGHT
);
80 return DistilledPagePrefs::LIGHT
;
82 return static_cast<Theme
>(theme
);
85 void DistilledPagePrefs::AddObserver(Observer
* obs
) {
86 observers_
.AddObserver(obs
);
89 void DistilledPagePrefs::RemoveObserver(Observer
* obs
) {
90 observers_
.RemoveObserver(obs
);
93 void DistilledPagePrefs::NotifyOnChangeFontFamily(
94 DistilledPagePrefs::FontFamily new_font_family
) {
95 FOR_EACH_OBSERVER(Observer
, observers_
, OnChangeFontFamily(new_font_family
));
98 void DistilledPagePrefs::NotifyOnChangeTheme(
99 DistilledPagePrefs::Theme new_theme
) {
100 FOR_EACH_OBSERVER(Observer
, observers_
, OnChangeTheme(new_theme
));
103 } // namespace dom_distiller