system_settings_provider.cc 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // Copyright (c) 2012 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 "ash/components/settings/system_settings_provider.h"
  5. #include <memory>
  6. #include <string>
  7. #include "ash/components/settings/cros_settings_names.h"
  8. #include "ash/constants/ash_switches.h"
  9. #include "base/command_line.h"
  10. #include "base/time/time.h"
  11. #include "base/values.h"
  12. #include "chromeos/login/login_state/login_state.h"
  13. namespace ash {
  14. namespace {
  15. // TODO(olsen): PerUserTimeZoneEnabled and FineGrainedTimeZoneDetectionEnabled
  16. // are duplicated in chrome/browser/ash/system/timezone_util.cc, which
  17. // is not visible from this package. Try to re-unify these functions by moving
  18. // timezone_util to src/ash too (out of src/chrome/browser).
  19. bool PerUserTimezoneEnabled() {
  20. return !base::CommandLine::ForCurrentProcess()->HasSwitch(
  21. switches::kDisablePerUserTimezone);
  22. }
  23. bool FineGrainedTimeZoneDetectionEnabled() {
  24. return !base::CommandLine::ForCurrentProcess()->HasSwitch(
  25. switches::kDisableFineGrainedTimeZoneDetection);
  26. }
  27. } // namespace
  28. SystemSettingsProvider::SystemSettingsProvider()
  29. : CrosSettingsProvider(CrosSettingsProvider::NotifyObserversCallback()) {
  30. Init();
  31. }
  32. SystemSettingsProvider::SystemSettingsProvider(
  33. const NotifyObserversCallback& notify_cb)
  34. : CrosSettingsProvider(notify_cb) {
  35. Init();
  36. }
  37. SystemSettingsProvider::~SystemSettingsProvider() {
  38. system::TimezoneSettings::GetInstance()->RemoveObserver(this);
  39. }
  40. void SystemSettingsProvider::Init() {
  41. system::TimezoneSettings* timezone_settings =
  42. system::TimezoneSettings::GetInstance();
  43. timezone_settings->AddObserver(this);
  44. timezone_value_ =
  45. std::make_unique<base::Value>(timezone_settings->GetCurrentTimezoneID());
  46. per_user_timezone_enabled_value_ =
  47. std::make_unique<base::Value>(PerUserTimezoneEnabled());
  48. fine_grained_time_zone_enabled_value_ =
  49. std::make_unique<base::Value>(FineGrainedTimeZoneDetectionEnabled());
  50. }
  51. const base::Value* SystemSettingsProvider::Get(const std::string& path) const {
  52. if (path == kSystemTimezone)
  53. return timezone_value_.get();
  54. if (path == kPerUserTimezoneEnabled)
  55. return per_user_timezone_enabled_value_.get();
  56. if (path == kFineGrainedTimeZoneResolveEnabled)
  57. return fine_grained_time_zone_enabled_value_.get();
  58. return NULL;
  59. }
  60. // The timezone is always trusted.
  61. CrosSettingsProvider::TrustedStatus
  62. SystemSettingsProvider::PrepareTrustedValues(base::OnceClosure* cb) {
  63. return TRUSTED;
  64. }
  65. bool SystemSettingsProvider::HandlesSetting(const std::string& path) const {
  66. return path == kSystemTimezone || path == kPerUserTimezoneEnabled ||
  67. path == kFineGrainedTimeZoneResolveEnabled;
  68. }
  69. void SystemSettingsProvider::TimezoneChanged(const icu::TimeZone& timezone) {
  70. // Fires system setting change notification.
  71. timezone_value_ = std::make_unique<base::Value>(
  72. system::TimezoneSettings::GetTimezoneID(timezone));
  73. NotifyObservers(kSystemTimezone);
  74. }
  75. } // namespace ash