Home | History | Annotate | Download | only in settings
      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 
      5 #include "chrome/browser/chromeos/settings/system_settings_provider.h"
      6 
      7 #include "base/strings/string16.h"
      8 #include "base/time/time.h"
      9 #include "base/values.h"
     10 #include "chrome/browser/chromeos/login/user_manager.h"
     11 #include "chrome/browser/chromeos/settings/cros_settings.h"
     12 #include "chrome/browser/chromeos/settings/cros_settings_names.h"
     13 #include "grit/generated_resources.h"
     14 #include "ui/base/l10n/l10n_util.h"
     15 
     16 namespace chromeos {
     17 
     18 SystemSettingsProvider::SystemSettingsProvider(
     19     const NotifyObserversCallback& notify_cb)
     20     : CrosSettingsProvider(notify_cb) {
     21   system::TimezoneSettings *timezone_settings =
     22       system::TimezoneSettings::GetInstance();
     23   timezone_settings->AddObserver(this);
     24   timezone_value_.reset(new base::StringValue(
     25       timezone_settings->GetCurrentTimezoneID()));
     26 }
     27 
     28 SystemSettingsProvider::~SystemSettingsProvider() {
     29   system::TimezoneSettings::GetInstance()->RemoveObserver(this);
     30 }
     31 
     32 void SystemSettingsProvider::DoSet(const std::string& path,
     33                                    const base::Value& in_value) {
     34   // Non-guest users can change the time zone.
     35   if (UserManager::Get()->IsLoggedInAsGuest())
     36     return;
     37 
     38   if (path == kSystemTimezone) {
     39     string16 timezone_id;
     40     if (!in_value.GetAsString(&timezone_id))
     41       return;
     42     // This will call TimezoneChanged.
     43     system::TimezoneSettings::GetInstance()->SetTimezoneFromID(timezone_id);
     44   }
     45 }
     46 
     47 const base::Value* SystemSettingsProvider::Get(const std::string& path) const {
     48   if (path == kSystemTimezone)
     49     return timezone_value_.get();
     50   return NULL;
     51 }
     52 
     53 // The timezone is always trusted.
     54 CrosSettingsProvider::TrustedStatus
     55     SystemSettingsProvider::PrepareTrustedValues(const base::Closure& cb) {
     56   return TRUSTED;
     57 }
     58 
     59 bool SystemSettingsProvider::HandlesSetting(const std::string& path) const {
     60   return path == kSystemTimezone;
     61 }
     62 
     63 void SystemSettingsProvider::TimezoneChanged(const icu::TimeZone& timezone) {
     64   // Fires system setting change notification.
     65   timezone_value_.reset(new base::StringValue(
     66       system::TimezoneSettings::GetTimezoneID(timezone)));
     67   NotifyObservers(kSystemTimezone);
     68 }
     69 
     70 }  // namespace chromeos
     71