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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 // Indicates whether to show an install warning when the user enables. | 64 // Indicates whether to show an install warning when the user enables. |
65 const char kExtensionDidEscalatePermissions[] = "install_warning_on_enable"; | 65 const char kExtensionDidEscalatePermissions[] = "install_warning_on_enable"; |
66 | 66 |
67 // Indicates whether the extension was updated while it was disabled. | 67 // Indicates whether the extension was updated while it was disabled. |
68 const char kPrefDisableReason[] = "disable_reason"; | 68 const char kPrefDisableReason[] = "disable_reason"; |
69 | 69 |
70 // A preference that tracks browser action toolbar configuration. This is a list | 70 // A preference that tracks browser action toolbar configuration. This is a list |
71 // object stored in the Preferences file. The extensions are stored by ID. | 71 // object stored in the Preferences file. The extensions are stored by ID. |
72 const char kExtensionToolbar[] = "extensions.toolbar"; | 72 const char kExtensionToolbar[] = "extensions.toolbar"; |
73 | 73 |
| 74 // A preference that tracks the order of extensions in an action box |
| 75 // (list of extension ids). |
| 76 const char kExtensionActionBox[] = "extensions.action_box_order"; |
| 77 |
| 78 // A preference that tracks the order of extensions in a toolbar when |
| 79 // action box is enabled (list of extension ids). |
| 80 const char kExtensionActionBoxBar[] = |
| 81 "extensions.toolbar_order_with_action_box"; |
| 82 |
74 // The key for a serialized Time value indicating the start of the day (from the | 83 // The key for a serialized Time value indicating the start of the day (from the |
75 // server's perspective) an extension last included a "ping" parameter during | 84 // server's perspective) an extension last included a "ping" parameter during |
76 // its update check. | 85 // its update check. |
77 const char kLastPingDay[] = "lastpingday"; | 86 const char kLastPingDay[] = "lastpingday"; |
78 | 87 |
79 // Similar to kLastPingDay, but for "active" instead of "rollcall" pings. | 88 // Similar to kLastPingDay, but for "active" instead of "rollcall" pings. |
80 const char kLastActivePingDay[] = "last_active_pingday"; | 89 const char kLastActivePingDay[] = "last_active_pingday"; |
81 | 90 |
82 // A bit we use to keep track of whether we need to do an "active" ping. | 91 // A bit we use to keep track of whether we need to do an "active" ping. |
83 const char kActiveBit[] = "active_bit"; | 92 const char kActiveBit[] = "active_bit"; |
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 extension_id, kPrefDisableReason, | 712 extension_id, kPrefDisableReason, |
704 Value::CreateIntegerValue(static_cast<int>(disable_reason))); | 713 Value::CreateIntegerValue(static_cast<int>(disable_reason))); |
705 } | 714 } |
706 | 715 |
707 void ExtensionPrefs::RemoveDisableReason(const std::string& extension_id) { | 716 void ExtensionPrefs::RemoveDisableReason(const std::string& extension_id) { |
708 UpdateExtensionPref(extension_id, kPrefDisableReason, NULL); | 717 UpdateExtensionPref(extension_id, kPrefDisableReason, NULL); |
709 } | 718 } |
710 | 719 |
711 void ExtensionPrefs::UpdateBlacklist( | 720 void ExtensionPrefs::UpdateBlacklist( |
712 const std::set<std::string>& blacklist_set) { | 721 const std::set<std::string>& blacklist_set) { |
713 std::vector<std::string> remove_pref_ids; | 722 ExtensionIdSet remove_pref_ids; |
714 std::set<std::string> used_id_set; | 723 std::set<std::string> used_id_set; |
715 const DictionaryValue* extensions = prefs_->GetDictionary(kExtensionsPref); | 724 const DictionaryValue* extensions = prefs_->GetDictionary(kExtensionsPref); |
716 | 725 |
717 if (extensions) { | 726 if (extensions) { |
718 for (DictionaryValue::key_iterator extension_id = extensions->begin_keys(); | 727 for (DictionaryValue::key_iterator extension_id = extensions->begin_keys(); |
719 extension_id != extensions->end_keys(); ++extension_id) { | 728 extension_id != extensions->end_keys(); ++extension_id) { |
720 const DictionaryValue* ext; | 729 const DictionaryValue* ext; |
721 if (!extensions->GetDictionaryWithoutPathExpansion(*extension_id, &ext)) { | 730 if (!extensions->GetDictionaryWithoutPathExpansion(*extension_id, &ext)) { |
722 NOTREACHED() << "Invalid pref for extension " << *extension_id; | 731 NOTREACHED() << "Invalid pref for extension " << *extension_id; |
723 continue; | 732 continue; |
(...skipping 26 matching lines...) Expand all Loading... |
750 } | 759 } |
751 | 760 |
752 // Iterate the leftovers to set blacklist in pref | 761 // Iterate the leftovers to set blacklist in pref |
753 std::set<std::string>::const_iterator set_itr = blacklist_set.begin(); | 762 std::set<std::string>::const_iterator set_itr = blacklist_set.begin(); |
754 for (; set_itr != blacklist_set.end(); ++set_itr) { | 763 for (; set_itr != blacklist_set.end(); ++set_itr) { |
755 if (used_id_set.find(*set_itr) == used_id_set.end()) { | 764 if (used_id_set.find(*set_itr) == used_id_set.end()) { |
756 UpdateExtensionPref(*set_itr, kPrefBlacklist, | 765 UpdateExtensionPref(*set_itr, kPrefBlacklist, |
757 Value::CreateBooleanValue(true)); | 766 Value::CreateBooleanValue(true)); |
758 } | 767 } |
759 } | 768 } |
760 for (unsigned int i = 0; i < remove_pref_ids.size(); ++i) { | 769 for (size_t i = 0; i < remove_pref_ids.size(); ++i) { |
761 DeleteExtensionPrefs(remove_pref_ids[i]); | 770 DeleteExtensionPrefs(remove_pref_ids[i]); |
762 } | 771 } |
763 } | 772 } |
764 | 773 |
765 namespace { | 774 namespace { |
766 | 775 |
767 // Serializes |time| as a string value mapped to |key| in |dictionary|. | 776 // Serializes |time| as a string value mapped to |key| in |dictionary|. |
768 void SaveTime(DictionaryValue* dictionary, | 777 void SaveTime(DictionaryValue* dictionary, |
769 const char* key, | 778 const char* key, |
770 const base::Time& time) { | 779 const base::Time& time) { |
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1293 bool ExtensionPrefs::IsExternalExtensionUninstalled( | 1302 bool ExtensionPrefs::IsExternalExtensionUninstalled( |
1294 const std::string& id) const { | 1303 const std::string& id) const { |
1295 return DoesExtensionHaveState(id, Extension::EXTERNAL_EXTENSION_UNINSTALLED); | 1304 return DoesExtensionHaveState(id, Extension::EXTERNAL_EXTENSION_UNINSTALLED); |
1296 } | 1305 } |
1297 | 1306 |
1298 bool ExtensionPrefs::IsExtensionDisabled( | 1307 bool ExtensionPrefs::IsExtensionDisabled( |
1299 const std::string& id) const { | 1308 const std::string& id) const { |
1300 return DoesExtensionHaveState(id, Extension::DISABLED); | 1309 return DoesExtensionHaveState(id, Extension::DISABLED); |
1301 } | 1310 } |
1302 | 1311 |
1303 std::vector<std::string> ExtensionPrefs::GetToolbarOrder() { | 1312 ExtensionPrefs::ExtensionIdSet ExtensionPrefs::GetToolbarOrder() { |
1304 ExtensionIdSet extension_ids; | 1313 bool action_box_enabled = extensions::switch_utils::IsActionBoxEnabled(); |
1305 const ListValue* toolbar_order = prefs_->GetList(kExtensionToolbar); | 1314 return GetExtensionPrefAsVector( |
1306 if (toolbar_order) { | 1315 action_box_enabled ? kExtensionActionBoxBar : kExtensionToolbar); |
1307 for (size_t i = 0; i < toolbar_order->GetSize(); ++i) { | |
1308 std::string extension_id; | |
1309 if (toolbar_order->GetString(i, &extension_id)) | |
1310 extension_ids.push_back(extension_id); | |
1311 } | |
1312 } | |
1313 return extension_ids; | |
1314 } | 1316 } |
1315 | 1317 |
1316 void ExtensionPrefs::SetToolbarOrder( | 1318 void ExtensionPrefs::SetToolbarOrder(const ExtensionIdSet& extension_ids) { |
1317 const std::vector<std::string>& extension_ids) { | 1319 SetExtensionPrefFromVector(extensions::switch_utils::IsActionBoxEnabled() ? |
1318 ListPrefUpdate update(prefs_, kExtensionToolbar); | 1320 kExtensionActionBoxBar : kExtensionToolbar, extension_ids); |
1319 ListValue* toolbar_order = update.Get(); | 1321 } |
1320 toolbar_order->Clear(); | 1322 |
1321 for (std::vector<std::string>::const_iterator iter = extension_ids.begin(); | 1323 ExtensionPrefs::ExtensionIdSet ExtensionPrefs::GetActionBoxOrder() { |
1322 iter != extension_ids.end(); ++iter) { | 1324 return GetExtensionPrefAsVector(kExtensionActionBox); |
1323 toolbar_order->Append(new StringValue(*iter)); | 1325 } |
1324 } | 1326 |
| 1327 void ExtensionPrefs::SetActionBoxOrder(const ExtensionIdSet& extension_ids) { |
| 1328 SetExtensionPrefFromVector(kExtensionActionBox, extension_ids); |
1325 } | 1329 } |
1326 | 1330 |
1327 void ExtensionPrefs::OnExtensionInstalled( | 1331 void ExtensionPrefs::OnExtensionInstalled( |
1328 const Extension* extension, | 1332 const Extension* extension, |
1329 Extension::State initial_state, | 1333 Extension::State initial_state, |
1330 bool from_webstore, | 1334 bool from_webstore, |
1331 const StringOrdinal& page_ordinal) { | 1335 const StringOrdinal& page_ordinal) { |
1332 const std::string& id = extension->id(); | 1336 const std::string& id = extension->id(); |
1333 CHECK(Extension::IdIsValid(id)); | 1337 CHECK(Extension::IdIsValid(id)); |
1334 ScopedExtensionPrefUpdate update(prefs_, id); | 1338 ScopedExtensionPrefUpdate update(prefs_, id); |
(...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2031 result.AddPattern(entry); | 2035 result.AddPattern(entry); |
2032 } | 2036 } |
2033 | 2037 |
2034 return result; | 2038 return result; |
2035 } | 2039 } |
2036 | 2040 |
2037 // static | 2041 // static |
2038 void ExtensionPrefs::RegisterUserPrefs(PrefService* prefs) { | 2042 void ExtensionPrefs::RegisterUserPrefs(PrefService* prefs) { |
2039 prefs->RegisterDictionaryPref(kExtensionsPref, PrefService::UNSYNCABLE_PREF); | 2043 prefs->RegisterDictionaryPref(kExtensionsPref, PrefService::UNSYNCABLE_PREF); |
2040 prefs->RegisterListPref(kExtensionToolbar, PrefService::UNSYNCABLE_PREF); | 2044 prefs->RegisterListPref(kExtensionToolbar, PrefService::UNSYNCABLE_PREF); |
| 2045 prefs->RegisterListPref(kExtensionActionBox, PrefService::UNSYNCABLE_PREF); |
| 2046 prefs->RegisterListPref(kExtensionActionBoxBar, PrefService::UNSYNCABLE_PREF); |
2041 prefs->RegisterIntegerPref(prefs::kExtensionToolbarSize, | 2047 prefs->RegisterIntegerPref(prefs::kExtensionToolbarSize, |
2042 -1, // default value | 2048 -1, // default value |
2043 PrefService::UNSYNCABLE_PREF); | 2049 PrefService::UNSYNCABLE_PREF); |
2044 prefs->RegisterDictionaryPref(kExtensionsBlacklistUpdate, | 2050 prefs->RegisterDictionaryPref(kExtensionsBlacklistUpdate, |
2045 PrefService::UNSYNCABLE_PREF); | 2051 PrefService::UNSYNCABLE_PREF); |
2046 prefs->RegisterListPref(prefs::kExtensionInstallAllowList, | 2052 prefs->RegisterListPref(prefs::kExtensionInstallAllowList, |
2047 PrefService::UNSYNCABLE_PREF); | 2053 PrefService::UNSYNCABLE_PREF); |
2048 prefs->RegisterListPref(prefs::kExtensionInstallDenyList, | 2054 prefs->RegisterListPref(prefs::kExtensionInstallDenyList, |
2049 PrefService::UNSYNCABLE_PREF); | 2055 PrefService::UNSYNCABLE_PREF); |
2050 prefs->RegisterListPref(prefs::kExtensionInstallForceList, | 2056 prefs->RegisterListPref(prefs::kExtensionInstallForceList, |
2051 PrefService::UNSYNCABLE_PREF); | 2057 PrefService::UNSYNCABLE_PREF); |
2052 prefs->RegisterStringPref(kWebStoreLogin, | 2058 prefs->RegisterStringPref(kWebStoreLogin, |
2053 std::string(), // default value | 2059 std::string(), // default value |
2054 PrefService::UNSYNCABLE_PREF); | 2060 PrefService::UNSYNCABLE_PREF); |
2055 prefs->RegisterStringPref(prefs::kExtensionBlacklistUpdateVersion, | 2061 prefs->RegisterStringPref(prefs::kExtensionBlacklistUpdateVersion, |
2056 "0", // default value | 2062 "0", // default value |
2057 PrefService::UNSYNCABLE_PREF); | 2063 PrefService::UNSYNCABLE_PREF); |
2058 prefs->RegisterInt64Pref(prefs::kLastExtensionsUpdateCheck, | 2064 prefs->RegisterInt64Pref(prefs::kLastExtensionsUpdateCheck, |
2059 0, // default value | 2065 0, // default value |
2060 PrefService::UNSYNCABLE_PREF); | 2066 PrefService::UNSYNCABLE_PREF); |
2061 prefs->RegisterInt64Pref(prefs::kNextExtensionsUpdateCheck, | 2067 prefs->RegisterInt64Pref(prefs::kNextExtensionsUpdateCheck, |
2062 0, // default value | 2068 0, // default value |
2063 PrefService::UNSYNCABLE_PREF); | 2069 PrefService::UNSYNCABLE_PREF); |
2064 prefs->RegisterListPref(prefs::kExtensionAllowedInstallSites, | 2070 prefs->RegisterListPref(prefs::kExtensionAllowedInstallSites, |
2065 PrefService::UNSYNCABLE_PREF); | 2071 PrefService::UNSYNCABLE_PREF); |
2066 } | 2072 } |
2067 | 2073 |
| 2074 ExtensionPrefs::ExtensionIdSet ExtensionPrefs::GetExtensionPrefAsVector( |
| 2075 const char* pref) { |
| 2076 ExtensionIdSet extension_ids; |
| 2077 const ListValue* list_of_values = prefs_->GetList(pref); |
| 2078 if (!list_of_values) |
| 2079 return extension_ids; |
| 2080 |
| 2081 std::string extension_id; |
| 2082 for (size_t i = 0; i < list_of_values->GetSize(); ++i) { |
| 2083 if (list_of_values->GetString(i, &extension_id)) |
| 2084 extension_ids.push_back(extension_id); |
| 2085 } |
| 2086 return extension_ids; |
| 2087 } |
| 2088 |
| 2089 void ExtensionPrefs::SetExtensionPrefFromVector(const char* pref, |
| 2090 const ExtensionIdSet& strings) { |
| 2091 ListPrefUpdate update(prefs_, pref); |
| 2092 ListValue* list_of_values = update.Get(); |
| 2093 list_of_values->Clear(); |
| 2094 for (ExtensionIdSet::const_iterator iter = strings.begin(); |
| 2095 iter != strings.end(); ++iter) |
| 2096 list_of_values->Append(new StringValue(*iter)); |
| 2097 } |
| 2098 |
2068 } // namespace extensions | 2099 } // namespace extensions |
OLD | NEW |