15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "remoting/host/in_memory_host_config.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace remoting {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InMemoryHostConfig::InMemoryHostConfig()
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : values_(new base::DictionaryValue()) {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InMemoryHostConfig::~InMemoryHostConfig() {}
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool InMemoryHostConfig::GetString(const std::string& path,
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   std::string* out_value) const {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return values_->GetString(path, out_value);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool InMemoryHostConfig::GetBoolean(const std::string& path,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    bool* out_value) const {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return values_->GetBoolean(path, out_value);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool InMemoryHostConfig::Save() {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Saving in-memory host config is not supported.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InMemoryHostConfig::SetString(const std::string& path,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   const std::string& in_value) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values_->SetString(path, in_value);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InMemoryHostConfig::SetBoolean(const std::string& path, bool in_value) {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(CalledOnValidThread());
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  values_->SetBoolean(path, in_value);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool InMemoryHostConfig::CopyFrom(const base::DictionaryValue* dictionary) {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool result = true;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (base::DictionaryValue::Iterator it(*dictionary); !it.IsAtEnd();
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       it.Advance()) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string str_value;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool bool_value;
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (it.value().GetAsString(&str_value)) {
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      SetString(it.key(), str_value);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    } else if (it.value().GetAsBoolean(&bool_value)) {
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      SetBoolean(it.key(), bool_value);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      result = false;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return result;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace remoting
67