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