| 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 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 | 304 |
| 305 void ExtensionPrefs::MakePathsRelative() { | 305 void ExtensionPrefs::MakePathsRelative() { |
| 306 const DictionaryValue* dict = prefs_->GetDictionary(kExtensionsPref); | 306 const DictionaryValue* dict = prefs_->GetDictionary(kExtensionsPref); |
| 307 if (!dict || dict->empty()) | 307 if (!dict || dict->empty()) |
| 308 return; | 308 return; |
| 309 | 309 |
| 310 // Collect all extensions ids with absolute paths in |absolute_keys|. | 310 // Collect all extensions ids with absolute paths in |absolute_keys|. |
| 311 std::set<std::string> absolute_keys; | 311 std::set<std::string> absolute_keys; |
| 312 for (DictionaryValue::key_iterator i = dict->begin_keys(); | 312 for (DictionaryValue::key_iterator i = dict->begin_keys(); |
| 313 i != dict->end_keys(); ++i) { | 313 i != dict->end_keys(); ++i) { |
| 314 DictionaryValue* extension_dict = NULL; | 314 const DictionaryValue* extension_dict = NULL; |
| 315 if (!dict->GetDictionaryWithoutPathExpansion(*i, &extension_dict)) | 315 if (!dict->GetDictionaryWithoutPathExpansion(*i, &extension_dict)) |
| 316 continue; | 316 continue; |
| 317 int location_value; | 317 int location_value; |
| 318 if (extension_dict->GetInteger(kPrefLocation, &location_value) && | 318 if (extension_dict->GetInteger(kPrefLocation, &location_value) && |
| 319 location_value == Extension::LOAD) { | 319 location_value == Extension::LOAD) { |
| 320 // Unpacked extensions can have absolute paths. | 320 // Unpacked extensions can have absolute paths. |
| 321 continue; | 321 continue; |
| 322 } | 322 } |
| 323 FilePath::StringType path_string; | 323 FilePath::StringType path_string; |
| 324 if (!extension_dict->GetString(kPrefPath, &path_string)) | 324 if (!extension_dict->GetString(kPrefPath, &path_string)) |
| 325 continue; | 325 continue; |
| 326 FilePath path(path_string); | 326 FilePath path(path_string); |
| 327 if (path.IsAbsolute()) | 327 if (path.IsAbsolute()) |
| 328 absolute_keys.insert(*i); | 328 absolute_keys.insert(*i); |
| 329 } | 329 } |
| 330 if (absolute_keys.empty()) | 330 if (absolute_keys.empty()) |
| 331 return; | 331 return; |
| 332 | 332 |
| 333 // Fix these paths. | 333 // Fix these paths. |
| 334 DictionaryPrefUpdate update(prefs_, kExtensionsPref); | 334 DictionaryPrefUpdate update(prefs_, kExtensionsPref); |
| 335 const DictionaryValue* update_dict = update.Get(); | 335 DictionaryValue* update_dict = update.Get(); |
| 336 for (std::set<std::string>::iterator i = absolute_keys.begin(); | 336 for (std::set<std::string>::iterator i = absolute_keys.begin(); |
| 337 i != absolute_keys.end(); ++i) { | 337 i != absolute_keys.end(); ++i) { |
| 338 DictionaryValue* extension_dict = NULL; | 338 DictionaryValue* extension_dict = NULL; |
| 339 if (!update_dict->GetDictionaryWithoutPathExpansion(*i, &extension_dict)) { | 339 if (!update_dict->GetDictionaryWithoutPathExpansion(*i, &extension_dict)) { |
| 340 NOTREACHED() << "Control should never reach here for extension " << *i; | 340 NOTREACHED() << "Control should never reach here for extension " << *i; |
| 341 continue; | 341 continue; |
| 342 } | 342 } |
| 343 FilePath::StringType path_string; | 343 FilePath::StringType path_string; |
| 344 extension_dict->GetString(kPrefPath, &path_string); | 344 extension_dict->GetString(kPrefPath, &path_string); |
| 345 FilePath path(path_string); | 345 FilePath path(path_string); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 // No such extension yet. | 423 // No such extension yet. |
| 424 return false; | 424 return false; |
| 425 } | 425 } |
| 426 return ReadIntegerFromPref(ext, pref_key, out_value); | 426 return ReadIntegerFromPref(ext, pref_key, out_value); |
| 427 } | 427 } |
| 428 | 428 |
| 429 bool ExtensionPrefs::ReadExtensionPrefList( | 429 bool ExtensionPrefs::ReadExtensionPrefList( |
| 430 const std::string& extension_id, const std::string& pref_key, | 430 const std::string& extension_id, const std::string& pref_key, |
| 431 const ListValue** out_value) const { | 431 const ListValue** out_value) const { |
| 432 const DictionaryValue* ext = GetExtensionPref(extension_id); | 432 const DictionaryValue* ext = GetExtensionPref(extension_id); |
| 433 ListValue* out = NULL; | 433 const ListValue* out = NULL; |
| 434 if (!ext || !ext->GetList(pref_key, &out)) | 434 if (!ext || !ext->GetList(pref_key, &out)) |
| 435 return false; | 435 return false; |
| 436 if (out_value) | 436 if (out_value) |
| 437 *out_value = out; | 437 *out_value = out; |
| 438 | 438 |
| 439 return true; | 439 return true; |
| 440 } | 440 } |
| 441 | 441 |
| 442 bool ExtensionPrefs::ReadExtensionPrefString( | 442 bool ExtensionPrefs::ReadExtensionPrefString( |
| 443 const std::string& extension_id, const std::string& pref_key, | 443 const std::string& extension_id, const std::string& pref_key, |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 | 533 |
| 534 // Set the scriptable host permissions. | 534 // Set the scriptable host permissions. |
| 535 if (!new_value->scriptable_hosts().is_empty()) { | 535 if (!new_value->scriptable_hosts().is_empty()) { |
| 536 SetExtensionPrefURLPatternSet(extension_id, | 536 SetExtensionPrefURLPatternSet(extension_id, |
| 537 JoinPrefs(pref_key, kPrefScriptableHosts), | 537 JoinPrefs(pref_key, kPrefScriptableHosts), |
| 538 new_value->scriptable_hosts()); | 538 new_value->scriptable_hosts()); |
| 539 } | 539 } |
| 540 } | 540 } |
| 541 | 541 |
| 542 // static | 542 // static |
| 543 bool ExtensionPrefs::IsBlacklistBitSet(DictionaryValue* ext) { | 543 bool ExtensionPrefs::IsBlacklistBitSet(const DictionaryValue* ext) { |
| 544 return ReadBooleanFromPref(ext, kPrefBlacklist); | 544 return ReadBooleanFromPref(ext, kPrefBlacklist); |
| 545 } | 545 } |
| 546 | 546 |
| 547 bool ExtensionPrefs::IsExtensionBlacklisted(const std::string& extension_id) { | 547 bool ExtensionPrefs::IsExtensionBlacklisted(const std::string& extension_id) { |
| 548 return ReadExtensionPrefBoolean(extension_id, kPrefBlacklist); | 548 return ReadExtensionPrefBoolean(extension_id, kPrefBlacklist); |
| 549 } | 549 } |
| 550 | 550 |
| 551 bool ExtensionPrefs::IsExtensionOrphaned(const std::string& extension_id) { | 551 bool ExtensionPrefs::IsExtensionOrphaned(const std::string& extension_id) { |
| 552 // TODO(miket): we believe that this test will hinge on the number of | 552 // TODO(miket): we believe that this test will hinge on the number of |
| 553 // consecutive times that an update check has returned a certain response | 553 // consecutive times that an update check has returned a certain response |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 | 700 |
| 701 void ExtensionPrefs::UpdateBlacklist( | 701 void ExtensionPrefs::UpdateBlacklist( |
| 702 const std::set<std::string>& blacklist_set) { | 702 const std::set<std::string>& blacklist_set) { |
| 703 std::vector<std::string> remove_pref_ids; | 703 std::vector<std::string> remove_pref_ids; |
| 704 std::set<std::string> used_id_set; | 704 std::set<std::string> used_id_set; |
| 705 const DictionaryValue* extensions = prefs_->GetDictionary(kExtensionsPref); | 705 const DictionaryValue* extensions = prefs_->GetDictionary(kExtensionsPref); |
| 706 | 706 |
| 707 if (extensions) { | 707 if (extensions) { |
| 708 for (DictionaryValue::key_iterator extension_id = extensions->begin_keys(); | 708 for (DictionaryValue::key_iterator extension_id = extensions->begin_keys(); |
| 709 extension_id != extensions->end_keys(); ++extension_id) { | 709 extension_id != extensions->end_keys(); ++extension_id) { |
| 710 DictionaryValue* ext; | 710 const DictionaryValue* ext; |
| 711 if (!extensions->GetDictionaryWithoutPathExpansion(*extension_id, &ext)) { | 711 if (!extensions->GetDictionaryWithoutPathExpansion(*extension_id, &ext)) { |
| 712 NOTREACHED() << "Invalid pref for extension " << *extension_id; | 712 NOTREACHED() << "Invalid pref for extension " << *extension_id; |
| 713 continue; | 713 continue; |
| 714 } | 714 } |
| 715 const std::string& id(*extension_id); | 715 const std::string& id(*extension_id); |
| 716 if (blacklist_set.find(id) == blacklist_set.end()) { | 716 if (blacklist_set.find(id) == blacklist_set.end()) { |
| 717 if (!IsBlacklistBitSet(ext)) { | 717 if (!IsBlacklistBitSet(ext)) { |
| 718 // This extension is not in blacklist. And it was not blacklisted | 718 // This extension is not in blacklist. And it was not blacklisted |
| 719 // before. | 719 // before. |
| 720 continue; | 720 continue; |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 841 const DictionaryValue* ext = GetExtensionPref(*ext_id); | 841 const DictionaryValue* ext = GetExtensionPref(*ext_id); |
| 842 if (!ext || !ext->GetBoolean(kPrefOldGrantedFullAccess, &full_access)) | 842 if (!ext || !ext->GetBoolean(kPrefOldGrantedFullAccess, &full_access)) |
| 843 continue; | 843 continue; |
| 844 | 844 |
| 845 // Remove the full access bit (empty list will get trimmed). | 845 // Remove the full access bit (empty list will get trimmed). |
| 846 UpdateExtensionPref( | 846 UpdateExtensionPref( |
| 847 *ext_id, kPrefOldGrantedFullAccess, new ListValue()); | 847 *ext_id, kPrefOldGrantedFullAccess, new ListValue()); |
| 848 | 848 |
| 849 // Add the plugin permission if the full access bit was set. | 849 // Add the plugin permission if the full access bit was set. |
| 850 if (full_access) { | 850 if (full_access) { |
| 851 ListValue* apis = NULL; | 851 const ListValue* apis = NULL; |
| 852 ListValue* new_apis = NULL; | 852 ListValue* new_apis = NULL; |
| 853 | 853 |
| 854 std::string granted_apis = | 854 std::string granted_apis = |
| 855 JoinPrefs(kPrefGrantedPermissions, kPrefAPIs); | 855 JoinPrefs(kPrefGrantedPermissions, kPrefAPIs); |
| 856 if (ext->GetList(kPrefOldGrantedAPIs, &apis)) | 856 if (ext->GetList(kPrefOldGrantedAPIs, &apis)) |
| 857 new_apis = apis->DeepCopy(); | 857 new_apis = apis->DeepCopy(); |
| 858 else | 858 else |
| 859 new_apis = new ListValue(); | 859 new_apis = new ListValue(); |
| 860 | 860 |
| 861 std::string plugin_name = info->GetByID( | 861 std::string plugin_name = info->GetByID( |
| 862 APIPermission::kPlugin)->name(); | 862 APIPermission::kPlugin)->name(); |
| 863 new_apis->Append(Value::CreateStringValue(plugin_name)); | 863 new_apis->Append(Value::CreateStringValue(plugin_name)); |
| 864 UpdateExtensionPref(*ext_id, granted_apis, new_apis); | 864 UpdateExtensionPref(*ext_id, granted_apis, new_apis); |
| 865 } | 865 } |
| 866 | 866 |
| 867 // The granted permissions originally only held the effective hosts, | 867 // The granted permissions originally only held the effective hosts, |
| 868 // which are a combination of host and user script host permissions. | 868 // which are a combination of host and user script host permissions. |
| 869 // We now maintain these lists separately. For migration purposes, it | 869 // We now maintain these lists separately. For migration purposes, it |
| 870 // does not matter how we treat the old effective hosts as long as the | 870 // does not matter how we treat the old effective hosts as long as the |
| 871 // new effective hosts will be the same, so we move them to explicit | 871 // new effective hosts will be the same, so we move them to explicit |
| 872 // host permissions. | 872 // host permissions. |
| 873 ListValue* hosts; | 873 const ListValue* hosts; |
| 874 std::string explicit_hosts = | 874 std::string explicit_hosts = |
| 875 JoinPrefs(kPrefGrantedPermissions, kPrefExplicitHosts); | 875 JoinPrefs(kPrefGrantedPermissions, kPrefExplicitHosts); |
| 876 if (ext->GetList(kPrefOldGrantedHosts, &hosts)) { | 876 if (ext->GetList(kPrefOldGrantedHosts, &hosts)) { |
| 877 UpdateExtensionPref( | 877 UpdateExtensionPref( |
| 878 *ext_id, explicit_hosts, hosts->DeepCopy()); | 878 *ext_id, explicit_hosts, hosts->DeepCopy()); |
| 879 | 879 |
| 880 // We can get rid of the old one by setting it to an empty list. | 880 // We can get rid of the old one by setting it to an empty list. |
| 881 UpdateExtensionPref(*ext_id, kPrefOldGrantedHosts, new ListValue()); | 881 UpdateExtensionPref(*ext_id, kPrefOldGrantedHosts, new ListValue()); |
| 882 } | 882 } |
| 883 } | 883 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 938 extension_id, kPrefActivePermissions, permissions); | 938 extension_id, kPrefActivePermissions, permissions); |
| 939 } | 939 } |
| 940 | 940 |
| 941 std::set<std::string> ExtensionPrefs::GetRegisteredEvents( | 941 std::set<std::string> ExtensionPrefs::GetRegisteredEvents( |
| 942 const std::string& extension_id) { | 942 const std::string& extension_id) { |
| 943 std::set<std::string> events; | 943 std::set<std::string> events; |
| 944 const DictionaryValue* extension = GetExtensionPref(extension_id); | 944 const DictionaryValue* extension = GetExtensionPref(extension_id); |
| 945 if (!extension) | 945 if (!extension) |
| 946 return events; | 946 return events; |
| 947 | 947 |
| 948 ListValue* value = NULL; | 948 const ListValue* value = NULL; |
| 949 if (!extension->GetList(kRegisteredEvents, &value)) | 949 if (!extension->GetList(kRegisteredEvents, &value)) |
| 950 return events; | 950 return events; |
| 951 | 951 |
| 952 for (size_t i = 0; i < value->GetSize(); ++i) { | 952 for (size_t i = 0; i < value->GetSize(); ++i) { |
| 953 std::string event; | 953 std::string event; |
| 954 if (value->GetString(i, &event)) | 954 if (value->GetString(i, &event)) |
| 955 events.insert(event); | 955 events.insert(event); |
| 956 } | 956 } |
| 957 return events; | 957 return events; |
| 958 } | 958 } |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 997 break; | 997 break; |
| 998 } | 998 } |
| 999 } | 999 } |
| 1000 } | 1000 } |
| 1001 | 1001 |
| 1002 const DictionaryValue* ExtensionPrefs::GetFilteredEvents( | 1002 const DictionaryValue* ExtensionPrefs::GetFilteredEvents( |
| 1003 const std::string& extension_id) const { | 1003 const std::string& extension_id) const { |
| 1004 const DictionaryValue* extension = GetExtensionPref(extension_id); | 1004 const DictionaryValue* extension = GetExtensionPref(extension_id); |
| 1005 if (!extension) | 1005 if (!extension) |
| 1006 return NULL; | 1006 return NULL; |
| 1007 DictionaryValue* result = NULL; | 1007 const DictionaryValue* result = NULL; |
| 1008 if (!extension->GetDictionary(kFilteredEvents, &result)) | 1008 if (!extension->GetDictionary(kFilteredEvents, &result)) |
| 1009 return NULL; | 1009 return NULL; |
| 1010 return result; | 1010 return result; |
| 1011 } | 1011 } |
| 1012 | 1012 |
| 1013 void ExtensionPrefs::SetRegisteredEvents( | 1013 void ExtensionPrefs::SetRegisteredEvents( |
| 1014 const std::string& extension_id, const std::set<std::string>& events) { | 1014 const std::string& extension_id, const std::set<std::string>& events) { |
| 1015 ListValue* value = new ListValue(); | 1015 ListValue* value = new ListValue(); |
| 1016 for (std::set<std::string>::const_iterator it = events.begin(); | 1016 for (std::set<std::string>::const_iterator it = events.begin(); |
| 1017 it != events.end(); ++it) { | 1017 it != events.end(); ++it) { |
| 1018 value->Append(new StringValue(*it)); | 1018 value->Append(new StringValue(*it)); |
| 1019 } | 1019 } |
| 1020 UpdateExtensionPref(extension_id, kRegisteredEvents, value); | 1020 UpdateExtensionPref(extension_id, kRegisteredEvents, value); |
| 1021 } | 1021 } |
| 1022 | 1022 |
| 1023 ExtensionOmniboxSuggestion | 1023 ExtensionOmniboxSuggestion |
| 1024 ExtensionPrefs::GetOmniboxDefaultSuggestion(const std::string& extension_id) { | 1024 ExtensionPrefs::GetOmniboxDefaultSuggestion(const std::string& extension_id) { |
| 1025 ExtensionOmniboxSuggestion suggestion; | 1025 ExtensionOmniboxSuggestion suggestion; |
| 1026 | 1026 |
| 1027 const base::DictionaryValue* extension = GetExtensionPref(extension_id); | 1027 const DictionaryValue* extension = GetExtensionPref(extension_id); |
| 1028 base::DictionaryValue* dict = NULL; | 1028 const DictionaryValue* dict = NULL; |
| 1029 if (extension && extension->GetDictionary(kOmniboxDefaultSuggestion, &dict)) | 1029 if (extension && extension->GetDictionary(kOmniboxDefaultSuggestion, &dict)) |
| 1030 suggestion.Populate(*dict, false); | 1030 suggestion.Populate(*dict, false); |
| 1031 | 1031 |
| 1032 return suggestion; | 1032 return suggestion; |
| 1033 } | 1033 } |
| 1034 | 1034 |
| 1035 void ExtensionPrefs::SetOmniboxDefaultSuggestion( | 1035 void ExtensionPrefs::SetOmniboxDefaultSuggestion( |
| 1036 const std::string& extension_id, | 1036 const std::string& extension_id, |
| 1037 const ExtensionOmniboxSuggestion& suggestion) { | 1037 const ExtensionOmniboxSuggestion& suggestion) { |
| 1038 scoped_ptr<base::DictionaryValue> dict = suggestion.ToValue().Pass(); | 1038 scoped_ptr<base::DictionaryValue> dict = suggestion.ToValue().Pass(); |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1329 } | 1329 } |
| 1330 | 1330 |
| 1331 return version; | 1331 return version; |
| 1332 } | 1332 } |
| 1333 | 1333 |
| 1334 void ExtensionPrefs::UpdateManifest(const Extension* extension) { | 1334 void ExtensionPrefs::UpdateManifest(const Extension* extension) { |
| 1335 if (extension->location() != Extension::LOAD) { | 1335 if (extension->location() != Extension::LOAD) { |
| 1336 const DictionaryValue* extension_dict = GetExtensionPref(extension->id()); | 1336 const DictionaryValue* extension_dict = GetExtensionPref(extension->id()); |
| 1337 if (!extension_dict) | 1337 if (!extension_dict) |
| 1338 return; | 1338 return; |
| 1339 DictionaryValue* old_manifest = NULL; | 1339 const DictionaryValue* old_manifest = NULL; |
| 1340 bool update_required = | 1340 bool update_required = |
| 1341 !extension_dict->GetDictionary(kPrefManifest, &old_manifest) || | 1341 !extension_dict->GetDictionary(kPrefManifest, &old_manifest) || |
| 1342 !extension->manifest()->value()->Equals(old_manifest); | 1342 !extension->manifest()->value()->Equals(old_manifest); |
| 1343 if (update_required) { | 1343 if (update_required) { |
| 1344 UpdateExtensionPref(extension->id(), kPrefManifest, | 1344 UpdateExtensionPref(extension->id(), kPrefManifest, |
| 1345 extension->manifest()->value()->DeepCopy()); | 1345 extension->manifest()->value()->DeepCopy()); |
| 1346 } | 1346 } |
| 1347 } | 1347 } |
| 1348 } | 1348 } |
| 1349 | 1349 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1379 DictionaryPrefUpdate update(prefs_, kExtensionsPref); | 1379 DictionaryPrefUpdate update(prefs_, kExtensionsPref); |
| 1380 DictionaryValue* dict = update.Get(); | 1380 DictionaryValue* dict = update.Get(); |
| 1381 dict->Remove(extension_id, NULL); | 1381 dict->Remove(extension_id, NULL); |
| 1382 } | 1382 } |
| 1383 | 1383 |
| 1384 const DictionaryValue* ExtensionPrefs::GetExtensionPref( | 1384 const DictionaryValue* ExtensionPrefs::GetExtensionPref( |
| 1385 const std::string& extension_id) const { | 1385 const std::string& extension_id) const { |
| 1386 const DictionaryValue* dict = prefs_->GetDictionary(kExtensionsPref); | 1386 const DictionaryValue* dict = prefs_->GetDictionary(kExtensionsPref); |
| 1387 if (!dict) | 1387 if (!dict) |
| 1388 return NULL; | 1388 return NULL; |
| 1389 DictionaryValue* extension = NULL; | 1389 const DictionaryValue* extension = NULL; |
| 1390 dict->GetDictionary(extension_id, &extension); | 1390 dict->GetDictionary(extension_id, &extension); |
| 1391 return extension; | 1391 return extension; |
| 1392 } | 1392 } |
| 1393 | 1393 |
| 1394 // Helper function for GetInstalledExtensionsInfo. | 1394 // Helper function for GetInstalledExtensionsInfo. |
| 1395 static ExtensionInfo* GetInstalledExtensionInfoImpl( | 1395 static ExtensionInfo* GetInstalledExtensionInfoImpl( |
| 1396 DictionaryValue* extension_data, | 1396 DictionaryValue* extension_data, |
| 1397 DictionaryValue::key_iterator extension_id) { | 1397 DictionaryValue::key_iterator extension_id) { |
| 1398 DictionaryValue* ext; | 1398 DictionaryValue* ext; |
| 1399 if (!extension_data->GetDictionaryWithoutPathExpansion(*extension_id, &ext)) { | 1399 if (!extension_data->GetDictionaryWithoutPathExpansion(*extension_id, &ext)) { |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1511 bool ExtensionPrefs::GetIdleInstallInfo(const std::string& extension_id, | 1511 bool ExtensionPrefs::GetIdleInstallInfo(const std::string& extension_id, |
| 1512 FilePath* crx_path, | 1512 FilePath* crx_path, |
| 1513 std::string* version, | 1513 std::string* version, |
| 1514 base::Time* fetch_time) { | 1514 base::Time* fetch_time) { |
| 1515 const DictionaryValue* extension_prefs = GetExtensionPref(extension_id); | 1515 const DictionaryValue* extension_prefs = GetExtensionPref(extension_id); |
| 1516 if (!extension_prefs) | 1516 if (!extension_prefs) |
| 1517 return false; | 1517 return false; |
| 1518 | 1518 |
| 1519 // Do all the reads from the prefs together, and don't do any assignment | 1519 // Do all the reads from the prefs together, and don't do any assignment |
| 1520 // to the out parameters unless all the reads succeed. | 1520 // to the out parameters unless all the reads succeed. |
| 1521 DictionaryValue* info = NULL; | 1521 const DictionaryValue* info = NULL; |
| 1522 if (!extension_prefs->GetDictionary(kIdleInstallInfo, &info)) | 1522 if (!extension_prefs->GetDictionary(kIdleInstallInfo, &info)) |
| 1523 return false; | 1523 return false; |
| 1524 | 1524 |
| 1525 FilePath::StringType path_string; | 1525 FilePath::StringType path_string; |
| 1526 if (!info->GetString(kIdleInstallInfoCrxPath, &path_string)) | 1526 if (!info->GetString(kIdleInstallInfoCrxPath, &path_string)) |
| 1527 return false; | 1527 return false; |
| 1528 | 1528 |
| 1529 std::string tmp_version; | 1529 std::string tmp_version; |
| 1530 if (!info->GetString(kIdleInstallInfoVersion, &tmp_version)) | 1530 if (!info->GetString(kIdleInstallInfoVersion, &tmp_version)) |
| 1531 return false; | 1531 return false; |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1676 out->push_back(info->extension_id); | 1676 out->push_back(info->extension_id); |
| 1677 } | 1677 } |
| 1678 } | 1678 } |
| 1679 | 1679 |
| 1680 // static | 1680 // static |
| 1681 ExtensionPrefs::ExtensionIdSet ExtensionPrefs::GetExtensionsFrom( | 1681 ExtensionPrefs::ExtensionIdSet ExtensionPrefs::GetExtensionsFrom( |
| 1682 const base::DictionaryValue* extension_prefs) { | 1682 const base::DictionaryValue* extension_prefs) { |
| 1683 ExtensionIdSet result; | 1683 ExtensionIdSet result; |
| 1684 for (base::DictionaryValue::key_iterator it = extension_prefs->begin_keys(); | 1684 for (base::DictionaryValue::key_iterator it = extension_prefs->begin_keys(); |
| 1685 it != extension_prefs->end_keys(); ++it) { | 1685 it != extension_prefs->end_keys(); ++it) { |
| 1686 DictionaryValue* ext; | 1686 const DictionaryValue* ext; |
| 1687 if (!extension_prefs->GetDictionaryWithoutPathExpansion(*it, &ext)) { | 1687 if (!extension_prefs->GetDictionaryWithoutPathExpansion(*it, &ext)) { |
| 1688 NOTREACHED() << "Invalid pref for extension " << *it; | 1688 NOTREACHED() << "Invalid pref for extension " << *it; |
| 1689 continue; | 1689 continue; |
| 1690 } | 1690 } |
| 1691 if (!IsBlacklistBitSet(ext)) | 1691 if (!IsBlacklistBitSet(ext)) |
| 1692 result.push_back(*it); | 1692 result.push_back(*it); |
| 1693 } | 1693 } |
| 1694 return result; | 1694 return result; |
| 1695 } | 1695 } |
| 1696 | 1696 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1711 } | 1711 } |
| 1712 } | 1712 } |
| 1713 | 1713 |
| 1714 void ExtensionPrefs::LoadExtensionControlledPrefs( | 1714 void ExtensionPrefs::LoadExtensionControlledPrefs( |
| 1715 const std::string& extension_id, | 1715 const std::string& extension_id, |
| 1716 ExtensionPrefsScope scope) { | 1716 ExtensionPrefsScope scope) { |
| 1717 std::string scope_string; | 1717 std::string scope_string; |
| 1718 bool success = ScopeToPrefKey(scope, &scope_string); | 1718 bool success = ScopeToPrefKey(scope, &scope_string); |
| 1719 DCHECK(success); | 1719 DCHECK(success); |
| 1720 std::string key = extension_id + "." + scope_string; | 1720 std::string key = extension_id + "." + scope_string; |
| 1721 DictionaryValue* preferences = NULL; | 1721 const DictionaryValue* preferences = NULL; |
| 1722 // First try the regular lookup. | 1722 // First try the regular lookup. |
| 1723 const DictionaryValue* source_dict = prefs_->GetDictionary(kExtensionsPref); | 1723 const DictionaryValue* source_dict = prefs_->GetDictionary(kExtensionsPref); |
| 1724 if (!source_dict->GetDictionary(key, &preferences)) | 1724 if (!source_dict->GetDictionary(key, &preferences)) |
| 1725 return; | 1725 return; |
| 1726 | 1726 |
| 1727 for (DictionaryValue::Iterator i(*preferences); i.HasNext(); i.Advance()) { | 1727 for (DictionaryValue::Iterator i(*preferences); i.HasNext(); i.Advance()) { |
| 1728 extension_pref_value_map_->SetExtensionPref( | 1728 extension_pref_value_map_->SetExtensionPref( |
| 1729 extension_id, i.key(), scope, i.value().DeepCopy()); | 1729 extension_id, i.key(), scope, i.value().DeepCopy()); |
| 1730 } | 1730 } |
| 1731 } | 1731 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1771 LoadExtensionControlledPrefs(*ext_id, kExtensionPrefsScopeRegular); | 1771 LoadExtensionControlledPrefs(*ext_id, kExtensionPrefsScopeRegular); |
| 1772 // Set incognito extension controlled prefs. | 1772 // Set incognito extension controlled prefs. |
| 1773 LoadExtensionControlledPrefs(*ext_id, | 1773 LoadExtensionControlledPrefs(*ext_id, |
| 1774 kExtensionPrefsScopeIncognitoPersistent); | 1774 kExtensionPrefsScopeIncognitoPersistent); |
| 1775 // Set regular-only extension controlled prefs. | 1775 // Set regular-only extension controlled prefs. |
| 1776 LoadExtensionControlledPrefs(*ext_id, kExtensionPrefsScopeRegularOnly); | 1776 LoadExtensionControlledPrefs(*ext_id, kExtensionPrefsScopeRegularOnly); |
| 1777 | 1777 |
| 1778 // Set content settings. | 1778 // Set content settings. |
| 1779 const DictionaryValue* extension_prefs = GetExtensionPref(*ext_id); | 1779 const DictionaryValue* extension_prefs = GetExtensionPref(*ext_id); |
| 1780 DCHECK(extension_prefs); | 1780 DCHECK(extension_prefs); |
| 1781 ListValue* content_settings = NULL; | 1781 const ListValue* content_settings = NULL; |
| 1782 if (extension_prefs->GetList(kPrefContentSettings, | 1782 if (extension_prefs->GetList(kPrefContentSettings, |
| 1783 &content_settings)) { | 1783 &content_settings)) { |
| 1784 content_settings_store_->SetExtensionContentSettingFromList( | 1784 content_settings_store_->SetExtensionContentSettingFromList( |
| 1785 *ext_id, content_settings, | 1785 *ext_id, content_settings, |
| 1786 kExtensionPrefsScopeRegular); | 1786 kExtensionPrefsScopeRegular); |
| 1787 } | 1787 } |
| 1788 if (extension_prefs->GetList(kPrefIncognitoContentSettings, | 1788 if (extension_prefs->GetList(kPrefIncognitoContentSettings, |
| 1789 &content_settings)) { | 1789 &content_settings)) { |
| 1790 content_settings_store_->SetExtensionContentSettingFromList( | 1790 content_settings_store_->SetExtensionContentSettingFromList( |
| 1791 *ext_id, content_settings, | 1791 *ext_id, content_settings, |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1934 0, // default value | 1934 0, // default value |
| 1935 PrefService::UNSYNCABLE_PREF); | 1935 PrefService::UNSYNCABLE_PREF); |
| 1936 prefs->RegisterInt64Pref(prefs::kNextExtensionsUpdateCheck, | 1936 prefs->RegisterInt64Pref(prefs::kNextExtensionsUpdateCheck, |
| 1937 0, // default value | 1937 0, // default value |
| 1938 PrefService::UNSYNCABLE_PREF); | 1938 PrefService::UNSYNCABLE_PREF); |
| 1939 prefs->RegisterListPref(prefs::kExtensionAllowedInstallSites, | 1939 prefs->RegisterListPref(prefs::kExtensionAllowedInstallSites, |
| 1940 PrefService::UNSYNCABLE_PREF); | 1940 PrefService::UNSYNCABLE_PREF); |
| 1941 } | 1941 } |
| 1942 | 1942 |
| 1943 } // namespace extensions | 1943 } // namespace extensions |
| OLD | NEW |