Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(277)

Side by Side Diff: chrome/browser/extensions/extension_prefs.cc

Issue 7088017: Split incognito extension content settings in session-only and persistent. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_prefs.h ('k') | chrome/browser/geolocation/geolocation_content_settings_map.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698