| 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" |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 // A preference that indicates whether the extension was installed as an | 172 // A preference that indicates whether the extension was installed as an |
| 173 // OEM app. | 173 // OEM app. |
| 174 const char kPrefWasInstalledByOem[] = "was_installed_by_oem"; | 174 const char kPrefWasInstalledByOem[] = "was_installed_by_oem"; |
| 175 | 175 |
| 176 // Key for Geometry Cache preference. | 176 // Key for Geometry Cache preference. |
| 177 const char kPrefGeometryCache[] = "geometry_cache"; | 177 const char kPrefGeometryCache[] = "geometry_cache"; |
| 178 | 178 |
| 179 // A preference that indicates when an extension is last launched. | 179 // A preference that indicates when an extension is last launched. |
| 180 const char kPrefLastLaunchTime[] = "last_launch_time"; | 180 const char kPrefLastLaunchTime[] = "last_launch_time"; |
| 181 | 181 |
| 182 // Am installation parameter bundled with an extension. |
| 183 const char kPrefInstallParam[] = "install_parameter"; |
| 184 |
| 182 // A list of installed ids and a signature. | 185 // A list of installed ids and a signature. |
| 183 const char kInstallSignature[] = "extensions.install_signature"; | 186 const char kInstallSignature[] = "extensions.install_signature"; |
| 184 | 187 |
| 185 // Provider of write access to a dictionary storing extension prefs. | 188 // Provider of write access to a dictionary storing extension prefs. |
| 186 class ScopedExtensionPrefUpdate : public DictionaryPrefUpdate { | 189 class ScopedExtensionPrefUpdate : public DictionaryPrefUpdate { |
| 187 public: | 190 public: |
| 188 ScopedExtensionPrefUpdate(PrefService* service, | 191 ScopedExtensionPrefUpdate(PrefService* service, |
| 189 const std::string& extension_id) : | 192 const std::string& extension_id) : |
| 190 DictionaryPrefUpdate(service, pref_names::kExtensions), | 193 DictionaryPrefUpdate(service, pref_names::kExtensions), |
| 191 extension_id_(extension_id) {} | 194 extension_id_(extension_id) {} |
| (...skipping 908 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1100 } | 1103 } |
| 1101 | 1104 |
| 1102 void ExtensionPrefs::SetKnownDisabled(const ExtensionIdSet& extension_ids) { | 1105 void ExtensionPrefs::SetKnownDisabled(const ExtensionIdSet& extension_ids) { |
| 1103 SetExtensionPrefFromContainer(pref_names::kKnownDisabled, extension_ids); | 1106 SetExtensionPrefFromContainer(pref_names::kKnownDisabled, extension_ids); |
| 1104 } | 1107 } |
| 1105 | 1108 |
| 1106 void ExtensionPrefs::OnExtensionInstalled( | 1109 void ExtensionPrefs::OnExtensionInstalled( |
| 1107 const Extension* extension, | 1110 const Extension* extension, |
| 1108 Extension::State initial_state, | 1111 Extension::State initial_state, |
| 1109 bool blacklisted_for_malware, | 1112 bool blacklisted_for_malware, |
| 1110 const syncer::StringOrdinal& page_ordinal) { | 1113 const syncer::StringOrdinal& page_ordinal, |
| 1114 const std::string& install_parameter) { |
| 1111 ScopedExtensionPrefUpdate update(prefs_, extension->id()); | 1115 ScopedExtensionPrefUpdate update(prefs_, extension->id()); |
| 1112 base::DictionaryValue* extension_dict = update.Get(); | 1116 base::DictionaryValue* extension_dict = update.Get(); |
| 1113 const base::Time install_time = time_provider_->GetCurrentTime(); | 1117 const base::Time install_time = time_provider_->GetCurrentTime(); |
| 1114 PopulateExtensionInfoPrefs(extension, install_time, initial_state, | 1118 PopulateExtensionInfoPrefs(extension, |
| 1115 blacklisted_for_malware, extension_dict); | 1119 install_time, |
| 1120 initial_state, |
| 1121 blacklisted_for_malware, |
| 1122 install_parameter, |
| 1123 extension_dict); |
| 1116 FinishExtensionInfoPrefs(extension->id(), install_time, | 1124 FinishExtensionInfoPrefs(extension->id(), install_time, |
| 1117 extension->RequiresSortOrdinal(), | 1125 extension->RequiresSortOrdinal(), |
| 1118 page_ordinal, extension_dict); | 1126 page_ordinal, extension_dict); |
| 1119 } | 1127 } |
| 1120 | 1128 |
| 1121 void ExtensionPrefs::OnExtensionUninstalled(const std::string& extension_id, | 1129 void ExtensionPrefs::OnExtensionUninstalled(const std::string& extension_id, |
| 1122 const Manifest::Location& location, | 1130 const Manifest::Location& location, |
| 1123 bool external_uninstall) { | 1131 bool external_uninstall) { |
| 1124 app_sorting_->ClearOrdinals(extension_id); | 1132 app_sorting_->ClearOrdinals(extension_id); |
| 1125 | 1133 |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1311 } | 1319 } |
| 1312 | 1320 |
| 1313 return extensions_info.Pass(); | 1321 return extensions_info.Pass(); |
| 1314 } | 1322 } |
| 1315 | 1323 |
| 1316 void ExtensionPrefs::SetDelayedInstallInfo( | 1324 void ExtensionPrefs::SetDelayedInstallInfo( |
| 1317 const Extension* extension, | 1325 const Extension* extension, |
| 1318 Extension::State initial_state, | 1326 Extension::State initial_state, |
| 1319 bool blacklisted_for_malware, | 1327 bool blacklisted_for_malware, |
| 1320 DelayReason delay_reason, | 1328 DelayReason delay_reason, |
| 1321 const syncer::StringOrdinal& page_ordinal) { | 1329 const syncer::StringOrdinal& page_ordinal, |
| 1330 const std::string& install_parameter) { |
| 1322 base::DictionaryValue* extension_dict = new base::DictionaryValue(); | 1331 base::DictionaryValue* extension_dict = new base::DictionaryValue(); |
| 1323 PopulateExtensionInfoPrefs(extension, time_provider_->GetCurrentTime(), | 1332 PopulateExtensionInfoPrefs(extension, |
| 1324 initial_state, blacklisted_for_malware, | 1333 time_provider_->GetCurrentTime(), |
| 1334 initial_state, |
| 1335 blacklisted_for_malware, |
| 1336 install_parameter, |
| 1325 extension_dict); | 1337 extension_dict); |
| 1326 | 1338 |
| 1327 // Add transient data that is needed by FinishDelayedInstallInfo(), but | 1339 // Add transient data that is needed by FinishDelayedInstallInfo(), but |
| 1328 // should not be in the final extension prefs. All entries here should have | 1340 // should not be in the final extension prefs. All entries here should have |
| 1329 // a corresponding Remove() call in FinishDelayedInstallInfo(). | 1341 // a corresponding Remove() call in FinishDelayedInstallInfo(). |
| 1330 if (extension->RequiresSortOrdinal()) { | 1342 if (extension->RequiresSortOrdinal()) { |
| 1331 extension_dict->SetString( | 1343 extension_dict->SetString( |
| 1332 kPrefSuggestedPageOrdinal, | 1344 kPrefSuggestedPageOrdinal, |
| 1333 page_ordinal.IsValid() ? page_ordinal.ToInternalValue() | 1345 page_ordinal.IsValid() ? page_ordinal.ToInternalValue() |
| 1334 : std::string()); | 1346 : std::string()); |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1690 const base::DictionaryValue* signature) { | 1702 const base::DictionaryValue* signature) { |
| 1691 if (signature) { | 1703 if (signature) { |
| 1692 prefs_->Set(kInstallSignature, *signature); | 1704 prefs_->Set(kInstallSignature, *signature); |
| 1693 DVLOG(1) << "SetInstallSignature - saving"; | 1705 DVLOG(1) << "SetInstallSignature - saving"; |
| 1694 } else { | 1706 } else { |
| 1695 DVLOG(1) << "SetInstallSignature - clearing"; | 1707 DVLOG(1) << "SetInstallSignature - clearing"; |
| 1696 prefs_->ClearPref(kInstallSignature); | 1708 prefs_->ClearPref(kInstallSignature); |
| 1697 } | 1709 } |
| 1698 } | 1710 } |
| 1699 | 1711 |
| 1712 std::string ExtensionPrefs::GetInstallParam( |
| 1713 const std::string& extension_id) const { |
| 1714 const base::DictionaryValue* extension = GetExtensionPref(extension_id); |
| 1715 if (!extension) { |
| 1716 NOTREACHED(); |
| 1717 return std::string(); |
| 1718 } |
| 1719 std::string install_parameter; |
| 1720 if (!extension->GetString(kPrefInstallParam, &install_parameter)) |
| 1721 return std::string(); |
| 1722 return install_parameter; |
| 1723 } |
| 1724 |
| 1725 void ExtensionPrefs::SetInstallParam(const std::string& extension_id, |
| 1726 const std::string& install_parameter) { |
| 1727 UpdateExtensionPref(extension_id, |
| 1728 kPrefInstallParam, |
| 1729 new base::StringValue(install_parameter)); |
| 1730 } |
| 1700 | 1731 |
| 1701 ExtensionPrefs::ExtensionPrefs( | 1732 ExtensionPrefs::ExtensionPrefs( |
| 1702 PrefService* prefs, | 1733 PrefService* prefs, |
| 1703 const base::FilePath& root_dir, | 1734 const base::FilePath& root_dir, |
| 1704 ExtensionPrefValueMap* extension_pref_value_map, | 1735 ExtensionPrefValueMap* extension_pref_value_map, |
| 1705 scoped_ptr<AppSorting> app_sorting, | 1736 scoped_ptr<AppSorting> app_sorting, |
| 1706 scoped_ptr<TimeProvider> time_provider, | 1737 scoped_ptr<TimeProvider> time_provider, |
| 1707 bool extensions_disabled) | 1738 bool extensions_disabled) |
| 1708 : prefs_(prefs), | 1739 : prefs_(prefs), |
| 1709 install_directory_(root_dir), | 1740 install_directory_(root_dir), |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1825 iter != strings.end(); ++iter) { | 1856 iter != strings.end(); ++iter) { |
| 1826 list_of_values->Append(new base::StringValue(*iter)); | 1857 list_of_values->Append(new base::StringValue(*iter)); |
| 1827 } | 1858 } |
| 1828 } | 1859 } |
| 1829 | 1860 |
| 1830 void ExtensionPrefs::PopulateExtensionInfoPrefs( | 1861 void ExtensionPrefs::PopulateExtensionInfoPrefs( |
| 1831 const Extension* extension, | 1862 const Extension* extension, |
| 1832 const base::Time install_time, | 1863 const base::Time install_time, |
| 1833 Extension::State initial_state, | 1864 Extension::State initial_state, |
| 1834 bool blacklisted_for_malware, | 1865 bool blacklisted_for_malware, |
| 1866 const std::string& install_parameter, |
| 1835 base::DictionaryValue* extension_dict) { | 1867 base::DictionaryValue* extension_dict) { |
| 1836 // Leave the state blank for component extensions so that old chrome versions | 1868 // Leave the state blank for component extensions so that old chrome versions |
| 1837 // loading new profiles do not fail in GetInstalledExtensionInfo. Older | 1869 // loading new profiles do not fail in GetInstalledExtensionInfo. Older |
| 1838 // Chrome versions would only check for an omitted state. | 1870 // Chrome versions would only check for an omitted state. |
| 1839 if (initial_state != Extension::ENABLED_COMPONENT) | 1871 if (initial_state != Extension::ENABLED_COMPONENT) |
| 1840 extension_dict->Set(kPrefState, new base::FundamentalValue(initial_state)); | 1872 extension_dict->Set(kPrefState, new base::FundamentalValue(initial_state)); |
| 1841 | 1873 |
| 1842 extension_dict->Set(kPrefLocation, | 1874 extension_dict->Set(kPrefLocation, |
| 1843 new base::FundamentalValue(extension->location())); | 1875 new base::FundamentalValue(extension->location())); |
| 1844 extension_dict->Set(kPrefCreationFlags, | 1876 extension_dict->Set(kPrefCreationFlags, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1855 new base::FundamentalValue(extension->was_installed_by_oem())); | 1887 new base::FundamentalValue(extension->was_installed_by_oem())); |
| 1856 extension_dict->Set(kPrefInstallTime, | 1888 extension_dict->Set(kPrefInstallTime, |
| 1857 new base::StringValue( | 1889 new base::StringValue( |
| 1858 base::Int64ToString(install_time.ToInternalValue()))); | 1890 base::Int64ToString(install_time.ToInternalValue()))); |
| 1859 if (blacklisted_for_malware) | 1891 if (blacklisted_for_malware) |
| 1860 extension_dict->Set(kPrefBlacklist, new base::FundamentalValue(true)); | 1892 extension_dict->Set(kPrefBlacklist, new base::FundamentalValue(true)); |
| 1861 | 1893 |
| 1862 base::FilePath::StringType path = MakePathRelative(install_directory_, | 1894 base::FilePath::StringType path = MakePathRelative(install_directory_, |
| 1863 extension->path()); | 1895 extension->path()); |
| 1864 extension_dict->Set(kPrefPath, new base::StringValue(path)); | 1896 extension_dict->Set(kPrefPath, new base::StringValue(path)); |
| 1897 if (!install_parameter.empty()) { |
| 1898 extension_dict->Set(kPrefInstallParam, |
| 1899 new base::StringValue(install_parameter)); |
| 1900 } |
| 1865 // We store prefs about LOAD extensions, but don't cache their manifest | 1901 // We store prefs about LOAD extensions, but don't cache their manifest |
| 1866 // since it may change on disk. | 1902 // since it may change on disk. |
| 1867 if (!Manifest::IsUnpackedLocation(extension->location())) { | 1903 if (!Manifest::IsUnpackedLocation(extension->location())) { |
| 1868 extension_dict->Set(kPrefManifest, | 1904 extension_dict->Set(kPrefManifest, |
| 1869 extension->manifest()->value()->DeepCopy()); | 1905 extension->manifest()->value()->DeepCopy()); |
| 1870 } | 1906 } |
| 1871 } | 1907 } |
| 1872 | 1908 |
| 1873 void ExtensionPrefs::FinishExtensionInfoPrefs( | 1909 void ExtensionPrefs::FinishExtensionInfoPrefs( |
| 1874 const std::string& extension_id, | 1910 const std::string& extension_id, |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1921 } | 1957 } |
| 1922 bool is_incognito_enabled = IsIncognitoEnabled(extension_id); | 1958 bool is_incognito_enabled = IsIncognitoEnabled(extension_id); |
| 1923 | 1959 |
| 1924 extension_pref_value_map_->RegisterExtension( | 1960 extension_pref_value_map_->RegisterExtension( |
| 1925 extension_id, install_time, is_enabled, is_incognito_enabled); | 1961 extension_id, install_time, is_enabled, is_incognito_enabled); |
| 1926 content_settings_store_->RegisterExtension(extension_id, install_time, | 1962 content_settings_store_->RegisterExtension(extension_id, install_time, |
| 1927 is_enabled); | 1963 is_enabled); |
| 1928 } | 1964 } |
| 1929 | 1965 |
| 1930 } // namespace extensions | 1966 } // namespace extensions |
| OLD | NEW |