OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/extension_pref_store.h" | 10 #include "chrome/browser/extensions/extension_pref_store.h" |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 | 112 |
113 // A preference that contains any extension-controlled preferences. | 113 // A preference that contains any extension-controlled preferences. |
114 const char kPrefPreferences[] = "preferences"; | 114 const char kPrefPreferences[] = "preferences"; |
115 | 115 |
116 // A preference that contains any extension-controlled incognito preferences. | 116 // A preference that contains any extension-controlled incognito preferences. |
117 const char kPrefIncognitoPreferences[] = "incognito_preferences"; | 117 const char kPrefIncognitoPreferences[] = "incognito_preferences"; |
118 | 118 |
119 // A preference that contains extension-set content settings. | 119 // A preference that contains extension-set content settings. |
120 const char kPrefContentSettings[] = "content_settings"; | 120 const char kPrefContentSettings[] = "content_settings"; |
121 | 121 |
| 122 // A preference that contains extension-set content settings. |
| 123 const char kPrefIncognitoContentSettings[] = "incognito_content_settings"; |
| 124 |
122 // Provider of write access to a dictionary storing extension prefs. | 125 // Provider of write access to a dictionary storing extension prefs. |
123 class ScopedExtensionPrefUpdate : public DictionaryPrefUpdate { | 126 class ScopedExtensionPrefUpdate : public DictionaryPrefUpdate { |
124 public: | 127 public: |
125 ScopedExtensionPrefUpdate(PrefService* service, | 128 ScopedExtensionPrefUpdate(PrefService* service, |
126 const std::string& extension_id) : | 129 const std::string& extension_id) : |
127 DictionaryPrefUpdate(service, ExtensionPrefs::kExtensionsPref), | 130 DictionaryPrefUpdate(service, ExtensionPrefs::kExtensionsPref), |
128 prefs_(service), | 131 prefs_(service), |
129 extension_id_(extension_id) {} | 132 extension_id_(extension_id) {} |
130 | 133 |
131 virtual ~ScopedExtensionPrefUpdate() { | 134 virtual ~ScopedExtensionPrefUpdate() { |
(...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
888 const base::Time install_time = GetCurrentTime(); | 891 const base::Time install_time = GetCurrentTime(); |
889 extension_dict->Set(kPrefState, Value::CreateIntegerValue(initial_state)); | 892 extension_dict->Set(kPrefState, Value::CreateIntegerValue(initial_state)); |
890 extension_dict->Set(kPrefLocation, | 893 extension_dict->Set(kPrefLocation, |
891 Value::CreateIntegerValue(extension->location())); | 894 Value::CreateIntegerValue(extension->location())); |
892 extension_dict->Set(kPrefInstallTime, | 895 extension_dict->Set(kPrefInstallTime, |
893 Value::CreateStringValue( | 896 Value::CreateStringValue( |
894 base::Int64ToString(install_time.ToInternalValue()))); | 897 base::Int64ToString(install_time.ToInternalValue()))); |
895 extension_dict->Set(kPrefPreferences, new DictionaryValue()); | 898 extension_dict->Set(kPrefPreferences, new DictionaryValue()); |
896 extension_dict->Set(kPrefIncognitoPreferences, new DictionaryValue()); | 899 extension_dict->Set(kPrefIncognitoPreferences, new DictionaryValue()); |
897 extension_dict->Set(kPrefContentSettings, new ListValue()); | 900 extension_dict->Set(kPrefContentSettings, new ListValue()); |
| 901 extension_dict->Set(kPrefIncognitoContentSettings, new ListValue()); |
898 | 902 |
899 FilePath::StringType path = MakePathRelative(install_directory_, | 903 FilePath::StringType path = MakePathRelative(install_directory_, |
900 extension->path()); | 904 extension->path()); |
901 extension_dict->Set(kPrefPath, Value::CreateStringValue(path)); | 905 extension_dict->Set(kPrefPath, Value::CreateStringValue(path)); |
902 // We store prefs about LOAD extensions, but don't cache their manifest | 906 // We store prefs about LOAD extensions, but don't cache their manifest |
903 // since it may change on disk. | 907 // since it may change on disk. |
904 if (extension->location() != Extension::LOAD) { | 908 if (extension->location() != Extension::LOAD) { |
905 extension_dict->Set(kPrefManifest, | 909 extension_dict->Set(kPrefManifest, |
906 extension->manifest_value()->DeepCopy()); | 910 extension->manifest_value()->DeepCopy()); |
907 } | 911 } |
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1325 | 1329 |
1326 std::string data; | 1330 std::string data; |
1327 dictionary->GetString(kUpdateUrlData, &data); | 1331 dictionary->GetString(kUpdateUrlData, &data); |
1328 return data; | 1332 return data; |
1329 } | 1333 } |
1330 | 1334 |
1331 base::Time ExtensionPrefs::GetCurrentTime() const { | 1335 base::Time ExtensionPrefs::GetCurrentTime() const { |
1332 return base::Time::Now(); | 1336 return base::Time::Now(); |
1333 } | 1337 } |
1334 | 1338 |
1335 void ExtensionPrefs::OnContentSettingChanged(const std::string& extension_id, | 1339 void ExtensionPrefs::OnContentSettingChanged( |
1336 bool incognito) { | 1340 const std::string& extension_id, |
1337 if (!incognito) { | 1341 bool incognito) { |
| 1342 if (incognito) { |
| 1343 UpdateExtensionPref( |
| 1344 extension_id, kPrefIncognitoContentSettings, |
| 1345 content_settings_store_->GetSettingsForExtension( |
| 1346 extension_id, extension_prefs_scope::kIncognitoPersistent)); |
| 1347 } else { |
1338 UpdateExtensionPref( | 1348 UpdateExtensionPref( |
1339 extension_id, kPrefContentSettings, | 1349 extension_id, kPrefContentSettings, |
1340 content_settings_store_->GetSettingsForExtension(extension_id)); | 1350 content_settings_store_->GetSettingsForExtension( |
| 1351 extension_id, extension_prefs_scope::kRegular)); |
1341 } | 1352 } |
1342 } | 1353 } |
1343 | 1354 |
1344 base::Time ExtensionPrefs::GetInstallTime( | 1355 base::Time ExtensionPrefs::GetInstallTime( |
1345 const std::string& extension_id) const { | 1356 const std::string& extension_id) const { |
1346 const DictionaryValue* extension = GetExtensionPref(extension_id); | 1357 const DictionaryValue* extension = GetExtensionPref(extension_id); |
1347 if (!extension) { | 1358 if (!extension) { |
1348 NOTREACHED(); | 1359 NOTREACHED(); |
1349 return base::Time(); | 1360 return base::Time(); |
1350 } | 1361 } |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1450 if (!prefs->GetWithoutPathExpansion(*i, &value)) | 1461 if (!prefs->GetWithoutPathExpansion(*i, &value)) |
1451 continue; | 1462 continue; |
1452 extension_pref_value_map_->SetExtensionPref( | 1463 extension_pref_value_map_->SetExtensionPref( |
1453 *ext_id, *i, extension_prefs_scope::kIncognitoPersistent, | 1464 *ext_id, *i, extension_prefs_scope::kIncognitoPersistent, |
1454 value->DeepCopy()); | 1465 value->DeepCopy()); |
1455 } | 1466 } |
1456 | 1467 |
1457 const DictionaryValue* extension_prefs = GetExtensionPref(*ext_id); | 1468 const DictionaryValue* extension_prefs = GetExtensionPref(*ext_id); |
1458 DCHECK(extension_prefs); | 1469 DCHECK(extension_prefs); |
1459 ListValue* content_settings = NULL; | 1470 ListValue* content_settings = NULL; |
1460 if (extension_prefs->GetList(kPrefContentSettings, &content_settings)) { | 1471 if (extension_prefs->GetList(kPrefContentSettings, |
| 1472 &content_settings)) { |
1461 content_settings_store_->SetExtensionContentSettingsFromList( | 1473 content_settings_store_->SetExtensionContentSettingsFromList( |
1462 *ext_id, content_settings); | 1474 *ext_id, content_settings, |
| 1475 extension_prefs_scope::kRegular); |
| 1476 } |
| 1477 if (extension_prefs->GetList(kPrefIncognitoContentSettings, |
| 1478 &content_settings)) { |
| 1479 content_settings_store_->SetExtensionContentSettingsFromList( |
| 1480 *ext_id, content_settings, |
| 1481 extension_prefs_scope::kIncognitoPersistent); |
1463 } | 1482 } |
1464 } | 1483 } |
1465 | 1484 |
1466 extension_pref_value_map_->NotifyInitializationCompleted(); | 1485 extension_pref_value_map_->NotifyInitializationCompleted(); |
1467 } | 1486 } |
1468 | 1487 |
1469 | 1488 |
1470 void ExtensionPrefs::SetExtensionControlledPref( | 1489 void ExtensionPrefs::SetExtensionControlledPref( |
1471 const std::string& extension_id, | 1490 const std::string& extension_id, |
1472 const std::string& pref_key, | 1491 const std::string& pref_key, |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1546 } | 1565 } |
1547 | 1566 |
1548 bool ExtensionPrefs::HasIncognitoPrefValue(const std::string& pref_key) { | 1567 bool ExtensionPrefs::HasIncognitoPrefValue(const std::string& pref_key) { |
1549 bool has_incognito_pref_value = false; | 1568 bool has_incognito_pref_value = false; |
1550 extension_pref_value_map_->GetEffectivePrefValue(pref_key, | 1569 extension_pref_value_map_->GetEffectivePrefValue(pref_key, |
1551 true, | 1570 true, |
1552 &has_incognito_pref_value); | 1571 &has_incognito_pref_value); |
1553 return has_incognito_pref_value; | 1572 return has_incognito_pref_value; |
1554 } | 1573 } |
1555 | 1574 |
| 1575 void ExtensionPrefs::ClearIncognitoSessionOnlyContentSettings() { |
| 1576 ExtensionIdSet extension_ids; |
| 1577 GetExtensions(&extension_ids); |
| 1578 for (ExtensionIdSet::iterator ext_id = extension_ids.begin(); |
| 1579 ext_id != extension_ids.end(); ++ext_id) { |
| 1580 content_settings_store_->ClearContentSettingsForExtension( |
| 1581 *ext_id, |
| 1582 extension_prefs_scope::kIncognitoSessionOnly); |
| 1583 } |
| 1584 } |
| 1585 |
1556 // static | 1586 // static |
1557 void ExtensionPrefs::RegisterUserPrefs(PrefService* prefs) { | 1587 void ExtensionPrefs::RegisterUserPrefs(PrefService* prefs) { |
1558 prefs->RegisterDictionaryPref(kExtensionsPref, PrefService::UNSYNCABLE_PREF); | 1588 prefs->RegisterDictionaryPref(kExtensionsPref, PrefService::UNSYNCABLE_PREF); |
1559 prefs->RegisterListPref(kExtensionToolbar, PrefService::UNSYNCABLE_PREF); | 1589 prefs->RegisterListPref(kExtensionToolbar, PrefService::UNSYNCABLE_PREF); |
1560 prefs->RegisterIntegerPref(prefs::kExtensionToolbarSize, | 1590 prefs->RegisterIntegerPref(prefs::kExtensionToolbarSize, |
1561 -1, | 1591 -1, |
1562 PrefService::UNSYNCABLE_PREF); | 1592 PrefService::UNSYNCABLE_PREF); |
1563 prefs->RegisterDictionaryPref(kExtensionsBlacklistUpdate, | 1593 prefs->RegisterDictionaryPref(kExtensionsBlacklistUpdate, |
1564 PrefService::UNSYNCABLE_PREF); | 1594 PrefService::UNSYNCABLE_PREF); |
1565 prefs->RegisterListPref(prefs::kExtensionInstallAllowList, | 1595 prefs->RegisterListPref(prefs::kExtensionInstallAllowList, |
1566 PrefService::UNSYNCABLE_PREF); | 1596 PrefService::UNSYNCABLE_PREF); |
1567 prefs->RegisterListPref(prefs::kExtensionInstallDenyList, | 1597 prefs->RegisterListPref(prefs::kExtensionInstallDenyList, |
1568 PrefService::UNSYNCABLE_PREF); | 1598 PrefService::UNSYNCABLE_PREF); |
1569 prefs->RegisterListPref(prefs::kExtensionInstallForceList, | 1599 prefs->RegisterListPref(prefs::kExtensionInstallForceList, |
1570 PrefService::UNSYNCABLE_PREF); | 1600 PrefService::UNSYNCABLE_PREF); |
1571 prefs->RegisterStringPref(kWebStoreLogin, | 1601 prefs->RegisterStringPref(kWebStoreLogin, |
1572 std::string() /* default_value */, | 1602 std::string() /* default_value */, |
1573 PrefService::UNSYNCABLE_PREF); | 1603 PrefService::UNSYNCABLE_PREF); |
1574 } | 1604 } |
OLD | NEW |