Home | History | Annotate | Download | only in core
      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 
     14 namespace {
     15 
     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";
     20 }
     21 
     22 namespace dom_distiller {
     23 
     24 DistilledPagePrefs::DistilledPagePrefs(PrefService* pref_service)
     25     : pref_service_(pref_service), weak_ptr_factory_(this) {
     26 }
     27 
     28 DistilledPagePrefs::~DistilledPagePrefs() {
     29 }
     30 
     31 // static
     32 void 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 
     44 void 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 
     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
     58     // default.
     59     SetFontFamily(DistilledPagePrefs::SANS_SERIF);
     60     return DistilledPagePrefs::SANS_SERIF;
     61   }
     62   return static_cast<FontFamily>(font_family);
     63 }
     64 
     65 void 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 
     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
     78     // default.
     79     SetTheme(DistilledPagePrefs::LIGHT);
     80     return DistilledPagePrefs::LIGHT;
     81   }
     82   return static_cast<Theme>(theme);
     83 }
     84 
     85 void DistilledPagePrefs::AddObserver(Observer* obs) {
     86   observers_.AddObserver(obs);
     87 }
     88 
     89 void DistilledPagePrefs::RemoveObserver(Observer* obs) {
     90   observers_.RemoveObserver(obs);
     91 }
     92 
     93 void DistilledPagePrefs::NotifyOnChangeFontFamily(
     94     DistilledPagePrefs::FontFamily new_font_family) {
     95   FOR_EACH_OBSERVER(Observer, observers_, OnChangeFontFamily(new_font_family));
     96 }
     97 
     98 void DistilledPagePrefs::NotifyOnChangeTheme(
     99     DistilledPagePrefs::Theme new_theme) {
    100   FOR_EACH_OBSERVER(Observer, observers_, OnChangeTheme(new_theme));
    101 }
    102 
    103 }  // namespace dom_distiller
    104