distilled_page_prefs.cc 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. #include "components/dom_distiller/core/distilled_page_prefs.h"
  5. #include "base/bind.h"
  6. #include "base/location.h"
  7. #include "base/memory/weak_ptr.h"
  8. #include "base/observer_list.h"
  9. #include "base/task/single_thread_task_runner.h"
  10. #include "base/threading/thread_task_runner_handle.h"
  11. #include "components/dom_distiller/core/pref_names.h"
  12. #include "components/pref_registry/pref_registry_syncable.h"
  13. #include "components/prefs/pref_service.h"
  14. namespace {
  15. const float kDefaultFontScale = 1.0f;
  16. // These values should agree with those in distiller_native_javascript.cc.
  17. const float kMinFontScale = 0.4f;
  18. const float kMaxFontScale = 3.0f;
  19. } // namespace
  20. namespace dom_distiller {
  21. DistilledPagePrefs::DistilledPagePrefs(PrefService* pref_service)
  22. : pref_service_(pref_service) {}
  23. DistilledPagePrefs::~DistilledPagePrefs() = default;
  24. // static
  25. void DistilledPagePrefs::RegisterProfilePrefs(
  26. user_prefs::PrefRegistrySyncable* registry) {
  27. registry->RegisterIntegerPref(
  28. prefs::kTheme, static_cast<int32_t>(mojom::Theme::kLight),
  29. user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
  30. registry->RegisterIntegerPref(
  31. prefs::kFont, static_cast<int32_t>(mojom::FontFamily::kSansSerif),
  32. user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
  33. registry->RegisterDoublePref(prefs::kFontScale, kDefaultFontScale);
  34. registry->RegisterBooleanPref(
  35. prefs::kReaderForAccessibility, false,
  36. user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
  37. }
  38. void DistilledPagePrefs::SetFontFamily(mojom::FontFamily new_font_family) {
  39. pref_service_->SetInteger(prefs::kFont,
  40. static_cast<int32_t>(new_font_family));
  41. base::ThreadTaskRunnerHandle::Get()->PostTask(
  42. FROM_HERE,
  43. base::BindOnce(&DistilledPagePrefs::NotifyOnChangeFontFamily,
  44. weak_ptr_factory_.GetWeakPtr(), new_font_family));
  45. }
  46. mojom::FontFamily DistilledPagePrefs::GetFontFamily() {
  47. auto font_family =
  48. static_cast<mojom::FontFamily>(pref_service_->GetInteger(prefs::kFont));
  49. if (mojom::IsKnownEnumValue(font_family))
  50. return font_family;
  51. // Persisted data was incorrect, trying to clean it up by storing the
  52. // default.
  53. SetFontFamily(mojom::FontFamily::kSansSerif);
  54. return mojom::FontFamily::kSansSerif;
  55. }
  56. void DistilledPagePrefs::SetTheme(mojom::Theme new_theme) {
  57. pref_service_->SetInteger(prefs::kTheme, static_cast<int32_t>(new_theme));
  58. base::ThreadTaskRunnerHandle::Get()->PostTask(
  59. FROM_HERE, base::BindOnce(&DistilledPagePrefs::NotifyOnChangeTheme,
  60. weak_ptr_factory_.GetWeakPtr(), new_theme));
  61. }
  62. mojom::Theme DistilledPagePrefs::GetTheme() {
  63. auto theme =
  64. static_cast<mojom::Theme>(pref_service_->GetInteger(prefs::kTheme));
  65. if (mojom::IsKnownEnumValue(theme))
  66. return theme;
  67. // Persisted data was incorrect, trying to clean it up by storing the
  68. // default.
  69. SetTheme(mojom::Theme::kLight);
  70. return mojom::Theme::kLight;
  71. }
  72. void DistilledPagePrefs::SetFontScaling(float scaling) {
  73. pref_service_->SetDouble(prefs::kFontScale, scaling);
  74. base::ThreadTaskRunnerHandle::Get()->PostTask(
  75. FROM_HERE, base::BindOnce(&DistilledPagePrefs::NotifyOnChangeFontScaling,
  76. weak_ptr_factory_.GetWeakPtr(), scaling));
  77. }
  78. float DistilledPagePrefs::GetFontScaling() {
  79. float scaling = pref_service_->GetDouble(prefs::kFontScale);
  80. if (scaling < kMinFontScale || scaling > kMaxFontScale) {
  81. // Persisted data was incorrect, trying to clean it up by storing the
  82. // default.
  83. SetFontScaling(kDefaultFontScale);
  84. return kDefaultFontScale;
  85. }
  86. return scaling;
  87. }
  88. void DistilledPagePrefs::AddObserver(Observer* obs) {
  89. observers_.AddObserver(obs);
  90. }
  91. void DistilledPagePrefs::RemoveObserver(Observer* obs) {
  92. observers_.RemoveObserver(obs);
  93. }
  94. void DistilledPagePrefs::NotifyOnChangeFontFamily(
  95. mojom::FontFamily new_font_family) {
  96. for (Observer& observer : observers_)
  97. observer.OnChangeFontFamily(new_font_family);
  98. }
  99. void DistilledPagePrefs::NotifyOnChangeTheme(mojom::Theme new_theme) {
  100. for (Observer& observer : observers_)
  101. observer.OnChangeTheme(new_theme);
  102. }
  103. void DistilledPagePrefs::NotifyOnChangeFontScaling(float scaling) {
  104. for (Observer& observer : observers_)
  105. observer.OnChangeFontScaling(scaling);
  106. }
  107. } // namespace dom_distiller