1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/dom_distiller/core/distilled_page_prefs.h"
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/bind.h"
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/weak_ptr.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/message_loop/message_loop.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/observer_list.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/prefs/pref_service.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/pref_registry/pref_registry_syncable.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace {
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Path to the integer corresponding to user's preference theme.
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const char kFontPref[] = "dom_distiller.font_family";
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Path to the integer corresponding to user's preference font family.
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kThemePref[] = "dom_distiller.theme";
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace dom_distiller {
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
24116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDistilledPagePrefs::DistilledPagePrefs(PrefService* pref_service)
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : pref_service_(pref_service), weak_ptr_factory_(this) {
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
28116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDistilledPagePrefs::~DistilledPagePrefs() {
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// static
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid DistilledPagePrefs::RegisterProfilePrefs(
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    user_prefs::PrefRegistrySyncable* registry) {
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  registry->RegisterIntegerPref(
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      kThemePref,
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      DistilledPagePrefs::LIGHT,
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  registry->RegisterIntegerPref(
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      kFontPref,
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      DistilledPagePrefs::SANS_SERIF,
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void DistilledPagePrefs::SetFontFamily(
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    DistilledPagePrefs::FontFamily new_font_family) {
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  pref_service_->SetInteger(kFontPref, new_font_family);
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::MessageLoop::current()->PostTask(
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      FROM_HERE,
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      base::Bind(&DistilledPagePrefs::NotifyOnChangeFontFamily,
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                 weak_ptr_factory_.GetWeakPtr(),
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                 new_font_family));
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)DistilledPagePrefs::FontFamily DistilledPagePrefs::GetFontFamily() {
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  int font_family = pref_service_->GetInteger(kFontPref);
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (font_family < 0 || font_family >= DistilledPagePrefs::FONT_FAMILY_COUNT) {
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    // Persisted data was incorrect, trying to clean it up by storing the
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    // default.
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    SetFontFamily(DistilledPagePrefs::SANS_SERIF);
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    return DistilledPagePrefs::SANS_SERIF;
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return static_cast<FontFamily>(font_family);
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid DistilledPagePrefs::SetTheme(DistilledPagePrefs::Theme new_theme) {
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  pref_service_->SetInteger(kThemePref, new_theme);
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::MessageLoop::current()->PostTask(
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      FROM_HERE,
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      base::Bind(&DistilledPagePrefs::NotifyOnChangeTheme,
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                 weak_ptr_factory_.GetWeakPtr(),
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                 new_theme));
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
74116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDistilledPagePrefs::Theme DistilledPagePrefs::GetTheme() {
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int theme = pref_service_->GetInteger(kThemePref);
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (theme < 0 || theme >= DistilledPagePrefs::THEME_COUNT) {
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Persisted data was incorrect, trying to clean it up by storing the
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // default.
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    SetTheme(DistilledPagePrefs::LIGHT);
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return DistilledPagePrefs::LIGHT;
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return static_cast<Theme>(theme);
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid DistilledPagePrefs::AddObserver(Observer* obs) {
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  observers_.AddObserver(obs);
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid DistilledPagePrefs::RemoveObserver(Observer* obs) {
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  observers_.RemoveObserver(obs);
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void DistilledPagePrefs::NotifyOnChangeFontFamily(
946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    DistilledPagePrefs::FontFamily new_font_family) {
956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  FOR_EACH_OBSERVER(Observer, observers_, OnChangeFontFamily(new_font_family));
966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid DistilledPagePrefs::NotifyOnChangeTheme(
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    DistilledPagePrefs::Theme new_theme) {
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  FOR_EACH_OBSERVER(Observer, observers_, OnChangeTheme(new_theme));
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace dom_distiller
104