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