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

Side by Side Diff: chrome/browser/extensions/extension_prefs.cc

Issue 5646003: Sanitize PrefStore interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase, fix up unit tests. Created 10 years 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
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/extensions/extension_prefs.h" 5 #include "chrome/browser/extensions/extension_prefs.h"
6 6
7 #include "base/string_util.h" 7 #include "base/string_util.h"
8 #include "base/string_number_conversions.h" 8 #include "base/string_number_conversions.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/extensions/extension_pref_store.h"
10 #include "chrome/browser/prefs/pref_notifier.h" 11 #include "chrome/browser/prefs/pref_notifier.h"
11 #include "chrome/common/extensions/extension.h" 12 #include "chrome/common/extensions/extension.h"
12 #include "chrome/common/extensions/url_pattern.h" 13 #include "chrome/common/extensions/url_pattern.h"
13 #include "chrome/common/notification_service.h" 14 #include "chrome/common/notification_service.h"
14 #include "chrome/common/pref_names.h" 15 #include "chrome/common/pref_names.h"
15 16
16 using base::Time; 17 using base::Time;
17 18
18 namespace { 19 namespace {
19 20
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 std::set<std::string>* result) { 134 std::set<std::string>* result) {
134 ExtensionExtent::PatternList patterns = host_extent.patterns(); 135 ExtensionExtent::PatternList patterns = host_extent.patterns();
135 ExtensionExtent::PatternList::const_iterator i; 136 ExtensionExtent::PatternList::const_iterator i;
136 137
137 for (i = patterns.begin(); i != patterns.end(); ++i) 138 for (i = patterns.begin(); i != patterns.end(); ++i)
138 result->insert(i->GetAsString()); 139 result->insert(i->GetAsString());
139 } 140 }
140 141
141 } // namespace 142 } // namespace
142 143
143 ExtensionPrefs::ExtensionPrefs(PrefService* prefs, const FilePath& root_dir) 144 ExtensionPrefs::ExtensionPrefs(PrefService* prefs,
145 const FilePath& root_dir,
146 ExtensionPrefStore* pref_store)
144 : prefs_(prefs), 147 : prefs_(prefs),
145 install_directory_(root_dir) { 148 install_directory_(root_dir),
149 pref_store_(pref_store) {
146 // TODO(asargent) - Remove this in a couple of months. (See comment above 150 // TODO(asargent) - Remove this in a couple of months. (See comment above
147 // CleanupBadExtensionKeys). 151 // CleanupBadExtensionKeys).
148 CleanupBadExtensionKeys(prefs_); 152 CleanupBadExtensionKeys(prefs_);
149 153
150 MakePathsRelative(); 154 MakePathsRelative();
151 155
152 InitPrefStore(); 156 InitPrefStore();
153 } 157 }
154 158
155 ExtensionPrefs::~ExtensionPrefs() {} 159 ExtensionPrefs::~ExtensionPrefs() {}
(...skipping 1025 matching lines...) Expand 10 before | Expand all | Expand 10 after
1181 1185
1182 // Collect the unique extension controlled preference keys of all extensions. 1186 // Collect the unique extension controlled preference keys of all extensions.
1183 PrefKeySet ext_controlled_prefs; 1187 PrefKeySet ext_controlled_prefs;
1184 for (ExtensionIdSet::iterator ext_id = extension_ids.begin(); 1188 for (ExtensionIdSet::iterator ext_id = extension_ids.begin();
1185 ext_id != extension_ids.end(); ++ext_id) { 1189 ext_id != extension_ids.end(); ++ext_id) {
1186 GetExtensionControlledPrefKeys(*ext_id, &ext_controlled_prefs); 1190 GetExtensionControlledPrefKeys(*ext_id, &ext_controlled_prefs);
1187 } 1191 }
1188 1192
1189 // Store winning preference for each extension controlled preference. 1193 // Store winning preference for each extension controlled preference.
1190 UpdatePrefStore(ext_controlled_prefs); 1194 UpdatePrefStore(ext_controlled_prefs);
1195 pref_store_->OnInitializationCompleted();
1191 } 1196 }
1192 1197
1193 const Value* ExtensionPrefs::GetWinningExtensionControlledPrefValue( 1198 const Value* ExtensionPrefs::GetWinningExtensionControlledPrefValue(
1194 const std::string& key) const { 1199 const std::string& key) const {
1195 Value *winner = NULL; 1200 Value *winner = NULL;
1196 base::Time winners_install_time = base::Time::Time(); 1201 base::Time winners_install_time = base::Time::Time();
1197 1202
1198 ExtensionIdSet extension_ids; 1203 ExtensionIdSet extension_ids;
1199 GetEnabledExtensions(&extension_ids); 1204 GetEnabledExtensions(&extension_ids);
1200 for (ExtensionIdSet::iterator ext_id = extension_ids.begin(); 1205 for (ExtensionIdSet::iterator ext_id = extension_ids.begin();
(...skipping 19 matching lines...) Expand all
1220 1225
1221 void ExtensionPrefs::UpdatePrefStore( 1226 void ExtensionPrefs::UpdatePrefStore(
1222 const ExtensionPrefs::PrefKeySet& pref_keys) { 1227 const ExtensionPrefs::PrefKeySet& pref_keys) {
1223 for (PrefKeySet::const_iterator i = pref_keys.begin(); 1228 for (PrefKeySet::const_iterator i = pref_keys.begin();
1224 i != pref_keys.end(); ++i) { 1229 i != pref_keys.end(); ++i) {
1225 UpdatePrefStore(*i); 1230 UpdatePrefStore(*i);
1226 } 1231 }
1227 } 1232 }
1228 1233
1229 void ExtensionPrefs::UpdatePrefStore(const std::string& pref_key) { 1234 void ExtensionPrefs::UpdatePrefStore(const std::string& pref_key) {
1230 PrefStore* extension_pref_store = 1235 if (pref_store_ == NULL)
1231 pref_service()->GetExtensionPrefStore(); 1236 return;
1232 if (extension_pref_store == NULL)
1233 return; // Profile is being shut down, Pref Service is already gone.
1234 const Value* winning_pref_value = 1237 const Value* winning_pref_value =
1235 GetWinningExtensionControlledPrefValue(pref_key); 1238 GetWinningExtensionControlledPrefValue(pref_key);
1236 Value* old_value = NULL;
1237 extension_pref_store->prefs()->Get(pref_key, &old_value);
1238 bool changed = !Value::Equals(winning_pref_value, old_value);
1239 1239
1240 if (winning_pref_value) { 1240 if (winning_pref_value)
1241 extension_pref_store->prefs()->Set(pref_key, 1241 pref_store_->SetExtensionPref(pref_key, winning_pref_value->DeepCopy());
1242 winning_pref_value->DeepCopy()); 1242 else
1243 } else { 1243 pref_store_->RemoveExtensionPref(pref_key);
1244 extension_pref_store->prefs()->Remove(pref_key, NULL);
1245 }
1246
1247 if (changed)
1248 pref_service()->pref_notifier()->OnPreferenceChanged(pref_key.c_str());
1249 } 1244 }
1250 1245
1251 void ExtensionPrefs::SetExtensionControlledPref(const std::string& extension_id, 1246 void ExtensionPrefs::SetExtensionControlledPref(const std::string& extension_id,
1252 const std::string& pref_key, 1247 const std::string& pref_key,
1253 Value* value) { 1248 Value* value) {
1254 DCHECK(pref_service()->FindPreference(pref_key.c_str())) 1249 DCHECK(pref_service()->FindPreference(pref_key.c_str()))
1255 << "Extension controlled preference key " << pref_key 1250 << "Extension controlled preference key " << pref_key
1256 << " not registered."; 1251 << " not registered.";
1257 DictionaryValue* extension_preferences = 1252 DictionaryValue* extension_preferences =
1258 GetExtensionControlledPrefs(extension_id); 1253 GetExtensionControlledPrefs(extension_id);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1298 void ExtensionPrefs::RegisterUserPrefs(PrefService* prefs) { 1293 void ExtensionPrefs::RegisterUserPrefs(PrefService* prefs) {
1299 prefs->RegisterDictionaryPref(kExtensionsPref); 1294 prefs->RegisterDictionaryPref(kExtensionsPref);
1300 prefs->RegisterListPref(kExtensionToolbar); 1295 prefs->RegisterListPref(kExtensionToolbar);
1301 prefs->RegisterIntegerPref(prefs::kExtensionToolbarSize, -1); 1296 prefs->RegisterIntegerPref(prefs::kExtensionToolbarSize, -1);
1302 prefs->RegisterDictionaryPref(kExtensionsBlacklistUpdate); 1297 prefs->RegisterDictionaryPref(kExtensionsBlacklistUpdate);
1303 prefs->RegisterListPref(prefs::kExtensionInstallAllowList); 1298 prefs->RegisterListPref(prefs::kExtensionInstallAllowList);
1304 prefs->RegisterListPref(prefs::kExtensionInstallDenyList); 1299 prefs->RegisterListPref(prefs::kExtensionInstallDenyList);
1305 prefs->RegisterListPref(prefs::kExtensionInstallForceList); 1300 prefs->RegisterListPref(prefs::kExtensionInstallForceList);
1306 prefs->RegisterStringPref(kWebStoreLogin, std::string() /* default_value */); 1301 prefs->RegisterStringPref(kWebStoreLogin, std::string() /* default_value */);
1307 } 1302 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698