| 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 |