14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/settings/cros_settings_provider.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
95e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_switches.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CrosSettingsProvider::CrosSettingsProvider(
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const NotifyObserversCallback& notify_cb)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  : notify_cb_(notify_cb) {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CrosSettingsProvider::~CrosSettingsProvider() {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CrosSettingsProvider::Set(const std::string& path,
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const base::Value& value) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We don't allow changing any of the cros settings without prefix
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // "cros.session." in the guest mode.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // It should not reach here from UI in the guest mode, but just in case.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kGuestSession) &&
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      !::StartsWithASCII(path, "cros.session.", true)) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LOG(ERROR) << "Ignoring the guest request to change: " << path;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DoSet(path, value);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CrosSettingsProvider::NotifyObservers(const std::string& path) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!notify_cb_.is_null())
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    notify_cb_.Run(path);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CrosSettingsProvider::SetNotifyObserversCallback(
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const NotifyObserversCallback& notify_cb) {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  notify_cb_ = notify_cb;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};  // namespace chromeos
47