OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |