Index: chrome/browser/extensions/extension_pref_value_map.cc |
diff --git a/chrome/browser/extensions/extension_pref_value_map.cc b/chrome/browser/extensions/extension_pref_value_map.cc |
deleted file mode 100644 |
index bcc4380ca9c26a401fa57eebe33cf754858ff8f1..0000000000000000000000000000000000000000 |
--- a/chrome/browser/extensions/extension_pref_value_map.cc |
+++ /dev/null |
@@ -1,376 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/extensions/extension_pref_value_map.h" |
- |
-#include "base/prefs/pref_value_map.h" |
-#include "base/stl_util.h" |
-#include "base/values.h" |
- |
-using extensions::ExtensionPrefsScope; |
- |
-struct ExtensionPrefValueMap::ExtensionEntry { |
- // Installation time of the extension. |
- base::Time install_time; |
- // Whether extension is enabled in the profile. |
- bool enabled; |
- // Extension controlled preferences for the regular profile. |
- PrefValueMap regular_profile_preferences; |
- // Extension controlled preferences that should *only* apply to the regular |
- // profile. |
- PrefValueMap regular_only_profile_preferences; |
- // 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() : destroyed_(false) { |
-} |
- |
-ExtensionPrefValueMap::~ExtensionPrefValueMap() { |
- if (!destroyed_) { |
- NotifyOfDestruction(); |
- destroyed_ = true; |
- } |
- STLDeleteValues(&entries_); |
- entries_.clear(); |
-} |
- |
-void ExtensionPrefValueMap::Shutdown() { |
- NotifyOfDestruction(); |
- destroyed_ = true; |
-} |
- |
-void ExtensionPrefValueMap::SetExtensionPref(const std::string& ext_id, |
- const std::string& key, |
- ExtensionPrefsScope scope, |
- base::Value* value) { |
- PrefValueMap* prefs = GetExtensionPrefValueMap(ext_id, scope); |
- |
- if (prefs->SetValue(key, value)) |
- NotifyPrefValueChanged(key); |
-} |
- |
-void ExtensionPrefValueMap::RemoveExtensionPref( |
- const std::string& ext_id, |
- const std::string& key, |
- ExtensionPrefsScope scope) { |
- PrefValueMap* prefs = GetExtensionPrefValueMap(ext_id, scope); |
- if (prefs->RemoveValue(key)) |
- NotifyPrefValueChanged(key); |
-} |
- |
-bool ExtensionPrefValueMap::CanExtensionControlPref( |
- const std::string& extension_id, |
- const std::string& pref_key, |
- bool incognito) const { |
- ExtensionEntryMap::const_iterator ext = entries_.find(extension_id); |
- if (ext == entries_.end()) { |
- NOTREACHED(); |
- return false; |
- } |
- |
- ExtensionEntryMap::const_iterator winner = |
- GetEffectivePrefValueController(pref_key, incognito, NULL); |
- if (winner == entries_.end()) |
- return true; |
- |
- 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, |
- bool* from_incognito) const { |
- bool incognito = (from_incognito != NULL); |
- ExtensionEntryMap::const_iterator winner = |
- GetEffectivePrefValueController(pref_key, incognito, from_incognito); |
- if (winner == entries_.end()) |
- return false; |
- return winner->first == extension_id; |
-} |
- |
-void ExtensionPrefValueMap::RegisterExtension(const std::string& ext_id, |
- const base::Time& install_time, |
- bool is_enabled) { |
- if (entries_.find(ext_id) == entries_.end()) { |
- entries_[ext_id] = new ExtensionEntry; |
- |
- // Only update the install time if the extension is newly installed. |
- entries_[ext_id]->install_time = install_time; |
- } |
- |
- entries_[ext_id]->enabled = is_enabled; |
-} |
- |
-void ExtensionPrefValueMap::UnregisterExtension(const std::string& ext_id) { |
- ExtensionEntryMap::iterator i = entries_.find(ext_id); |
- if (i == entries_.end()) |
- return; |
- std::set<std::string> keys; // keys set by this extension |
- GetExtensionControlledKeys(*(i->second), &keys); |
- |
- delete i->second; |
- entries_.erase(i); |
- |
- NotifyPrefValueChanged(keys); |
-} |
- |
-void ExtensionPrefValueMap::SetExtensionState(const std::string& ext_id, |
- bool is_enabled) { |
- ExtensionEntryMap::const_iterator i = entries_.find(ext_id); |
- // This may happen when sync sets the extension state for an |
- // extension that is not installed. |
- if (i == entries_.end()) |
- return; |
- if (i->second->enabled == is_enabled) |
- return; |
- std::set<std::string> keys; // keys set by this extension |
- GetExtensionControlledKeys(*(i->second), &keys); |
- i->second->enabled = is_enabled; |
- NotifyPrefValueChanged(keys); |
-} |
- |
-PrefValueMap* ExtensionPrefValueMap::GetExtensionPrefValueMap( |
- const std::string& ext_id, |
- ExtensionPrefsScope scope) { |
- ExtensionEntryMap::const_iterator i = entries_.find(ext_id); |
- CHECK(i != entries_.end()); |
- switch (scope) { |
- case extensions::kExtensionPrefsScopeRegular: |
- return &(i->second->regular_profile_preferences); |
- case extensions::kExtensionPrefsScopeRegularOnly: |
- return &(i->second->regular_only_profile_preferences); |
- case extensions::kExtensionPrefsScopeIncognitoPersistent: |
- return &(i->second->incognito_profile_preferences_persistent); |
- case extensions::kExtensionPrefsScopeIncognitoSessionOnly: |
- return &(i->second->incognito_profile_preferences_session_only); |
- } |
- NOTREACHED(); |
- return NULL; |
-} |
- |
-const PrefValueMap* ExtensionPrefValueMap::GetExtensionPrefValueMap( |
- const std::string& ext_id, |
- ExtensionPrefsScope scope) const { |
- ExtensionEntryMap::const_iterator i = entries_.find(ext_id); |
- CHECK(i != entries_.end()); |
- switch (scope) { |
- case extensions::kExtensionPrefsScopeRegular: |
- return &(i->second->regular_profile_preferences); |
- case extensions::kExtensionPrefsScopeRegularOnly: |
- return &(i->second->regular_only_profile_preferences); |
- case extensions::kExtensionPrefsScopeIncognitoPersistent: |
- return &(i->second->incognito_profile_preferences_persistent); |
- case extensions::kExtensionPrefsScopeIncognitoSessionOnly: |
- return &(i->second->incognito_profile_preferences_session_only); |
- } |
- NOTREACHED(); |
- return NULL; |
-} |
- |
-void ExtensionPrefValueMap::GetExtensionControlledKeys( |
- const ExtensionEntry& entry, |
- std::set<std::string>* out) const { |
- PrefValueMap::const_iterator i; |
- |
- const PrefValueMap& regular_prefs = entry.regular_profile_preferences; |
- for (i = regular_prefs.begin(); i != regular_prefs.end(); ++i) |
- out->insert(i->first); |
- |
- const PrefValueMap& regular_only_prefs = |
- entry.regular_only_profile_preferences; |
- for (i = regular_only_prefs.begin(); i != regular_only_prefs.end(); ++i) |
- out->insert(i->first); |
- |
- const PrefValueMap& inc_prefs_pers = |
- 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 base::Value* ExtensionPrefValueMap::GetEffectivePrefValue( |
- const std::string& key, |
- bool incognito, |
- bool* from_incognito) const { |
- ExtensionEntryMap::const_iterator winner = |
- GetEffectivePrefValueController(key, incognito, from_incognito); |
- if (winner == entries_.end()) |
- return NULL; |
- |
- const base::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, extensions::kExtensionPrefsScopeIncognitoSessionOnly); |
- prefs->GetValue(key, &value); |
- if (value) |
- return value; |
- |
- // If no incognito session only preference exists, fall back to persistent |
- // incognito preference. |
- prefs = GetExtensionPrefValueMap( |
- ext_id, |
- extensions::kExtensionPrefsScopeIncognitoPersistent); |
- prefs->GetValue(key, &value); |
- if (value) |
- return value; |
- } else { |
- // Regular-only preference. |
- const PrefValueMap* prefs = GetExtensionPrefValueMap( |
- ext_id, extensions::kExtensionPrefsScopeRegularOnly); |
- prefs->GetValue(key, &value); |
- if (value) |
- return value; |
- } |
- |
- // Regular preference. |
- const PrefValueMap* prefs = GetExtensionPrefValueMap( |
- ext_id, extensions::kExtensionPrefsScopeRegular); |
- prefs->GetValue(key, &value); |
- return value; |
-} |
- |
-ExtensionPrefValueMap::ExtensionEntryMap::const_iterator |
-ExtensionPrefValueMap::GetEffectivePrefValueController( |
- const std::string& key, |
- bool incognito, |
- bool* from_incognito) const { |
- ExtensionEntryMap::const_iterator winner = entries_.end(); |
- base::Time winners_install_time; |
- |
- ExtensionEntryMap::const_iterator i; |
- for (i = entries_.begin(); i != entries_.end(); ++i) { |
- const std::string& ext_id = i->first; |
- const base::Time& install_time = i->second->install_time; |
- const bool enabled = i->second->enabled; |
- |
- if (!enabled) |
- continue; |
- if (install_time < winners_install_time) |
- continue; |
- |
- const base::Value* value = NULL; |
- const PrefValueMap* prefs = GetExtensionPrefValueMap( |
- ext_id, extensions::kExtensionPrefsScopeRegular); |
- if (prefs->GetValue(key, &value)) { |
- winner = i; |
- winners_install_time = install_time; |
- if (from_incognito) |
- *from_incognito = false; |
- } |
- |
- if (!incognito) { |
- const PrefValueMap* prefs = GetExtensionPrefValueMap( |
- ext_id, extensions::kExtensionPrefsScopeRegularOnly); |
- if (prefs->GetValue(key, &value)) { |
- winner = i; |
- winners_install_time = install_time; |
- if (from_incognito) |
- *from_incognito = false; |
- } |
- // Ignore the following prefs, because they're incognito-only. |
- continue; |
- } |
- |
- prefs = GetExtensionPrefValueMap( |
- ext_id, extensions::kExtensionPrefsScopeIncognitoPersistent); |
- if (prefs->GetValue(key, &value)) { |
- winner = i; |
- winners_install_time = install_time; |
- if (from_incognito) |
- *from_incognito = true; |
- } |
- |
- prefs = GetExtensionPrefValueMap( |
- ext_id, extensions::kExtensionPrefsScopeIncognitoSessionOnly); |
- if (prefs->GetValue(key, &value)) { |
- winner = i; |
- winners_install_time = install_time; |
- if (from_incognito) |
- *from_incognito = true; |
- } |
- } |
- return winner; |
-} |
- |
-void ExtensionPrefValueMap::AddObserver( |
- ExtensionPrefValueMap::Observer* observer) { |
- observers_.AddObserver(observer); |
- |
- // Collect all currently used keys and notify the new observer. |
- std::set<std::string> keys; |
- ExtensionEntryMap::const_iterator i; |
- for (i = entries_.begin(); i != entries_.end(); ++i) |
- GetExtensionControlledKeys(*(i->second), &keys); |
- |
- std::set<std::string>::const_iterator j; |
- for (j = keys.begin(); j != keys.end(); ++j) |
- observer->OnPrefValueChanged(*j); |
-} |
- |
-void ExtensionPrefValueMap::RemoveObserver( |
- ExtensionPrefValueMap::Observer* observer) { |
- observers_.RemoveObserver(observer); |
-} |
- |
-std::string ExtensionPrefValueMap::GetExtensionControllingPref( |
- const std::string& pref_key) const { |
- ExtensionEntryMap::const_iterator winner = |
- GetEffectivePrefValueController(pref_key, false, NULL); |
- if (winner == entries_.end()) |
- return std::string(); |
- return winner->first; |
-} |
- |
-void ExtensionPrefValueMap::NotifyInitializationCompleted() { |
- FOR_EACH_OBSERVER(ExtensionPrefValueMap::Observer, observers_, |
- OnInitializationCompleted()); |
-} |
- |
-void ExtensionPrefValueMap::NotifyPrefValueChanged( |
- const std::set<std::string>& keys) { |
- std::set<std::string>::const_iterator i; |
- for (i = keys.begin(); i != keys.end(); ++i) |
- NotifyPrefValueChanged(*i); |
-} |
- |
-void ExtensionPrefValueMap::NotifyPrefValueChanged(const std::string& key) { |
- FOR_EACH_OBSERVER(ExtensionPrefValueMap::Observer, observers_, |
- OnPrefValueChanged(key)); |
-} |
- |
-void ExtensionPrefValueMap::NotifyOfDestruction() { |
- FOR_EACH_OBSERVER(ExtensionPrefValueMap::Observer, observers_, |
- OnExtensionPrefValueMapDestruction()); |
-} |