distilled_page_prefs.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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 kThemePref[] = "dom_distiller.theme"; 18} 19 20namespace dom_distiller { 21 22DistilledPagePrefs::DistilledPagePrefs(PrefService* pref_service) 23 : pref_service_(pref_service), weak_ptr_factory_(this) { 24} 25 26DistilledPagePrefs::~DistilledPagePrefs() { 27} 28 29// static 30void DistilledPagePrefs::RegisterProfilePrefs( 31 user_prefs::PrefRegistrySyncable* registry) { 32 registry->RegisterIntegerPref( 33 kThemePref, 34 DistilledPagePrefs::LIGHT, 35 user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); 36} 37 38void DistilledPagePrefs::SetTheme(DistilledPagePrefs::Theme new_theme) { 39 pref_service_->SetInteger(kThemePref, new_theme); 40 base::MessageLoop::current()->PostTask( 41 FROM_HERE, 42 base::Bind(&DistilledPagePrefs::NotifyOnChangeTheme, 43 weak_ptr_factory_.GetWeakPtr(), 44 new_theme)); 45} 46 47DistilledPagePrefs::Theme DistilledPagePrefs::GetTheme() { 48 int theme = pref_service_->GetInteger(kThemePref); 49 if (theme < 0 || theme >= DistilledPagePrefs::THEME_COUNT) { 50 // Persisted data was incorrect, trying to clean it up by storing the 51 // default. 52 SetTheme(DistilledPagePrefs::LIGHT); 53 return DistilledPagePrefs::LIGHT; 54 } 55 return (Theme) theme; 56} 57 58void DistilledPagePrefs::AddObserver(Observer* obs) { 59 observers_.AddObserver(obs); 60} 61 62void DistilledPagePrefs::RemoveObserver(Observer* obs) { 63 observers_.RemoveObserver(obs); 64} 65 66void DistilledPagePrefs::NotifyOnChangeTheme( 67 DistilledPagePrefs::Theme new_theme) { 68 FOR_EACH_OBSERVER(Observer, observers_, OnChangeTheme(new_theme)); 69} 70 71} // namespace dom_distiller 72