Index: chrome/browser/extensions/extension_prefs.cc |
diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc |
index 57cd52acdb18f046b56a1401b59825281f716073..56dc02fe19b7ddb25a8c0445929d3fde59f1f6a4 100644 |
--- a/chrome/browser/extensions/extension_prefs.cc |
+++ b/chrome/browser/extensions/extension_prefs.cc |
@@ -119,6 +119,9 @@ const char kPrefIncognitoPreferences[] = "incognito_preferences"; |
// A preference that contains extension-set content settings. |
const char kPrefContentSettings[] = "content_settings"; |
+// A preference that contains extension-set content settings. |
+const char kPrefIncognitoContentSettings[] = "incognito_content_settings"; |
+ |
// Provider of write access to a dictionary storing extension prefs. |
class ScopedExtensionPrefUpdate : public DictionaryPrefUpdate { |
public: |
@@ -895,6 +898,7 @@ void ExtensionPrefs::OnExtensionInstalled( |
extension_dict->Set(kPrefPreferences, new DictionaryValue()); |
extension_dict->Set(kPrefIncognitoPreferences, new DictionaryValue()); |
extension_dict->Set(kPrefContentSettings, new ListValue()); |
+ extension_dict->Set(kPrefIncognitoContentSettings, new ListValue()); |
FilePath::StringType path = MakePathRelative(install_directory_, |
extension->path()); |
@@ -1332,12 +1336,19 @@ base::Time ExtensionPrefs::GetCurrentTime() const { |
return base::Time::Now(); |
} |
-void ExtensionPrefs::OnContentSettingChanged(const std::string& extension_id, |
- bool incognito) { |
- if (!incognito) { |
+void ExtensionPrefs::OnContentSettingChanged( |
+ const std::string& extension_id, |
+ bool incognito) { |
+ if (incognito) { |
+ UpdateExtensionPref( |
+ extension_id, kPrefIncognitoContentSettings, |
+ content_settings_store_->GetSettingsForExtension( |
+ extension_id, extension_prefs_scope::kIncognitoPersistent)); |
+ } else { |
UpdateExtensionPref( |
extension_id, kPrefContentSettings, |
- content_settings_store_->GetSettingsForExtension(extension_id)); |
+ content_settings_store_->GetSettingsForExtension( |
+ extension_id, extension_prefs_scope::kRegular)); |
} |
} |
@@ -1457,9 +1468,17 @@ void ExtensionPrefs::InitPrefStore() { |
const DictionaryValue* extension_prefs = GetExtensionPref(*ext_id); |
DCHECK(extension_prefs); |
ListValue* content_settings = NULL; |
- if (extension_prefs->GetList(kPrefContentSettings, &content_settings)) { |
+ if (extension_prefs->GetList(kPrefContentSettings, |
+ &content_settings)) { |
+ content_settings_store_->SetExtensionContentSettingsFromList( |
+ *ext_id, content_settings, |
+ extension_prefs_scope::kRegular); |
+ } |
+ if (extension_prefs->GetList(kPrefIncognitoContentSettings, |
+ &content_settings)) { |
content_settings_store_->SetExtensionContentSettingsFromList( |
- *ext_id, content_settings); |
+ *ext_id, content_settings, |
+ extension_prefs_scope::kIncognitoPersistent); |
} |
} |
@@ -1553,6 +1572,17 @@ bool ExtensionPrefs::HasIncognitoPrefValue(const std::string& pref_key) { |
return has_incognito_pref_value; |
} |
+void ExtensionPrefs::ClearIncognitoSessionOnlyContentSettings() { |
+ ExtensionIdSet extension_ids; |
+ GetExtensions(&extension_ids); |
+ for (ExtensionIdSet::iterator ext_id = extension_ids.begin(); |
+ ext_id != extension_ids.end(); ++ext_id) { |
+ content_settings_store_->ClearContentSettingsForExtension( |
+ *ext_id, |
+ extension_prefs_scope::kIncognitoSessionOnly); |
+ } |
+} |
+ |
// static |
void ExtensionPrefs::RegisterUserPrefs(PrefService* prefs) { |
prefs->RegisterDictionaryPref(kExtensionsPref, PrefService::UNSYNCABLE_PREF); |