distilled_page_prefs.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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.
4
5#include "components/dom_distiller/core/distilled_page_prefs.h"
6
7#include "base/bind.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"
13
14namespace {
15
16// Path to the integer corresponding to user's preference theme.
17const char kFontPref[] = "dom_distiller.font_family";
18// Path to the integer corresponding to user's preference font family.
19const char kThemePref[] = "dom_distiller.theme";
20}
21
22namespace dom_distiller {
23
24DistilledPagePrefs::DistilledPagePrefs(PrefService* pref_service)
25    : pref_service_(pref_service), weak_ptr_factory_(this) {
26}
27
28DistilledPagePrefs::~DistilledPagePrefs() {
29}
30
31// static
32void DistilledPagePrefs::RegisterProfilePrefs(
33    user_prefs::PrefRegistrySyncable* registry) {
34  registry->RegisterIntegerPref(
35      kThemePref,
36      DistilledPagePrefs::LIGHT,
37      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
38  registry->RegisterIntegerPref(
39      kFontPref,
40      DistilledPagePrefs::SANS_SERIF,
41      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
42}
43
44void DistilledPagePrefs::SetFontFamily(
45    DistilledPagePrefs::FontFamily new_font_family) {
46  pref_service_->SetInteger(kFontPref, new_font_family);
47  base::MessageLoop::current()->PostTask(
48      FROM_HERE,
49      base::Bind(&DistilledPagePrefs::NotifyOnChangeFontFamily,
50                 weak_ptr_factory_.GetWeakPtr(),
51                 new_font_family));
52}
53
54DistilledPagePrefs::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
58    // default.
59    SetFontFamily(DistilledPagePrefs::SANS_SERIF);
60    return DistilledPagePrefs::SANS_SERIF;
61  }
62  return static_cast<FontFamily>(font_family);
63}
64
65void DistilledPagePrefs::SetTheme(DistilledPagePrefs::Theme new_theme) {
66  pref_service_->SetInteger(kThemePref, new_theme);
67  base::MessageLoop::current()->PostTask(
68      FROM_HERE,
69      base::Bind(&DistilledPagePrefs::NotifyOnChangeTheme,
70                 weak_ptr_factory_.GetWeakPtr(),
71                 new_theme));
72}
73
74DistilledPagePrefs::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
78    // default.
79    SetTheme(DistilledPagePrefs::LIGHT);
80    return DistilledPagePrefs::LIGHT;
81  }
82  return static_cast<Theme>(theme);
83}
84
85void DistilledPagePrefs::AddObserver(Observer* obs) {
86  observers_.AddObserver(obs);
87}
88
89void DistilledPagePrefs::RemoveObserver(Observer* obs) {
90  observers_.RemoveObserver(obs);
91}
92
93void DistilledPagePrefs::NotifyOnChangeFontFamily(
94    DistilledPagePrefs::FontFamily new_font_family) {
95  FOR_EACH_OBSERVER(Observer, observers_, OnChangeFontFamily(new_font_family));
96}
97
98void DistilledPagePrefs::NotifyOnChangeTheme(
99    DistilledPagePrefs::Theme new_theme) {
100  FOR_EACH_OBSERVER(Observer, observers_, OnChangeTheme(new_theme));
101}
102
103}  // namespace dom_distiller
104