diff options
author | battre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-25 23:01:56 +0000 |
---|---|---|
committer | battre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-25 23:01:56 +0000 |
commit | 31685740c08e353f1f9144bedb3ea235a6476102 (patch) | |
tree | 5f672248c4f5fe392c25f3611a46f25f35eace47 /chrome/browser/extensions/extension_pref_value_map.cc | |
parent | ae3a7c8fb5b8b084f9e29d6933662e582b2b704a (diff) | |
download | chromium_src-31685740c08e353f1f9144bedb3ea235a6476102.zip chromium_src-31685740c08e353f1f9144bedb3ea235a6476102.tar.gz chromium_src-31685740c08e353f1f9144bedb3ea235a6476102.tar.bz2 |
Enable incognito_session_only preferences
BUG=60099
TEST=no
Review URL: http://codereview.chromium.org/7067040
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86731 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_pref_value_map.cc')
-rw-r--r-- | chrome/browser/extensions/extension_pref_value_map.cc | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extension_pref_value_map.cc b/chrome/browser/extensions/extension_pref_value_map.cc index 5b0b5ee..99bceb1 100644 --- a/chrome/browser/extensions/extension_pref_value_map.cc +++ b/chrome/browser/extensions/extension_pref_value_map.cc @@ -18,6 +18,9 @@ struct ExtensionPrefValueMap::ExtensionEntry { // Persistent extension controlled preferences for the incognito profile, // empty for regular profile ExtensionPrefStore. PrefValueMap incognito_profile_preferences_persistent; + // Session only extension controlled preferences for the incognito profile. + // These preferences are deleted when the incognito profile is destroyed. + PrefValueMap incognito_profile_preferences_session_only; }; ExtensionPrefValueMap::ExtensionPrefValueMap() { @@ -66,6 +69,25 @@ bool ExtensionPrefValueMap::CanExtensionControlPref( return winner->second->install_time <= ext->second->install_time; } +void ExtensionPrefValueMap::ClearAllIncognitoSessionOnlyPreferences() { + typedef std::set<std::string> KeySet; + KeySet deleted_keys; + + ExtensionEntryMap::iterator i; + for (i = entries_.begin(); i != entries_.end(); ++i) { + PrefValueMap& inc_prefs = + i->second->incognito_profile_preferences_session_only; + PrefValueMap::iterator j; + for (j = inc_prefs.begin(); j != inc_prefs.end(); ++j) + deleted_keys.insert(j->first); + inc_prefs.Clear(); + } + + KeySet::iterator k; + for (k = deleted_keys.begin(); k != deleted_keys.end(); ++k) + NotifyPrefValueChanged(*k); +} + bool ExtensionPrefValueMap::DoesExtensionControlPref( const std::string& extension_id, const std::string& pref_key, @@ -125,6 +147,8 @@ PrefValueMap* ExtensionPrefValueMap::GetExtensionPrefValueMap( return &(i->second->regular_profile_preferences); case extension_prefs_scope::kIncognitoPersistent: return &(i->second->incognito_profile_preferences_persistent); + case extension_prefs_scope::kIncognitoSessionOnly: + return &(i->second->incognito_profile_preferences_session_only); } NOTREACHED(); return NULL; @@ -140,6 +164,8 @@ const PrefValueMap* ExtensionPrefValueMap::GetExtensionPrefValueMap( return &(i->second->regular_profile_preferences); case extension_prefs_scope::kIncognitoPersistent: return &(i->second->incognito_profile_preferences_persistent); + case extension_prefs_scope::kIncognitoSessionOnly: + return &(i->second->incognito_profile_preferences_session_only); } NOTREACHED(); return NULL; @@ -158,6 +184,11 @@ void ExtensionPrefValueMap::GetExtensionControlledKeys( entry.incognito_profile_preferences_persistent; for (i = inc_prefs_pers.begin(); i != inc_prefs_pers.end(); ++i) out->insert(i->first); + + const PrefValueMap& inc_prefs_session = + entry.incognito_profile_preferences_session_only; + for (i = inc_prefs_session.begin(); i != inc_prefs_session.end(); ++i) + out->insert(i->first); } const Value* ExtensionPrefValueMap::GetEffectivePrefValue( @@ -171,11 +202,23 @@ const Value* ExtensionPrefValueMap::GetEffectivePrefValue( const Value* value = NULL; const std::string& ext_id = winner->first; + + // First search for incognito session only preferences. if (incognito) { const PrefValueMap* prefs = GetExtensionPrefValueMap( + ext_id, extension_prefs_scope::kIncognitoSessionOnly); + prefs->GetValue(key, &value); + } + + // If no incognito session only preference exists, fall back to persistent + // incognito preference. + if (incognito && !value) { + const PrefValueMap* prefs = GetExtensionPrefValueMap( ext_id, extension_prefs_scope::kIncognitoPersistent); prefs->GetValue(key, &value); } + + // Finally consider a regular preference. if (!value) { const PrefValueMap* prefs = GetExtensionPrefValueMap( ext_id, extension_prefs_scope::kRegular); @@ -224,6 +267,15 @@ ExtensionPrefValueMap::GetEffectivePrefValueController( if (from_incognito) *from_incognito = true; } + + prefs = GetExtensionPrefValueMap( + ext_id, extension_prefs_scope::kIncognitoSessionOnly); + if (prefs->GetValue(key, &value)) { + winner = i; + winners_install_time = install_time; + if (from_incognito) + *from_incognito = true; + } } return winner; } |