summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-06 13:32:50 +0000
committerbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-06 13:32:50 +0000
commitc81f22b04bbdae30eb47b0563b79b811682541a7 (patch)
tree7c0c0a24ee1baa29c9bbb21dbf70685c753bd1b2 /chrome
parent9dc8cf77eac81836255d0fbc60964c65eeaa491b (diff)
downloadchromium_src-c81f22b04bbdae30eb47b0563b79b811682541a7.zip
chromium_src-c81f22b04bbdae30eb47b0563b79b811682541a7.tar.gz
chromium_src-c81f22b04bbdae30eb47b0563b79b811682541a7.tar.bz2
Be more robust when getting content settings for uninstalled extensions.
BUG=92459 TEST=see bug Review URL: http://codereview.chromium.org/7617004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@99729 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/extensions/extension_content_settings_store.cc40
-rw-r--r--chrome/browser/extensions/extension_prefs.cc9
-rw-r--r--chrome/browser/extensions/extension_prefs.h2
-rw-r--r--chrome/browser/extensions/extension_prefs_unittest.cc11
4 files changed, 40 insertions, 22 deletions
diff --git a/chrome/browser/extensions/extension_content_settings_store.cc b/chrome/browser/extensions/extension_content_settings_store.cc
index 779baf9..6136b37 100644
--- a/chrome/browser/extensions/extension_content_settings_store.cc
+++ b/chrome/browser/extensions/extension_content_settings_store.cc
@@ -165,16 +165,16 @@ ExtensionContentSettingsStore::ContentSettingSpecList*
const std::string& ext_id,
ExtensionPrefsScope scope) {
ExtensionEntryMap::const_iterator i = entries_.find(ext_id);
- DCHECK(i != entries_.end());
- switch (scope) {
- case kExtensionPrefsScopeRegular:
- return &(i->second->settings);
- case kExtensionPrefsScopeIncognitoPersistent:
- return &(i->second->incognito_persistent_settings);
- case kExtensionPrefsScopeIncognitoSessionOnly:
- return &(i->second->incognito_session_only_settings);
+ if (i != entries_.end()) {
+ switch (scope) {
+ case kExtensionPrefsScopeRegular:
+ return &(i->second->settings);
+ case kExtensionPrefsScopeIncognitoPersistent:
+ return &(i->second->incognito_persistent_settings);
+ case kExtensionPrefsScopeIncognitoSessionOnly:
+ return &(i->second->incognito_session_only_settings);
+ }
}
- NOTREACHED();
return NULL;
}
@@ -183,16 +183,16 @@ const ExtensionContentSettingsStore::ContentSettingSpecList*
const std::string& ext_id,
ExtensionPrefsScope scope) const {
ExtensionEntryMap::const_iterator i = entries_.find(ext_id);
- DCHECK(i != entries_.end());
- switch (scope) {
- case kExtensionPrefsScopeRegular:
- return &(i->second->settings);
- case kExtensionPrefsScopeIncognitoPersistent:
- return &(i->second->incognito_persistent_settings);
- case kExtensionPrefsScopeIncognitoSessionOnly:
- return &(i->second->incognito_session_only_settings);
+ if (i != entries_.end()) {
+ switch (scope) {
+ case kExtensionPrefsScopeRegular:
+ return &(i->second->settings);
+ case kExtensionPrefsScopeIncognitoPersistent:
+ return &(i->second->incognito_persistent_settings);
+ case kExtensionPrefsScopeIncognitoSessionOnly:
+ return &(i->second->incognito_session_only_settings);
+ }
}
- NOTREACHED();
return NULL;
}
@@ -339,9 +339,11 @@ ListValue* ExtensionContentSettingsStore::GetSettingsForExtension(
const std::string& extension_id,
ExtensionPrefsScope scope) const {
base::AutoLock lock(lock_);
- ListValue* settings = new ListValue();
const ContentSettingSpecList* setting_spec_list =
GetContentSettingSpecList(extension_id, scope);
+ if (!setting_spec_list)
+ return NULL;
+ ListValue* settings = new ListValue();
ContentSettingSpecList::const_iterator it;
for (it = setting_spec_list->begin(); it != setting_spec_list->end(); ++it) {
DictionaryValue* setting_dict = new DictionaryValue();
diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc
index 816b5ce..94af184 100644
--- a/chrome/browser/extensions/extension_prefs.cc
+++ b/chrome/browser/extensions/extension_prefs.cc
@@ -1100,18 +1100,21 @@ void ExtensionPrefs::UpdateExtensionPref(const std::string& extension_id,
return;
}
ScopedExtensionPrefUpdate update(prefs_, extension_id);
- update->Set(key, data_value);
+ if (data_value)
+ update->Set(key, data_value);
+ else
+ update->Remove(key, NULL);
}
void ExtensionPrefs::DeleteExtensionPrefs(const std::string& extension_id) {
+ extension_pref_value_map_->UnregisterExtension(extension_id);
+ content_settings_store_->UnregisterExtension(extension_id);
DictionaryPrefUpdate update(prefs_, kExtensionsPref);
DictionaryValue* dict = update.Get();
if (dict->HasKey(extension_id)) {
dict->Remove(extension_id, NULL);
SavePrefs();
}
- extension_pref_value_map_->UnregisterExtension(extension_id);
- content_settings_store_->UnregisterExtension(extension_id);
}
const DictionaryValue* ExtensionPrefs::GetExtensionPref(
diff --git a/chrome/browser/extensions/extension_prefs.h b/chrome/browser/extensions/extension_prefs.h
index e17f739..fe759ac 100644
--- a/chrome/browser/extensions/extension_prefs.h
+++ b/chrome/browser/extensions/extension_prefs.h
@@ -367,6 +367,8 @@ class ExtensionPrefs : public ExtensionContentSettingsStore::Observer {
virtual base::Time GetCurrentTime() const;
private:
+ friend class ExtensionPrefsUninstallExtension; // Unit test.
+
// ExtensionContentSettingsStore::Observer methods:
virtual void OnContentSettingChanged(
const std::string& extension_id,
diff --git a/chrome/browser/extensions/extension_prefs_unittest.cc b/chrome/browser/extensions/extension_prefs_unittest.cc
index f9a552a..b536410 100644
--- a/chrome/browser/extensions/extension_prefs_unittest.cc
+++ b/chrome/browser/extensions/extension_prefs_unittest.cc
@@ -932,10 +932,21 @@ class ExtensionPrefsUninstallExtension
virtual void Initialize() {
InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1"));
InstallExtControlledPref(ext1_, kPref2, Value::CreateStringValue("val2"));
+ ExtensionContentSettingsStore* store = prefs()->content_settings_store();
+ ContentSettingsPattern pattern =
+ ContentSettingsPattern::FromString("http://[*.]example.com");
+ store->SetExtensionContentSetting(ext1_->id(),
+ pattern, pattern,
+ CONTENT_SETTINGS_TYPE_IMAGES,
+ std::string(),
+ CONTENT_SETTING_BLOCK,
+ kExtensionPrefsScopeRegular);
UninstallExtension(ext1_->id());
}
virtual void Verify() {
+ EXPECT_EQ(NULL, prefs()->GetExtensionPref(ext1_->id()));
+
std::string actual;
actual = prefs()->pref_service()->GetString(kPref1);
EXPECT_EQ(kDefaultPref1, actual);