Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_number_conversions.h" | 7 #include "base/string_number_conversions.h" |
| 8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
| 9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
| 10 #include "chrome/browser/extensions/admin_policy.h" | 10 #include "chrome/browser/extensions/admin_policy.h" |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 166 // A preference that contains extension-set content settings. | 166 // A preference that contains extension-set content settings. |
| 167 const char kPrefContentSettings[] = "content_settings"; | 167 const char kPrefContentSettings[] = "content_settings"; |
| 168 | 168 |
| 169 // A preference that contains extension-set content settings. | 169 // A preference that contains extension-set content settings. |
| 170 const char kPrefIncognitoContentSettings[] = "incognito_content_settings"; | 170 const char kPrefIncognitoContentSettings[] = "incognito_content_settings"; |
| 171 | 171 |
| 172 // A list of event names that this extension has registered from its lazy | 172 // A list of event names that this extension has registered from its lazy |
| 173 // background page. | 173 // background page. |
| 174 const char kRegisteredEvents[] = "events"; | 174 const char kRegisteredEvents[] = "events"; |
| 175 | 175 |
| 176 // A dictionary of event names to lists of filters that this extension has | |
| 177 // registered from its lazy background page. | |
| 178 const char kFilteredEvents[] = "filtered_events"; | |
| 179 | |
| 176 // Persisted value for omnibox.setDefaultSuggestion. | 180 // Persisted value for omnibox.setDefaultSuggestion. |
| 177 const char kOmniboxDefaultSuggestion[] = "omnibox_default_suggestion"; | 181 const char kOmniboxDefaultSuggestion[] = "omnibox_default_suggestion"; |
| 178 | 182 |
| 179 // Provider of write access to a dictionary storing extension prefs. | 183 // Provider of write access to a dictionary storing extension prefs. |
| 180 class ScopedExtensionPrefUpdate : public DictionaryPrefUpdate { | 184 class ScopedExtensionPrefUpdate : public DictionaryPrefUpdate { |
| 181 public: | 185 public: |
| 182 ScopedExtensionPrefUpdate(PrefService* service, | 186 ScopedExtensionPrefUpdate(PrefService* service, |
| 183 const std::string& extension_id) : | 187 const std::string& extension_id) : |
| 184 DictionaryPrefUpdate(service, ExtensionPrefs::kExtensionsPref), | 188 DictionaryPrefUpdate(service, ExtensionPrefs::kExtensionsPref), |
| 185 extension_id_(extension_id) {} | 189 extension_id_(extension_id) {} |
| (...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 950 return events; | 954 return events; |
| 951 | 955 |
| 952 for (size_t i = 0; i < value->GetSize(); ++i) { | 956 for (size_t i = 0; i < value->GetSize(); ++i) { |
| 953 std::string event; | 957 std::string event; |
| 954 if (value->GetString(i, &event)) | 958 if (value->GetString(i, &event)) |
| 955 events.insert(event); | 959 events.insert(event); |
| 956 } | 960 } |
| 957 return events; | 961 return events; |
| 958 } | 962 } |
| 959 | 963 |
| 964 void ExtensionPrefs::AddFilterToEvent(const std::string& event_name, | |
| 965 const std::string& extension_id, | |
| 966 const DictionaryValue* filter) { | |
| 967 const DictionaryValue* filtered_events = GetFilteredEvents(extension_id); | |
| 968 scoped_ptr<DictionaryValue> new_filtered_events; | |
| 969 if (!filtered_events) | |
| 970 new_filtered_events.reset(new DictionaryValue); | |
| 971 else | |
| 972 new_filtered_events.reset(filtered_events->DeepCopy()); | |
| 973 | |
| 974 ListValue* filter_list = NULL; | |
| 975 if (!new_filtered_events->GetList(event_name, &filter_list)) { | |
| 976 filter_list = new ListValue(); | |
| 977 new_filtered_events->Set(event_name, filter_list); | |
| 978 } | |
| 979 filter_list->Append(filter->DeepCopy()); | |
| 980 | |
| 981 UpdateExtensionPref(extension_id, kFilteredEvents, | |
| 982 new_filtered_events.release()); | |
|
battre
2012/06/19 14:26:23
What do you think of modifying the list instead of
koz (OOO until 15th September)
2012/06/20 08:05:56
Sounds good! Done.
| |
| 983 } | |
| 984 | |
| 985 void ExtensionPrefs::RemoveFilterFromEvent(const std::string& event_name, | |
| 986 const std::string& extension_id, | |
| 987 const DictionaryValue* filter) { | |
| 988 const DictionaryValue* filtered_events = GetFilteredEvents(extension_id); | |
| 989 if (!filtered_events) | |
| 990 return; | |
| 991 | |
| 992 scoped_ptr<DictionaryValue> new_filtered_events(filtered_events->DeepCopy()); | |
| 993 ListValue* filter_list; | |
| 994 if (!new_filtered_events->GetList(event_name, &filter_list)) | |
| 995 return; | |
| 996 | |
| 997 bool removed = false; | |
| 998 for (size_t i = 0; i < filter_list->GetSize(); i++) { | |
| 999 DictionaryValue* filter; | |
| 1000 CHECK(filter_list->GetDictionary(i, &filter)); | |
| 1001 if (filter->Equals(filter)) { | |
| 1002 filter_list->Remove(i, NULL); | |
| 1003 removed = true; | |
| 1004 break; | |
| 1005 } | |
| 1006 } | |
| 1007 | |
| 1008 if (removed) | |
| 1009 UpdateExtensionPref(extension_id, kFilteredEvents, | |
| 1010 new_filtered_events.release()); | |
| 1011 } | |
| 1012 | |
| 1013 const DictionaryValue* ExtensionPrefs::GetFilteredEvents( | |
| 1014 const std::string& extension_id) { | |
| 1015 const DictionaryValue* extension = GetExtensionPref(extension_id); | |
| 1016 if (!extension) | |
| 1017 return NULL; | |
| 1018 DictionaryValue* result = NULL; | |
| 1019 if (!extension->GetDictionary(kFilteredEvents, &result)) | |
| 1020 return NULL; | |
| 1021 return result; | |
| 1022 } | |
| 1023 | |
| 960 void ExtensionPrefs::SetRegisteredEvents( | 1024 void ExtensionPrefs::SetRegisteredEvents( |
| 961 const std::string& extension_id, const std::set<std::string>& events) { | 1025 const std::string& extension_id, const std::set<std::string>& events) { |
| 962 ListValue* value = new ListValue(); | 1026 ListValue* value = new ListValue(); |
| 963 for (std::set<std::string>::const_iterator it = events.begin(); | 1027 for (std::set<std::string>::const_iterator it = events.begin(); |
| 964 it != events.end(); ++it) { | 1028 it != events.end(); ++it) { |
| 965 value->Append(new StringValue(*it)); | 1029 value->Append(new StringValue(*it)); |
| 966 } | 1030 } |
| 967 UpdateExtensionPref(extension_id, kRegisteredEvents, value); | 1031 UpdateExtensionPref(extension_id, kRegisteredEvents, value); |
| 968 } | 1032 } |
| 969 | 1033 |
| (...skipping 909 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1879 PrefService::UNSYNCABLE_PREF); | 1943 PrefService::UNSYNCABLE_PREF); |
| 1880 prefs->RegisterInt64Pref(prefs::kLastExtensionsUpdateCheck, | 1944 prefs->RegisterInt64Pref(prefs::kLastExtensionsUpdateCheck, |
| 1881 0, // default value | 1945 0, // default value |
| 1882 PrefService::UNSYNCABLE_PREF); | 1946 PrefService::UNSYNCABLE_PREF); |
| 1883 prefs->RegisterInt64Pref(prefs::kNextExtensionsUpdateCheck, | 1947 prefs->RegisterInt64Pref(prefs::kNextExtensionsUpdateCheck, |
| 1884 0, // default value | 1948 0, // default value |
| 1885 PrefService::UNSYNCABLE_PREF); | 1949 PrefService::UNSYNCABLE_PREF); |
| 1886 prefs->RegisterListPref(prefs::kExtensionAllowedInstallSites, | 1950 prefs->RegisterListPref(prefs::kExtensionAllowedInstallSites, |
| 1887 PrefService::UNSYNCABLE_PREF); | 1951 PrefService::UNSYNCABLE_PREF); |
| 1888 } | 1952 } |
| OLD | NEW |