1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright (c) 2014 The Chromium Authors. All rights reserved.
2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file.
4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/prefs/tracked/dictionary_hash_store_contents.h"
6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/callback.h"
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/logging.h"
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/prefs/persistent_pref_store.h"
10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/values.h"
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h"
12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace {
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kPreferenceMACs[] = "protection.macs";
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char kSuperMACPref[] = "protection.super_mac";
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class MutablePreferenceMacDictionary
19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    : public HashStoreContents::MutableDictionary {
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public:
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  explicit MutablePreferenceMacDictionary(base::DictionaryValue* storage);
22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // MutableDictionary implementation
24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual base::DictionaryValue* operator->() OVERRIDE;
25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private:
27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  base::DictionaryValue* storage_;
28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MutablePreferenceMacDictionary);
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)};
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)MutablePreferenceMacDictionary::MutablePreferenceMacDictionary(
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    base::DictionaryValue* storage)
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    : storage_(storage) {
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)base::DictionaryValue* MutablePreferenceMacDictionary::operator->() {
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  base::DictionaryValue* mac_dictionary = NULL;
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (!storage_->GetDictionary(kPreferenceMACs, &mac_dictionary)) {
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    mac_dictionary = new base::DictionaryValue;
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    storage_->Set(kPreferenceMACs, mac_dictionary);
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return mac_dictionary;
46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}  // namespace
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)DictionaryHashStoreContents::DictionaryHashStoreContents(
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    base::DictionaryValue* storage)
52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    : storage_(storage) {
53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// static
56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void DictionaryHashStoreContents::RegisterProfilePrefs(
57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    user_prefs::PrefRegistrySyncable* registry) {
58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  registry->RegisterDictionaryPref(
59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      kPreferenceMACs,
60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  registry->RegisterStringPref(
62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      kSuperMACPref,
63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      std::string(),
64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)std::string DictionaryHashStoreContents::hash_store_id() const {
68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return "";
69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void DictionaryHashStoreContents::Reset() {
72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  storage_->Remove(kPreferenceMACs, NULL);
73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool DictionaryHashStoreContents::IsInitialized() const {
76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return storage_->GetDictionary(kPreferenceMACs, NULL);
77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const base::DictionaryValue* DictionaryHashStoreContents::GetContents() const {
80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  const base::DictionaryValue* mac_dictionary = NULL;
81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  storage_->GetDictionary(kPreferenceMACs, &mac_dictionary);
82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return mac_dictionary;
83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)scoped_ptr<HashStoreContents::MutableDictionary>
86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)DictionaryHashStoreContents::GetMutableContents() {
87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return scoped_ptr<MutableDictionary>(
88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      new MutablePreferenceMacDictionary(storage_));
89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)std::string DictionaryHashStoreContents::GetSuperMac() const {
92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::string super_mac_string;
93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  storage_->GetString(kSuperMACPref, &super_mac_string);
94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return super_mac_string;
95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void DictionaryHashStoreContents::SetSuperMac(const std::string& super_mac) {
98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  storage_->SetString(kSuperMACPref, super_mac);
99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
100