| 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 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 // A preference that indicates whether the extension was installed as | 168 // A preference that indicates whether the extension was installed as |
| 169 // default apps. | 169 // default apps. |
| 170 const char kPrefWasInstalledByDefault[] = "was_installed_by_default"; | 170 const char kPrefWasInstalledByDefault[] = "was_installed_by_default"; |
| 171 | 171 |
| 172 // Key for Geometry Cache preference. | 172 // Key for Geometry Cache preference. |
| 173 const char kPrefGeometryCache[] = "geometry_cache"; | 173 const char kPrefGeometryCache[] = "geometry_cache"; |
| 174 | 174 |
| 175 // A preference that indicates when an extension is last launched. | 175 // A preference that indicates when an extension is last launched. |
| 176 const char kPrefLastLaunchTime[] = "last_launch_time"; | 176 const char kPrefLastLaunchTime[] = "last_launch_time"; |
| 177 | 177 |
| 178 // Am installation parameter bundled with an extension. |
| 179 const char kPrefInstallParam[] = "install_parameter"; |
| 180 |
| 178 // A list of installed ids and a signature. | 181 // A list of installed ids and a signature. |
| 179 const char kInstallSignature[] = "extensions.install_signature"; | 182 const char kInstallSignature[] = "extensions.install_signature"; |
| 180 | 183 |
| 181 // Provider of write access to a dictionary storing extension prefs. | 184 // Provider of write access to a dictionary storing extension prefs. |
| 182 class ScopedExtensionPrefUpdate : public DictionaryPrefUpdate { | 185 class ScopedExtensionPrefUpdate : public DictionaryPrefUpdate { |
| 183 public: | 186 public: |
| 184 ScopedExtensionPrefUpdate(PrefService* service, | 187 ScopedExtensionPrefUpdate(PrefService* service, |
| 185 const std::string& extension_id) : | 188 const std::string& extension_id) : |
| 186 DictionaryPrefUpdate(service, pref_names::kExtensions), | 189 DictionaryPrefUpdate(service, pref_names::kExtensions), |
| 187 extension_id_(extension_id) {} | 190 extension_id_(extension_id) {} |
| (...skipping 908 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1096 } | 1099 } |
| 1097 | 1100 |
| 1098 void ExtensionPrefs::SetKnownDisabled(const ExtensionIdSet& extension_ids) { | 1101 void ExtensionPrefs::SetKnownDisabled(const ExtensionIdSet& extension_ids) { |
| 1099 SetExtensionPrefFromContainer(pref_names::kKnownDisabled, extension_ids); | 1102 SetExtensionPrefFromContainer(pref_names::kKnownDisabled, extension_ids); |
| 1100 } | 1103 } |
| 1101 | 1104 |
| 1102 void ExtensionPrefs::OnExtensionInstalled( | 1105 void ExtensionPrefs::OnExtensionInstalled( |
| 1103 const Extension* extension, | 1106 const Extension* extension, |
| 1104 Extension::State initial_state, | 1107 Extension::State initial_state, |
| 1105 bool blacklisted_for_malware, | 1108 bool blacklisted_for_malware, |
| 1106 const syncer::StringOrdinal& page_ordinal) { | 1109 const syncer::StringOrdinal& page_ordinal, |
| 1110 const std::string& install_parameter) { |
| 1107 ScopedExtensionPrefUpdate update(prefs_, extension->id()); | 1111 ScopedExtensionPrefUpdate update(prefs_, extension->id()); |
| 1108 base::DictionaryValue* extension_dict = update.Get(); | 1112 base::DictionaryValue* extension_dict = update.Get(); |
| 1109 const base::Time install_time = time_provider_->GetCurrentTime(); | 1113 const base::Time install_time = time_provider_->GetCurrentTime(); |
| 1110 PopulateExtensionInfoPrefs(extension, install_time, initial_state, | 1114 PopulateExtensionInfoPrefs(extension, |
| 1111 blacklisted_for_malware, extension_dict); | 1115 install_time, |
| 1116 initial_state, |
| 1117 blacklisted_for_malware, |
| 1118 install_parameter, |
| 1119 extension_dict); |
| 1112 FinishExtensionInfoPrefs(extension->id(), install_time, | 1120 FinishExtensionInfoPrefs(extension->id(), install_time, |
| 1113 extension->RequiresSortOrdinal(), | 1121 extension->RequiresSortOrdinal(), |
| 1114 page_ordinal, extension_dict); | 1122 page_ordinal, extension_dict); |
| 1115 } | 1123 } |
| 1116 | 1124 |
| 1117 void ExtensionPrefs::OnExtensionUninstalled(const std::string& extension_id, | 1125 void ExtensionPrefs::OnExtensionUninstalled(const std::string& extension_id, |
| 1118 const Manifest::Location& location, | 1126 const Manifest::Location& location, |
| 1119 bool external_uninstall) { | 1127 bool external_uninstall) { |
| 1120 app_sorting_->ClearOrdinals(extension_id); | 1128 app_sorting_->ClearOrdinals(extension_id); |
| 1121 | 1129 |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1307 } | 1315 } |
| 1308 | 1316 |
| 1309 return extensions_info.Pass(); | 1317 return extensions_info.Pass(); |
| 1310 } | 1318 } |
| 1311 | 1319 |
| 1312 void ExtensionPrefs::SetDelayedInstallInfo( | 1320 void ExtensionPrefs::SetDelayedInstallInfo( |
| 1313 const Extension* extension, | 1321 const Extension* extension, |
| 1314 Extension::State initial_state, | 1322 Extension::State initial_state, |
| 1315 bool blacklisted_for_malware, | 1323 bool blacklisted_for_malware, |
| 1316 DelayReason delay_reason, | 1324 DelayReason delay_reason, |
| 1317 const syncer::StringOrdinal& page_ordinal) { | 1325 const syncer::StringOrdinal& page_ordinal, |
| 1326 const std::string& install_parameter) { |
| 1318 base::DictionaryValue* extension_dict = new base::DictionaryValue(); | 1327 base::DictionaryValue* extension_dict = new base::DictionaryValue(); |
| 1319 PopulateExtensionInfoPrefs(extension, time_provider_->GetCurrentTime(), | 1328 PopulateExtensionInfoPrefs(extension, |
| 1320 initial_state, blacklisted_for_malware, | 1329 time_provider_->GetCurrentTime(), |
| 1330 initial_state, |
| 1331 blacklisted_for_malware, |
| 1332 install_parameter, |
| 1321 extension_dict); | 1333 extension_dict); |
| 1322 | 1334 |
| 1323 // Add transient data that is needed by FinishDelayedInstallInfo(), but | 1335 // Add transient data that is needed by FinishDelayedInstallInfo(), but |
| 1324 // should not be in the final extension prefs. All entries here should have | 1336 // should not be in the final extension prefs. All entries here should have |
| 1325 // a corresponding Remove() call in FinishDelayedInstallInfo(). | 1337 // a corresponding Remove() call in FinishDelayedInstallInfo(). |
| 1326 if (extension->RequiresSortOrdinal()) { | 1338 if (extension->RequiresSortOrdinal()) { |
| 1327 extension_dict->SetString( | 1339 extension_dict->SetString( |
| 1328 kPrefSuggestedPageOrdinal, | 1340 kPrefSuggestedPageOrdinal, |
| 1329 page_ordinal.IsValid() ? page_ordinal.ToInternalValue() | 1341 page_ordinal.IsValid() ? page_ordinal.ToInternalValue() |
| 1330 : std::string()); | 1342 : std::string()); |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1676 const base::DictionaryValue* signature) { | 1688 const base::DictionaryValue* signature) { |
| 1677 if (signature) { | 1689 if (signature) { |
| 1678 prefs_->Set(kInstallSignature, *signature); | 1690 prefs_->Set(kInstallSignature, *signature); |
| 1679 DVLOG(1) << "SetInstallSignature - saving"; | 1691 DVLOG(1) << "SetInstallSignature - saving"; |
| 1680 } else { | 1692 } else { |
| 1681 DVLOG(1) << "SetInstallSignature - clearing"; | 1693 DVLOG(1) << "SetInstallSignature - clearing"; |
| 1682 prefs_->ClearPref(kInstallSignature); | 1694 prefs_->ClearPref(kInstallSignature); |
| 1683 } | 1695 } |
| 1684 } | 1696 } |
| 1685 | 1697 |
| 1698 std::string ExtensionPrefs::GetInstallParam( |
| 1699 const std::string& extension_id) const { |
| 1700 const base::DictionaryValue* extension = GetExtensionPref(extension_id); |
| 1701 if (!extension) { |
| 1702 NOTREACHED(); |
| 1703 return std::string(); |
| 1704 } |
| 1705 std::string install_parameter; |
| 1706 if (!extension->GetString(kPrefInstallParam, &install_parameter)) |
| 1707 return std::string(); |
| 1708 return install_parameter; |
| 1709 } |
| 1710 |
| 1711 void ExtensionPrefs::SetInstallParam(const std::string& extension_id, |
| 1712 const std::string& install_parameter) { |
| 1713 UpdateExtensionPref(extension_id, |
| 1714 kPrefInstallParam, |
| 1715 new base::StringValue(install_parameter)); |
| 1716 } |
| 1686 | 1717 |
| 1687 ExtensionPrefs::ExtensionPrefs( | 1718 ExtensionPrefs::ExtensionPrefs( |
| 1688 PrefService* prefs, | 1719 PrefService* prefs, |
| 1689 const base::FilePath& root_dir, | 1720 const base::FilePath& root_dir, |
| 1690 ExtensionPrefValueMap* extension_pref_value_map, | 1721 ExtensionPrefValueMap* extension_pref_value_map, |
| 1691 scoped_ptr<AppSorting> app_sorting, | 1722 scoped_ptr<AppSorting> app_sorting, |
| 1692 scoped_ptr<TimeProvider> time_provider, | 1723 scoped_ptr<TimeProvider> time_provider, |
| 1693 bool extensions_disabled) | 1724 bool extensions_disabled) |
| 1694 : prefs_(prefs), | 1725 : prefs_(prefs), |
| 1695 install_directory_(root_dir), | 1726 install_directory_(root_dir), |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1811 iter != strings.end(); ++iter) { | 1842 iter != strings.end(); ++iter) { |
| 1812 list_of_values->Append(new base::StringValue(*iter)); | 1843 list_of_values->Append(new base::StringValue(*iter)); |
| 1813 } | 1844 } |
| 1814 } | 1845 } |
| 1815 | 1846 |
| 1816 void ExtensionPrefs::PopulateExtensionInfoPrefs( | 1847 void ExtensionPrefs::PopulateExtensionInfoPrefs( |
| 1817 const Extension* extension, | 1848 const Extension* extension, |
| 1818 const base::Time install_time, | 1849 const base::Time install_time, |
| 1819 Extension::State initial_state, | 1850 Extension::State initial_state, |
| 1820 bool blacklisted_for_malware, | 1851 bool blacklisted_for_malware, |
| 1852 const std::string& install_parameter, |
| 1821 base::DictionaryValue* extension_dict) { | 1853 base::DictionaryValue* extension_dict) { |
| 1822 // Leave the state blank for component extensions so that old chrome versions | 1854 // Leave the state blank for component extensions so that old chrome versions |
| 1823 // loading new profiles do not fail in GetInstalledExtensionInfo. Older | 1855 // loading new profiles do not fail in GetInstalledExtensionInfo. Older |
| 1824 // Chrome versions would only check for an omitted state. | 1856 // Chrome versions would only check for an omitted state. |
| 1825 if (initial_state != Extension::ENABLED_COMPONENT) | 1857 if (initial_state != Extension::ENABLED_COMPONENT) |
| 1826 extension_dict->Set(kPrefState, new base::FundamentalValue(initial_state)); | 1858 extension_dict->Set(kPrefState, new base::FundamentalValue(initial_state)); |
| 1827 | 1859 |
| 1828 extension_dict->Set(kPrefLocation, | 1860 extension_dict->Set(kPrefLocation, |
| 1829 new base::FundamentalValue(extension->location())); | 1861 new base::FundamentalValue(extension->location())); |
| 1830 extension_dict->Set(kPrefCreationFlags, | 1862 extension_dict->Set(kPrefCreationFlags, |
| 1831 new base::FundamentalValue(extension->creation_flags())); | 1863 new base::FundamentalValue(extension->creation_flags())); |
| 1832 extension_dict->Set(kPrefFromWebStore, | 1864 extension_dict->Set(kPrefFromWebStore, |
| 1833 new base::FundamentalValue(extension->from_webstore())); | 1865 new base::FundamentalValue(extension->from_webstore())); |
| 1834 extension_dict->Set(kPrefFromBookmark, | 1866 extension_dict->Set(kPrefFromBookmark, |
| 1835 new base::FundamentalValue(extension->from_bookmark())); | 1867 new base::FundamentalValue(extension->from_bookmark())); |
| 1836 extension_dict->Set( | 1868 extension_dict->Set( |
| 1837 kPrefWasInstalledByDefault, | 1869 kPrefWasInstalledByDefault, |
| 1838 new base::FundamentalValue(extension->was_installed_by_default())); | 1870 new base::FundamentalValue(extension->was_installed_by_default())); |
| 1839 extension_dict->Set(kPrefInstallTime, | 1871 extension_dict->Set(kPrefInstallTime, |
| 1840 new base::StringValue( | 1872 new base::StringValue( |
| 1841 base::Int64ToString(install_time.ToInternalValue()))); | 1873 base::Int64ToString(install_time.ToInternalValue()))); |
| 1842 if (blacklisted_for_malware) | 1874 if (blacklisted_for_malware) |
| 1843 extension_dict->Set(kPrefBlacklist, new base::FundamentalValue(true)); | 1875 extension_dict->Set(kPrefBlacklist, new base::FundamentalValue(true)); |
| 1844 | 1876 |
| 1845 base::FilePath::StringType path = MakePathRelative(install_directory_, | 1877 base::FilePath::StringType path = MakePathRelative(install_directory_, |
| 1846 extension->path()); | 1878 extension->path()); |
| 1847 extension_dict->Set(kPrefPath, new base::StringValue(path)); | 1879 extension_dict->Set(kPrefPath, new base::StringValue(path)); |
| 1880 if (!install_parameter.empty()) { |
| 1881 extension_dict->Set(kPrefInstallParam, |
| 1882 new base::StringValue(install_parameter)); |
| 1883 } |
| 1848 // We store prefs about LOAD extensions, but don't cache their manifest | 1884 // We store prefs about LOAD extensions, but don't cache their manifest |
| 1849 // since it may change on disk. | 1885 // since it may change on disk. |
| 1850 if (!Manifest::IsUnpackedLocation(extension->location())) { | 1886 if (!Manifest::IsUnpackedLocation(extension->location())) { |
| 1851 extension_dict->Set(kPrefManifest, | 1887 extension_dict->Set(kPrefManifest, |
| 1852 extension->manifest()->value()->DeepCopy()); | 1888 extension->manifest()->value()->DeepCopy()); |
| 1853 } | 1889 } |
| 1854 } | 1890 } |
| 1855 | 1891 |
| 1856 void ExtensionPrefs::FinishExtensionInfoPrefs( | 1892 void ExtensionPrefs::FinishExtensionInfoPrefs( |
| 1857 const std::string& extension_id, | 1893 const std::string& extension_id, |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1904 } | 1940 } |
| 1905 bool is_incognito_enabled = IsIncognitoEnabled(extension_id); | 1941 bool is_incognito_enabled = IsIncognitoEnabled(extension_id); |
| 1906 | 1942 |
| 1907 extension_pref_value_map_->RegisterExtension( | 1943 extension_pref_value_map_->RegisterExtension( |
| 1908 extension_id, install_time, is_enabled, is_incognito_enabled); | 1944 extension_id, install_time, is_enabled, is_incognito_enabled); |
| 1909 content_settings_store_->RegisterExtension(extension_id, install_time, | 1945 content_settings_store_->RegisterExtension(extension_id, install_time, |
| 1910 is_enabled); | 1946 is_enabled); |
| 1911 } | 1947 } |
| 1912 | 1948 |
| 1913 } // namespace extensions | 1949 } // namespace extensions |
| OLD | NEW |