OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/extension_prefs.h" | 5 #include "extensions/browser/extension_prefs.h" |
6 | 6 |
7 #include <iterator> | 7 #include <iterator> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/prefs/pref_notifier.h" | 10 #include "base/prefs/pref_notifier.h" |
11 #include "base/prefs/pref_service.h" | 11 #include "base/prefs/pref_service.h" |
12 #include "base/strings/string_number_conversions.h" | 12 #include "base/strings/string_number_conversions.h" |
13 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
14 #include "base/value_conversions.h" | 14 #include "base/value_conversions.h" |
15 #include "components/pref_registry/pref_registry_syncable.h" | 15 #include "components/pref_registry/pref_registry_syncable.h" |
16 #include "extensions/browser/admin_policy.h" | 16 #include "extensions/browser/admin_policy.h" |
17 #include "extensions/browser/app_sorting.h" | 17 #include "extensions/browser/app_sorting.h" |
18 #include "extensions/browser/event_router.h" | 18 #include "extensions/browser/event_router.h" |
19 #include "extensions/browser/extension_pref_store.h" | 19 #include "extensions/browser/extension_pref_store.h" |
20 #include "extensions/browser/extension_prefs_factory.h" | 20 #include "extensions/browser/extension_prefs_factory.h" |
21 #include "extensions/browser/extension_prefs_observer.h" | 21 #include "extensions/browser/extension_prefs_observer.h" |
| 22 #include "extensions/browser/install_flag.h" |
22 #include "extensions/browser/pref_names.h" | 23 #include "extensions/browser/pref_names.h" |
23 #include "extensions/common/feature_switch.h" | 24 #include "extensions/common/feature_switch.h" |
24 #include "extensions/common/manifest.h" | 25 #include "extensions/common/manifest.h" |
25 #include "extensions/common/permissions/permission_set.h" | 26 #include "extensions/common/permissions/permission_set.h" |
26 #include "extensions/common/permissions/permissions_info.h" | 27 #include "extensions/common/permissions/permissions_info.h" |
27 #include "extensions/common/url_pattern.h" | 28 #include "extensions/common/url_pattern.h" |
28 #include "extensions/common/user_script.h" | 29 #include "extensions/common/user_script.h" |
29 #include "ui/base/l10n/l10n_util.h" | 30 #include "ui/base/l10n/l10n_util.h" |
30 | 31 |
31 using base::Value; | 32 using base::Value; |
(...skipping 1200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1232 id_set_out); | 1233 id_set_out); |
1233 } | 1234 } |
1234 | 1235 |
1235 void ExtensionPrefs::SetKnownDisabled(const ExtensionIdSet& extension_ids) { | 1236 void ExtensionPrefs::SetKnownDisabled(const ExtensionIdSet& extension_ids) { |
1236 SetExtensionPrefFromContainer(pref_names::kKnownDisabled, extension_ids); | 1237 SetExtensionPrefFromContainer(pref_names::kKnownDisabled, extension_ids); |
1237 } | 1238 } |
1238 | 1239 |
1239 void ExtensionPrefs::OnExtensionInstalled( | 1240 void ExtensionPrefs::OnExtensionInstalled( |
1240 const Extension* extension, | 1241 const Extension* extension, |
1241 Extension::State initial_state, | 1242 Extension::State initial_state, |
1242 bool blacklisted_for_malware, | |
1243 bool is_ephemeral, | |
1244 const syncer::StringOrdinal& page_ordinal, | 1243 const syncer::StringOrdinal& page_ordinal, |
| 1244 int install_flags, |
1245 const std::string& install_parameter) { | 1245 const std::string& install_parameter) { |
1246 ScopedExtensionPrefUpdate update(prefs_, extension->id()); | 1246 ScopedExtensionPrefUpdate update(prefs_, extension->id()); |
1247 base::DictionaryValue* extension_dict = update.Get(); | 1247 base::DictionaryValue* extension_dict = update.Get(); |
1248 const base::Time install_time = time_provider_->GetCurrentTime(); | 1248 const base::Time install_time = time_provider_->GetCurrentTime(); |
1249 PopulateExtensionInfoPrefs(extension, | 1249 PopulateExtensionInfoPrefs(extension, |
1250 install_time, | 1250 install_time, |
1251 initial_state, | 1251 initial_state, |
1252 blacklisted_for_malware, | 1252 install_flags, |
1253 is_ephemeral, | |
1254 install_parameter, | 1253 install_parameter, |
1255 extension_dict); | 1254 extension_dict); |
1256 FinishExtensionInfoPrefs(extension->id(), install_time, | 1255 FinishExtensionInfoPrefs(extension->id(), install_time, |
1257 extension->RequiresSortOrdinal(), | 1256 extension->RequiresSortOrdinal(), |
1258 page_ordinal, extension_dict); | 1257 page_ordinal, extension_dict); |
1259 } | 1258 } |
1260 | 1259 |
1261 void ExtensionPrefs::OnExtensionUninstalled(const std::string& extension_id, | 1260 void ExtensionPrefs::OnExtensionUninstalled(const std::string& extension_id, |
1262 const Manifest::Location& location, | 1261 const Manifest::Location& location, |
1263 bool external_uninstall) { | 1262 bool external_uninstall) { |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1457 if (info) | 1456 if (info) |
1458 extensions_info->push_back(linked_ptr<ExtensionInfo>(info.release())); | 1457 extensions_info->push_back(linked_ptr<ExtensionInfo>(info.release())); |
1459 } | 1458 } |
1460 | 1459 |
1461 return extensions_info.Pass(); | 1460 return extensions_info.Pass(); |
1462 } | 1461 } |
1463 | 1462 |
1464 void ExtensionPrefs::SetDelayedInstallInfo( | 1463 void ExtensionPrefs::SetDelayedInstallInfo( |
1465 const Extension* extension, | 1464 const Extension* extension, |
1466 Extension::State initial_state, | 1465 Extension::State initial_state, |
1467 bool blacklisted_for_malware, | 1466 int install_flags, |
1468 bool is_ephemeral, | |
1469 DelayReason delay_reason, | 1467 DelayReason delay_reason, |
1470 const syncer::StringOrdinal& page_ordinal, | 1468 const syncer::StringOrdinal& page_ordinal, |
1471 const std::string& install_parameter) { | 1469 const std::string& install_parameter) { |
1472 base::DictionaryValue* extension_dict = new base::DictionaryValue(); | 1470 base::DictionaryValue* extension_dict = new base::DictionaryValue(); |
1473 PopulateExtensionInfoPrefs(extension, | 1471 PopulateExtensionInfoPrefs(extension, |
1474 time_provider_->GetCurrentTime(), | 1472 time_provider_->GetCurrentTime(), |
1475 initial_state, | 1473 initial_state, |
1476 blacklisted_for_malware, | 1474 install_flags, |
1477 is_ephemeral, | |
1478 install_parameter, | 1475 install_parameter, |
1479 extension_dict); | 1476 extension_dict); |
1480 | 1477 |
1481 // Add transient data that is needed by FinishDelayedInstallInfo(), but | 1478 // Add transient data that is needed by FinishDelayedInstallInfo(), but |
1482 // should not be in the final extension prefs. All entries here should have | 1479 // should not be in the final extension prefs. All entries here should have |
1483 // a corresponding Remove() call in FinishDelayedInstallInfo(). | 1480 // a corresponding Remove() call in FinishDelayedInstallInfo(). |
1484 if (extension->RequiresSortOrdinal()) { | 1481 if (extension->RequiresSortOrdinal()) { |
1485 extension_dict->SetString( | 1482 extension_dict->SetString( |
1486 kPrefSuggestedPageOrdinal, | 1483 kPrefSuggestedPageOrdinal, |
1487 page_ordinal.IsValid() ? page_ordinal.ToInternalValue() | 1484 page_ordinal.IsValid() ? page_ordinal.ToInternalValue() |
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2079 for (typename ExtensionIdContainer::const_iterator iter = strings.begin(); | 2076 for (typename ExtensionIdContainer::const_iterator iter = strings.begin(); |
2080 iter != strings.end(); ++iter) { | 2077 iter != strings.end(); ++iter) { |
2081 list_of_values->Append(new base::StringValue(*iter)); | 2078 list_of_values->Append(new base::StringValue(*iter)); |
2082 } | 2079 } |
2083 } | 2080 } |
2084 | 2081 |
2085 void ExtensionPrefs::PopulateExtensionInfoPrefs( | 2082 void ExtensionPrefs::PopulateExtensionInfoPrefs( |
2086 const Extension* extension, | 2083 const Extension* extension, |
2087 const base::Time install_time, | 2084 const base::Time install_time, |
2088 Extension::State initial_state, | 2085 Extension::State initial_state, |
2089 bool blacklisted_for_malware, | 2086 int install_flags, |
2090 bool is_ephemeral, | |
2091 const std::string& install_parameter, | 2087 const std::string& install_parameter, |
2092 base::DictionaryValue* extension_dict) { | 2088 base::DictionaryValue* extension_dict) { |
2093 // Leave the state blank for component extensions so that old chrome versions | 2089 // Leave the state blank for component extensions so that old chrome versions |
2094 // loading new profiles do not fail in GetInstalledExtensionInfo. Older | 2090 // loading new profiles do not fail in GetInstalledExtensionInfo. Older |
2095 // Chrome versions would only check for an omitted state. | 2091 // Chrome versions would only check for an omitted state. |
2096 if (initial_state != Extension::ENABLED_COMPONENT) | 2092 if (initial_state != Extension::ENABLED_COMPONENT) |
2097 extension_dict->Set(kPrefState, new base::FundamentalValue(initial_state)); | 2093 extension_dict->Set(kPrefState, new base::FundamentalValue(initial_state)); |
2098 | 2094 |
2099 extension_dict->Set(kPrefLocation, | 2095 extension_dict->Set(kPrefLocation, |
2100 new base::FundamentalValue(extension->location())); | 2096 new base::FundamentalValue(extension->location())); |
2101 extension_dict->Set(kPrefCreationFlags, | 2097 extension_dict->Set(kPrefCreationFlags, |
2102 new base::FundamentalValue(extension->creation_flags())); | 2098 new base::FundamentalValue(extension->creation_flags())); |
2103 extension_dict->Set(kPrefFromWebStore, | 2099 extension_dict->Set(kPrefFromWebStore, |
2104 new base::FundamentalValue(extension->from_webstore())); | 2100 new base::FundamentalValue(extension->from_webstore())); |
2105 extension_dict->Set(kPrefFromBookmark, | 2101 extension_dict->Set(kPrefFromBookmark, |
2106 new base::FundamentalValue(extension->from_bookmark())); | 2102 new base::FundamentalValue(extension->from_bookmark())); |
2107 extension_dict->Set( | 2103 extension_dict->Set( |
2108 kPrefWasInstalledByDefault, | 2104 kPrefWasInstalledByDefault, |
2109 new base::FundamentalValue(extension->was_installed_by_default())); | 2105 new base::FundamentalValue(extension->was_installed_by_default())); |
2110 extension_dict->Set( | 2106 extension_dict->Set( |
2111 kPrefWasInstalledByOem, | 2107 kPrefWasInstalledByOem, |
2112 new base::FundamentalValue(extension->was_installed_by_oem())); | 2108 new base::FundamentalValue(extension->was_installed_by_oem())); |
2113 extension_dict->Set(kPrefInstallTime, | 2109 extension_dict->Set(kPrefInstallTime, |
2114 new base::StringValue( | 2110 new base::StringValue( |
2115 base::Int64ToString(install_time.ToInternalValue()))); | 2111 base::Int64ToString(install_time.ToInternalValue()))); |
2116 if (blacklisted_for_malware) | 2112 if (install_flags & kInstallFlagIsBlacklistedForMalware) |
2117 extension_dict->Set(kPrefBlacklist, new base::FundamentalValue(true)); | 2113 extension_dict->Set(kPrefBlacklist, new base::FundamentalValue(true)); |
2118 | 2114 |
| 2115 // TODO(tmdiep): Delete the pref if false, don't write false. |
| 2116 bool is_ephemeral = (install_flags & kInstallFlagIsEphemeral) != 0; |
2119 extension_dict->Set(kPrefEphemeralApp, | 2117 extension_dict->Set(kPrefEphemeralApp, |
2120 new base::FundamentalValue(is_ephemeral)); | 2118 new base::FundamentalValue(is_ephemeral)); |
2121 | 2119 |
2122 base::FilePath::StringType path = MakePathRelative(install_directory_, | 2120 base::FilePath::StringType path = MakePathRelative(install_directory_, |
2123 extension->path()); | 2121 extension->path()); |
2124 extension_dict->Set(kPrefPath, new base::StringValue(path)); | 2122 extension_dict->Set(kPrefPath, new base::StringValue(path)); |
2125 if (!install_parameter.empty()) { | 2123 if (!install_parameter.empty()) { |
2126 extension_dict->Set(kPrefInstallParam, | 2124 extension_dict->Set(kPrefInstallParam, |
2127 new base::StringValue(install_parameter)); | 2125 new base::StringValue(install_parameter)); |
2128 } | 2126 } |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2228 extension_pref_value_map_->RegisterExtension( | 2226 extension_pref_value_map_->RegisterExtension( |
2229 extension_id, install_time, is_enabled, is_incognito_enabled); | 2227 extension_id, install_time, is_enabled, is_incognito_enabled); |
2230 | 2228 |
2231 FOR_EACH_OBSERVER( | 2229 FOR_EACH_OBSERVER( |
2232 ExtensionPrefsObserver, | 2230 ExtensionPrefsObserver, |
2233 observer_list_, | 2231 observer_list_, |
2234 OnExtensionRegistered(extension_id, install_time, is_enabled)); | 2232 OnExtensionRegistered(extension_id, install_time, is_enabled)); |
2235 } | 2233 } |
2236 | 2234 |
2237 } // namespace extensions | 2235 } // namespace extensions |
OLD | NEW |