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 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
171 // background page. | 171 // background page. |
172 const char kRegisteredEvents[] = "events"; | 172 const char kRegisteredEvents[] = "events"; |
173 | 173 |
174 // A dictionary of event names to lists of filters that this extension has | 174 // A dictionary of event names to lists of filters that this extension has |
175 // registered from its lazy background page. | 175 // registered from its lazy background page. |
176 const char kFilteredEvents[] = "filtered_events"; | 176 const char kFilteredEvents[] = "filtered_events"; |
177 | 177 |
178 // Persisted value for omnibox.setDefaultSuggestion. | 178 // Persisted value for omnibox.setDefaultSuggestion. |
179 const char kOmniboxDefaultSuggestion[] = "omnibox_default_suggestion"; | 179 const char kOmniboxDefaultSuggestion[] = "omnibox_default_suggestion"; |
180 | 180 |
181 // List of media gallery permissions. | |
182 const char kMediaGalleriesPermissions[] = "media_galleries_permissions"; | |
183 | |
184 // Key for Media Gallery ID. | |
185 const char kMediaGalleryIdKey[] = "id"; | |
186 | |
187 // Key for Media Gallery Permission Value. | |
188 const char kMediaGalleryHasPermissionKey[] = "has_permission"; | |
189 | |
181 // Provider of write access to a dictionary storing extension prefs. | 190 // Provider of write access to a dictionary storing extension prefs. |
182 class ScopedExtensionPrefUpdate : public DictionaryPrefUpdate { | 191 class ScopedExtensionPrefUpdate : public DictionaryPrefUpdate { |
183 public: | 192 public: |
184 ScopedExtensionPrefUpdate(PrefService* service, | 193 ScopedExtensionPrefUpdate(PrefService* service, |
185 const std::string& extension_id) : | 194 const std::string& extension_id) : |
186 DictionaryPrefUpdate(service, ExtensionPrefs::kExtensionsPref), | 195 DictionaryPrefUpdate(service, ExtensionPrefs::kExtensionsPref), |
187 extension_id_(extension_id) {} | 196 extension_id_(extension_id) {} |
188 | 197 |
189 virtual ~ScopedExtensionPrefUpdate() { | 198 virtual ~ScopedExtensionPrefUpdate() { |
190 } | 199 } |
(...skipping 952 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1143 | 1152 |
1144 return result; | 1153 return result; |
1145 } | 1154 } |
1146 | 1155 |
1147 void ExtensionPrefs::SetLaunchType(const std::string& extension_id, | 1156 void ExtensionPrefs::SetLaunchType(const std::string& extension_id, |
1148 LaunchType launch_type) { | 1157 LaunchType launch_type) { |
1149 UpdateExtensionPref(extension_id, kPrefLaunchType, | 1158 UpdateExtensionPref(extension_id, kPrefLaunchType, |
1150 Value::CreateIntegerValue(static_cast<int>(launch_type))); | 1159 Value::CreateIntegerValue(static_cast<int>(launch_type))); |
1151 } | 1160 } |
1152 | 1161 |
1162 namespace { | |
1163 | |
1164 bool GetMediaGalleryPermissionFromDictionary( | |
1165 const DictionaryValue* dict, | |
1166 MediaGalleryPermission* out_permission) { | |
1167 std::string string_id; | |
1168 if (dict->GetString(kMediaGalleryIdKey, &string_id) && | |
1169 base::StringToUint64(string_id, &out_permission->pref_id) && | |
1170 dict->GetBoolean(kMediaGalleryHasPermissionKey, | |
1171 &out_permission->has_permission)) { | |
Evan Stade
2012/08/02 00:53:57
indent to be flush with kMediaGallery
| |
1172 return true; | |
1173 } | |
1174 NOTREACHED(); | |
1175 return false; | |
1176 } | |
1177 | |
1178 void RemoveMediaGalleryPermissionsFromExtension(PrefService * prefs, | |
Evan Stade
2012/08/02 00:53:57
no space before *
| |
1179 const std::string& extension_id, | |
1180 MediaGalleryPrefId gallery_id) { | |
1181 ScopedExtensionPrefUpdate update(prefs, extension_id); | |
1182 DictionaryValue* extension_dict = update.Get(); | |
1183 ListValue* permissions = NULL; | |
1184 if (!extension_dict->GetList(kMediaGalleriesPermissions, &permissions)) | |
1185 return; | |
1186 | |
1187 for (ListValue::iterator it = permissions->begin(); | |
1188 it != permissions->end(); | |
1189 it++) { | |
Evan Stade
2012/08/02 00:53:57
++it here and elsewhere
| |
1190 const DictionaryValue* dict = NULL; | |
1191 if (!(*it)->GetAsDictionary(&dict)) | |
1192 continue; | |
1193 MediaGalleryPermission perm; | |
1194 if (!GetMediaGalleryPermissionFromDictionary(dict, &perm)) | |
1195 continue; | |
1196 if (perm.pref_id == gallery_id) { | |
1197 permissions->Erase(it, NULL); | |
1198 return; | |
1199 } | |
1200 } | |
1201 } | |
1202 | |
1203 } // namespace | |
1204 | |
1205 void ExtensionPrefs::SetMediaGalleryPermission(const std::string& extension_id, | |
1206 MediaGalleryPrefId gallery, | |
1207 bool has_access) { | |
1208 ScopedExtensionPrefUpdate update(prefs_, extension_id); | |
1209 DictionaryValue* extension_dict = update.Get(); | |
1210 ListValue* permissions = NULL; | |
1211 if (!extension_dict->GetList(kMediaGalleriesPermissions, &permissions)) { | |
1212 permissions = new ListValue; | |
1213 extension_dict->Set(kMediaGalleriesPermissions, permissions); | |
1214 } else { | |
1215 // If the gallery is already in the list, update the permission. | |
1216 for (ListValue::const_iterator it = permissions->begin(); | |
1217 it != permissions->end(); | |
1218 it++) { | |
1219 DictionaryValue* dict = NULL; | |
1220 if (!(*it)->GetAsDictionary(&dict)) | |
1221 continue; | |
1222 MediaGalleryPermission perm; | |
1223 if (!GetMediaGalleryPermissionFromDictionary(dict, &perm)) | |
1224 continue; | |
1225 if (perm.pref_id == gallery) { | |
1226 dict->SetBoolean(kMediaGalleryHasPermissionKey, has_access); | |
1227 return; | |
1228 } | |
1229 } | |
1230 } | |
1231 | |
1232 DictionaryValue* dict = new DictionaryValue; | |
1233 dict->SetString(kMediaGalleryIdKey, base::Uint64ToString(gallery)); | |
1234 dict->SetBoolean(kMediaGalleryHasPermissionKey, has_access); | |
1235 permissions->Append(dict); | |
1236 } | |
1237 | |
1238 std::vector<MediaGalleryPermission> ExtensionPrefs::GetMediaGalleryPermissions( | |
1239 const std::string& extension_id) { | |
1240 std::vector<MediaGalleryPermission> result; | |
1241 const ListValue* permissions = NULL; | |
1242 if (ReadExtensionPrefList(extension_id, kMediaGalleriesPermissions, | |
1243 &permissions)) { | |
1244 for (ListValue::const_iterator it = permissions->begin(); | |
1245 it != permissions->end(); | |
1246 it++) { | |
1247 DictionaryValue* dict = NULL; | |
1248 if (!(*it)->GetAsDictionary(&dict)) | |
1249 continue; | |
1250 MediaGalleryPermission perm; | |
1251 if (!GetMediaGalleryPermissionFromDictionary(dict, &perm)) | |
1252 continue; | |
1253 result.push_back(perm); | |
1254 } | |
1255 } | |
1256 return result; | |
1257 } | |
1258 | |
1259 void ExtensionPrefs::RemoveMediaGalleryPermissions( | |
1260 MediaGalleryPrefId gallery_id) { | |
1261 const DictionaryValue* extensions = prefs_->GetDictionary(kExtensionsPref); | |
1262 if (!extensions) | |
1263 return; | |
1264 | |
1265 for (DictionaryValue::key_iterator iter = extensions->begin_keys(); | |
1266 iter != extensions->end_keys(); ++iter) { | |
1267 const std::string& id(*iter); | |
1268 if (!Extension::IdIsValid(id)) { | |
1269 NOTREACHED(); | |
1270 continue; | |
1271 } | |
1272 RemoveMediaGalleryPermissionsFromExtension(prefs_, id, gallery_id); | |
1273 } | |
1274 } | |
1275 | |
1153 bool ExtensionPrefs::DoesExtensionHaveState( | 1276 bool ExtensionPrefs::DoesExtensionHaveState( |
1154 const std::string& id, Extension::State check_state) const { | 1277 const std::string& id, Extension::State check_state) const { |
1155 const DictionaryValue* extension = GetExtensionPref(id); | 1278 const DictionaryValue* extension = GetExtensionPref(id); |
1156 int state = -1; | 1279 int state = -1; |
1157 if (!extension || !extension->GetInteger(kPrefState, &state)) | 1280 if (!extension || !extension->GetInteger(kPrefState, &state)) |
1158 return false; | 1281 return false; |
1159 | 1282 |
1160 if (state < 0 || state >= Extension::NUM_STATES) { | 1283 if (state < 0 || state >= Extension::NUM_STATES) { |
1161 LOG(ERROR) << "Bad pref 'state' for extension '" << id << "'"; | 1284 LOG(ERROR) << "Bad pref 'state' for extension '" << id << "'"; |
1162 return false; | 1285 return false; |
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1934 0, // default value | 2057 0, // default value |
1935 PrefService::UNSYNCABLE_PREF); | 2058 PrefService::UNSYNCABLE_PREF); |
1936 prefs->RegisterInt64Pref(prefs::kNextExtensionsUpdateCheck, | 2059 prefs->RegisterInt64Pref(prefs::kNextExtensionsUpdateCheck, |
1937 0, // default value | 2060 0, // default value |
1938 PrefService::UNSYNCABLE_PREF); | 2061 PrefService::UNSYNCABLE_PREF); |
1939 prefs->RegisterListPref(prefs::kExtensionAllowedInstallSites, | 2062 prefs->RegisterListPref(prefs::kExtensionAllowedInstallSites, |
1940 PrefService::UNSYNCABLE_PREF); | 2063 PrefService::UNSYNCABLE_PREF); |
1941 } | 2064 } |
1942 | 2065 |
1943 } // namespace extensions | 2066 } // namespace extensions |
OLD | NEW |