summaryrefslogtreecommitdiffstats
path: root/chrome/browser/value_store/policy_value_store.cc
blob: 29049b46a4b7df5d49282239694156e61bad8845 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/value_store/policy_value_store.h"

#include "base/logging.h"

using base::DictionaryValue;
using base::Value;

namespace {

const char kReadOnlyStoreErrorMessage[] = "This is a read-only store.";

ValueStore::WriteResult WriteResultError() {
  return ValueStore::MakeWriteResult(kReadOnlyStoreErrorMessage);
}

}  // namespace

PolicyValueStore::PolicyValueStore(const policy::PolicyMap* policy_map)
    : policy_map_(policy_map) {}

PolicyValueStore::~PolicyValueStore() {}

size_t PolicyValueStore::GetBytesInUse(const std::string& key) {
  // This store doesn't use any real storage.
  return 0;
}

size_t PolicyValueStore::GetBytesInUse(const std::vector<std::string>& keys) {
  // This store doesn't use any real storage.
  return 0;
}

size_t PolicyValueStore::GetBytesInUse() {
  // This store doesn't use any real storage.
  return 0;
}

ValueStore::ReadResult PolicyValueStore::Get(const std::string& key) {
  DictionaryValue* result = new DictionaryValue();
  AddEntryIfMandatory(result, key, policy_map_->Get(key));
  return MakeReadResult(result);
}

ValueStore::ReadResult PolicyValueStore::Get(
    const std::vector<std::string>& keys) {
  DictionaryValue* result = new DictionaryValue();
  for (std::vector<std::string>::const_iterator it = keys.begin();
       it != keys.end(); ++it) {
    AddEntryIfMandatory(result, *it, policy_map_->Get(*it));
  }
  return MakeReadResult(result);
}

ValueStore::ReadResult PolicyValueStore::Get() {
  DictionaryValue* result = new DictionaryValue();
  for (policy::PolicyMap::const_iterator it = policy_map_->begin();
       it != policy_map_->end(); ++it) {
    AddEntryIfMandatory(result, it->first, &it->second);
  }
  return MakeReadResult(result);
}

ValueStore::WriteResult PolicyValueStore::Set(
    WriteOptions options, const std::string& key, const Value& value) {
  return WriteResultError();
}

ValueStore::WriteResult PolicyValueStore::Set(
    WriteOptions options, const DictionaryValue& settings) {
  return WriteResultError();
}

ValueStore::WriteResult PolicyValueStore::Remove(const std::string& key) {
  return WriteResultError();
}

ValueStore::WriteResult PolicyValueStore::Remove(
    const std::vector<std::string>& keys) {
  return WriteResultError();
}

ValueStore::WriteResult PolicyValueStore::Clear() {
  return WriteResultError();
}

void PolicyValueStore::AddEntryIfMandatory(
    DictionaryValue* result,
    const std::string& key,
    const policy::PolicyMap::Entry* entry) {
  // TODO(joaodasilva): only mandatory policies are exposed for now.
  // Add support for recommended policies later. http://crbug.com/108992
  if (!entry || entry->level != policy::POLICY_LEVEL_MANDATORY)
    return;
  result->SetWithoutPathExpansion(key, entry->value->DeepCopy());
}