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