Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(228)

Side by Side Diff: chrome/browser/pref_value_store.cc

Issue 2823037: Add an ExtensionPrefStore, layered between the user prefs nad the managed pre... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/pref_value_store.h ('k') | chrome/browser/pref_value_store_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/pref_value_store.h" 5 #include "chrome/browser/pref_value_store.h"
6 6
7 PrefValueStore::PrefValueStore(PrefStore* managed_prefs, 7 PrefValueStore::PrefValueStore(PrefStore* managed_prefs,
8 PrefStore* extension_prefs,
8 PrefStore* user_prefs, 9 PrefStore* user_prefs,
9 PrefStore* recommended_prefs) 10 PrefStore* recommended_prefs) {
10 : managed_prefs_(managed_prefs), 11 pref_stores_[MANAGED].reset(managed_prefs);
11 user_prefs_(user_prefs), 12 pref_stores_[EXTENSION].reset(extension_prefs);
12 recommended_prefs_(recommended_prefs) { 13 pref_stores_[USER].reset(user_prefs);
14 pref_stores_[RECOMMENDED].reset(recommended_prefs);
13 } 15 }
14 16
15 PrefValueStore::~PrefValueStore() { } 17 PrefValueStore::~PrefValueStore() { }
16 18
17 bool PrefValueStore::GetValue( 19 bool PrefValueStore::GetValue(const std::wstring& name,
18 const std::wstring& name, Value** out_value) const { 20 Value** out_value) const {
19 // Check the |PrefStore|s in order of their priority from highest to lowest 21 // Check the |PrefStore|s in order of their priority from highest to lowest
20 // to find the value of the preference described by the given preference name. 22 // to find the value of the preference described by the given preference name.
21 if (managed_prefs_.get() && 23 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) {
22 managed_prefs_->prefs()->Get(name.c_str(), out_value) ) { 24 if (pref_stores_[i].get() &&
23 return true; 25 pref_stores_[i]->prefs()->Get(name.c_str(), out_value)) {
24 } else if (user_prefs_.get() && 26 return true;
25 user_prefs_->prefs()->Get(name.c_str(), out_value) ) { 27 }
26 return true;
27 } else if (recommended_prefs_.get() &&
28 recommended_prefs_->prefs()->Get(name.c_str(), out_value)) {
29 return true;
30 } 28 }
31 // No value found for the given preference name, set the return false. 29 // No value found for the given preference name, set the return false.
32 *out_value = NULL; 30 *out_value = NULL;
33 return false; 31 return false;
34 } 32 }
35 33
36 bool PrefValueStore::WritePrefs() { 34 bool PrefValueStore::WritePrefs() {
37 // Managed and recommended preferences are not set by the user. 35 bool success = true;
38 // Hence they will not be written out. 36 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) {
39 return user_prefs_->WritePrefs(); 37 if (pref_stores_[i].get())
38 success = pref_stores_[i]->WritePrefs() && success;
39 }
40 return success;
40 } 41 }
41 42
42 void PrefValueStore::ScheduleWritePrefs() { 43 void PrefValueStore::ScheduleWritePrefs() {
43 // Managed and recommended preferences are not set by the user. 44 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) {
44 // Hence they will not be written out. 45 if (pref_stores_[i].get())
45 user_prefs_->ScheduleWritePrefs(); 46 pref_stores_[i]->ScheduleWritePrefs();
47 }
46 } 48 }
47 49
48 PrefStore::PrefReadError PrefValueStore::ReadPrefs() { 50 PrefStore::PrefReadError PrefValueStore::ReadPrefs() {
49 PrefStore::PrefReadError managed_pref_error = PrefStore::PREF_READ_ERROR_NONE; 51 PrefStore::PrefReadError result = PrefStore::PREF_READ_ERROR_NONE;
50 PrefStore::PrefReadError user_pref_error = PrefStore::PREF_READ_ERROR_NONE; 52 for (size_t i = 0; i <= PREF_STORE_TYPE_MAX; ++i) {
51 PrefStore::PrefReadError recommended_pref_error = 53 if (pref_stores_[i].get()) {
52 PrefStore::PREF_READ_ERROR_NONE; 54 PrefStore::PrefReadError this_error = pref_stores_[i]->ReadPrefs();
53 55 if (result == PrefStore::PREF_READ_ERROR_NONE)
54 // Read managed preferences. 56 result = this_error;
55 if (managed_prefs_.get()) { 57 }
56 managed_pref_error = managed_prefs_->ReadPrefs();
57 } 58 }
58 59 // TODO(markusheintz): Return a better error status: maybe a struct with
59 // Read preferences set by the user. 60 // the error status of all PrefStores.
60 if (user_prefs_.get()) { 61 return result;
61 user_pref_error = user_prefs_->ReadPrefs();
62 }
63
64 // Read recommended preferences.
65 if (recommended_prefs_.get()) {
66 recommended_pref_error = recommended_prefs_->ReadPrefs();
67 }
68
69 // TODO(markusheintz): Return a better error status maybe a struct with
70 // the error status of all PrefStores.
71
72 // Return the first pref store error that occured.
73 if (managed_pref_error != PrefStore::PREF_READ_ERROR_NONE) {
74 return managed_pref_error;
75 }
76 if (user_pref_error != PrefStore::PREF_READ_ERROR_NONE) {
77 return user_pref_error;
78 }
79 return recommended_pref_error;
80 } 62 }
81 63
82 bool PrefValueStore::HasPrefPath(const wchar_t* path) const { 64 bool PrefValueStore::HasPrefPath(const wchar_t* path) const {
83 Value* tmp_value = NULL; 65 Value* tmp_value = NULL;
84 const std::wstring name(path); 66 const std::wstring name(path);
85 bool rv = GetValue(name, &tmp_value); 67 bool rv = GetValue(name, &tmp_value);
86 return rv; 68 return rv;
87 } 69 }
88 70
89 // The value of a Preference is managed if the PrefStore for managed 71 // The value of a Preference is managed if the PrefStore for managed
90 // preferences contains a value for the given preference |name|. 72 // preferences contains a value for the given preference |name|.
91 bool PrefValueStore::PrefValueIsManaged(const wchar_t* name) { 73 bool PrefValueStore::PrefValueIsManaged(const wchar_t* name) {
92 if (managed_prefs_.get() == NULL) { 74 if (pref_stores_[MANAGED].get() == NULL) {
93 // No managed PreferenceStore set, hence there are no managed 75 // No managed PreferenceStore set, hence there are no managed
94 // preferences. 76 // preferences.
95 return false; 77 return false;
96 } 78 }
97 Value* tmp_value; 79 Value* tmp_value;
98 return managed_prefs_->prefs()->Get(name, &tmp_value); 80 return pref_stores_[MANAGED]->prefs()->Get(name, &tmp_value);
99 } 81 }
100 82
101 // Note the |DictionaryValue| referenced by the |PrefStore| user_prefs_ 83 // Note the |DictionaryValue| referenced by the |PrefStore| user_prefs_
102 // (returned by the method Prefs()) takes the ownership of the Value referenced 84 // (returned by the method prefs()) takes the ownership of the Value referenced
103 // by in_value. 85 // by in_value.
104 void PrefValueStore::SetUserPrefValue(const wchar_t* name, Value* in_value) { 86 void PrefValueStore::SetUserPrefValue(const wchar_t* name, Value* in_value) {
105 user_prefs_->prefs()->Set(name, in_value); 87 pref_stores_[USER]->prefs()->Set(name, in_value);
106 } 88 }
107 89
108 bool PrefValueStore::ReadOnly() { 90 bool PrefValueStore::ReadOnly() {
109 return user_prefs_->ReadOnly(); 91 return pref_stores_[USER]->ReadOnly();
110 } 92 }
111 93
112 void PrefValueStore::RemoveUserPrefValue(const wchar_t* name) { 94 void PrefValueStore::RemoveUserPrefValue(const wchar_t* name) {
113 if (user_prefs_.get()) { 95 if (pref_stores_[USER].get()) {
114 user_prefs_->prefs()->Remove(name, NULL); 96 pref_stores_[USER]->prefs()->Remove(name, NULL);
115 } 97 }
116 } 98 }
OLDNEW
« no previous file with comments | « chrome/browser/pref_value_store.h ('k') | chrome/browser/pref_value_store_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698