1// Copyright 2013 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 "chromeos/settings/cros_settings_provider.h"
6
7#include "base/command_line.h"
8#include "base/logging.h"
9#include "base/strings/string_util.h"
10#include "base/values.h"
11#include "chromeos/chromeos_switches.h"
12
13namespace chromeos {
14
15CrosSettingsProvider::CrosSettingsProvider(
16    const NotifyObserversCallback& notify_cb)
17  : notify_cb_(notify_cb) {
18}
19
20CrosSettingsProvider::~CrosSettingsProvider() {
21}
22
23void CrosSettingsProvider::Set(const std::string& path,
24                               const base::Value& value) {
25  // We don't allow changing any of the cros settings without prefix
26  // "cros.session." in the guest mode.
27  // It should not reach here from UI in the guest mode, but just in case.
28  if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession) &&
29      !::StartsWithASCII(path, "cros.session.", true)) {
30    LOG(ERROR) << "Ignoring the guest request to change: " << path;
31    return;
32  }
33  DoSet(path, value);
34}
35
36void CrosSettingsProvider::NotifyObservers(const std::string& path) {
37  if (!notify_cb_.is_null())
38    notify_cb_.Run(path);
39}
40
41void CrosSettingsProvider::SetNotifyObserversCallback(
42    const NotifyObserversCallback& notify_cb) {
43  notify_cb_ = notify_cb;
44}
45
46};  // namespace chromeos
47