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 "remoting/host/in_memory_host_config.h"
6
7#include "base/logging.h"
8#include "base/values.h"
9
10namespace remoting {
11
12InMemoryHostConfig::InMemoryHostConfig()
13    : values_(new base::DictionaryValue()) {
14}
15
16InMemoryHostConfig::~InMemoryHostConfig() {}
17
18bool InMemoryHostConfig::GetString(const std::string& path,
19                                   std::string* out_value) const {
20  DCHECK(CalledOnValidThread());
21  return values_->GetString(path, out_value);
22}
23
24bool InMemoryHostConfig::GetBoolean(const std::string& path,
25                                    bool* out_value) const {
26  DCHECK(CalledOnValidThread());
27  return values_->GetBoolean(path, out_value);
28}
29
30bool InMemoryHostConfig::Save() {
31  // Saving in-memory host config is not supported.
32  NOTREACHED();
33  return false;
34}
35
36void InMemoryHostConfig::SetString(const std::string& path,
37                                   const std::string& in_value) {
38  DCHECK(CalledOnValidThread());
39  values_->SetString(path, in_value);
40}
41
42void InMemoryHostConfig::SetBoolean(const std::string& path, bool in_value) {
43  DCHECK(CalledOnValidThread());
44  values_->SetBoolean(path, in_value);
45}
46
47bool InMemoryHostConfig::CopyFrom(const base::DictionaryValue* dictionary) {
48  bool result = true;
49
50  for (base::DictionaryValue::Iterator it(*dictionary); !it.IsAtEnd();
51       it.Advance()) {
52    std::string str_value;
53    bool bool_value;
54    if (it.value().GetAsString(&str_value)) {
55      SetString(it.key(), str_value);
56    } else if (it.value().GetAsBoolean(&bool_value)) {
57      SetBoolean(it.key(), bool_value);
58    } else {
59      result = false;
60    }
61  }
62
63  return result;
64}
65
66}  // namespace remoting
67