| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <iterator> | 10 #include <iterator> |
| (...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 } | 456 } |
| 457 ScopedExtensionPrefUpdate update(prefs_, extension_id); | 457 ScopedExtensionPrefUpdate update(prefs_, extension_id); |
| 458 if (data_value) | 458 if (data_value) |
| 459 update->Set(key, data_value); | 459 update->Set(key, data_value); |
| 460 else | 460 else |
| 461 update->Remove(key, NULL); | 461 update->Remove(key, NULL); |
| 462 } | 462 } |
| 463 | 463 |
| 464 void ExtensionPrefs::DeleteExtensionPrefs(const std::string& extension_id) { | 464 void ExtensionPrefs::DeleteExtensionPrefs(const std::string& extension_id) { |
| 465 extension_pref_value_map_->UnregisterExtension(extension_id); | 465 extension_pref_value_map_->UnregisterExtension(extension_id); |
| 466 FOR_EACH_OBSERVER(ExtensionPrefsObserver, | 466 for (auto& observer : observer_list_) |
| 467 observer_list_, | 467 observer.OnExtensionPrefsDeleted(extension_id); |
| 468 OnExtensionPrefsDeleted(extension_id)); | |
| 469 DictionaryPrefUpdate update(prefs_, pref_names::kExtensions); | 468 DictionaryPrefUpdate update(prefs_, pref_names::kExtensions); |
| 470 base::DictionaryValue* dict = update.Get(); | 469 base::DictionaryValue* dict = update.Get(); |
| 471 dict->Remove(extension_id, NULL); | 470 dict->Remove(extension_id, NULL); |
| 472 } | 471 } |
| 473 | 472 |
| 474 bool ExtensionPrefs::ReadPrefAsBoolean(const std::string& extension_id, | 473 bool ExtensionPrefs::ReadPrefAsBoolean(const std::string& extension_id, |
| 475 const std::string& pref_key, | 474 const std::string& pref_key, |
| 476 bool* out_value) const { | 475 bool* out_value) const { |
| 477 const base::DictionaryValue* ext = GetExtensionPref(extension_id); | 476 const base::DictionaryValue* ext = GetExtensionPref(extension_id); |
| 478 if (!ext || !ext->GetBoolean(pref_key, out_value)) | 477 if (!ext || !ext->GetBoolean(pref_key, out_value)) |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 798 return; | 797 return; |
| 799 | 798 |
| 800 if (new_value == Extension::DISABLE_NONE) { | 799 if (new_value == Extension::DISABLE_NONE) { |
| 801 UpdateExtensionPref(extension_id, kPrefDisableReasons, NULL); | 800 UpdateExtensionPref(extension_id, kPrefDisableReasons, NULL); |
| 802 } else { | 801 } else { |
| 803 UpdateExtensionPref(extension_id, | 802 UpdateExtensionPref(extension_id, |
| 804 kPrefDisableReasons, | 803 kPrefDisableReasons, |
| 805 new base::FundamentalValue(new_value)); | 804 new base::FundamentalValue(new_value)); |
| 806 } | 805 } |
| 807 | 806 |
| 808 FOR_EACH_OBSERVER(ExtensionPrefsObserver, | 807 for (auto& observer : observer_list_) |
| 809 observer_list_, | 808 observer.OnExtensionDisableReasonsChanged(extension_id, new_value); |
| 810 OnExtensionDisableReasonsChanged(extension_id, new_value)); | |
| 811 } | 809 } |
| 812 | 810 |
| 813 std::set<std::string> ExtensionPrefs::GetBlacklistedExtensions() const { | 811 std::set<std::string> ExtensionPrefs::GetBlacklistedExtensions() const { |
| 814 std::set<std::string> ids; | 812 std::set<std::string> ids; |
| 815 | 813 |
| 816 const base::DictionaryValue* extensions = | 814 const base::DictionaryValue* extensions = |
| 817 prefs_->GetDictionary(pref_names::kExtensions); | 815 prefs_->GetDictionary(pref_names::kExtensions); |
| 818 if (!extensions) | 816 if (!extensions) |
| 819 return ids; | 817 return ids; |
| 820 | 818 |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1119 | 1117 |
| 1120 // For external extensions, we save a preference reminding ourself not to try | 1118 // For external extensions, we save a preference reminding ourself not to try |
| 1121 // and install the extension anymore (except when |external_uninstall| is | 1119 // and install the extension anymore (except when |external_uninstall| is |
| 1122 // true, which signifies that the registry key was deleted or the pref file | 1120 // true, which signifies that the registry key was deleted or the pref file |
| 1123 // no longer lists the extension). | 1121 // no longer lists the extension). |
| 1124 if (!external_uninstall && Manifest::IsExternalLocation(location)) { | 1122 if (!external_uninstall && Manifest::IsExternalLocation(location)) { |
| 1125 UpdateExtensionPref(extension_id, kPrefState, | 1123 UpdateExtensionPref(extension_id, kPrefState, |
| 1126 new base::FundamentalValue( | 1124 new base::FundamentalValue( |
| 1127 Extension::EXTERNAL_EXTENSION_UNINSTALLED)); | 1125 Extension::EXTERNAL_EXTENSION_UNINSTALLED)); |
| 1128 extension_pref_value_map_->SetExtensionState(extension_id, false); | 1126 extension_pref_value_map_->SetExtensionState(extension_id, false); |
| 1129 FOR_EACH_OBSERVER(ExtensionPrefsObserver, | 1127 for (auto& observer : observer_list_) |
| 1130 observer_list_, | 1128 observer.OnExtensionStateChanged(extension_id, false); |
| 1131 OnExtensionStateChanged(extension_id, false)); | |
| 1132 } else { | 1129 } else { |
| 1133 DeleteExtensionPrefs(extension_id); | 1130 DeleteExtensionPrefs(extension_id); |
| 1134 } | 1131 } |
| 1135 } | 1132 } |
| 1136 | 1133 |
| 1137 void ExtensionPrefs::SetExtensionEnabled(const std::string& extension_id) { | 1134 void ExtensionPrefs::SetExtensionEnabled(const std::string& extension_id) { |
| 1138 UpdateExtensionPref(extension_id, kPrefState, | 1135 UpdateExtensionPref(extension_id, kPrefState, |
| 1139 new base::FundamentalValue(Extension::ENABLED)); | 1136 new base::FundamentalValue(Extension::ENABLED)); |
| 1140 extension_pref_value_map_->SetExtensionState(extension_id, true); | 1137 extension_pref_value_map_->SetExtensionState(extension_id, true); |
| 1141 UpdateExtensionPref(extension_id, kPrefDisableReasons, nullptr); | 1138 UpdateExtensionPref(extension_id, kPrefDisableReasons, nullptr); |
| 1142 FOR_EACH_OBSERVER(ExtensionPrefsObserver, observer_list_, | 1139 for (auto& observer : observer_list_) |
| 1143 OnExtensionStateChanged(extension_id, true)); | 1140 observer.OnExtensionStateChanged(extension_id, true); |
| 1144 } | 1141 } |
| 1145 | 1142 |
| 1146 void ExtensionPrefs::SetExtensionDisabled(const std::string& extension_id, | 1143 void ExtensionPrefs::SetExtensionDisabled(const std::string& extension_id, |
| 1147 int disable_reasons) { | 1144 int disable_reasons) { |
| 1148 if (!IsExternalExtensionUninstalled(extension_id)) { | 1145 if (!IsExternalExtensionUninstalled(extension_id)) { |
| 1149 UpdateExtensionPref(extension_id, kPrefState, | 1146 UpdateExtensionPref(extension_id, kPrefState, |
| 1150 new base::FundamentalValue(Extension::DISABLED)); | 1147 new base::FundamentalValue(Extension::DISABLED)); |
| 1151 extension_pref_value_map_->SetExtensionState(extension_id, false); | 1148 extension_pref_value_map_->SetExtensionState(extension_id, false); |
| 1152 } | 1149 } |
| 1153 UpdateExtensionPref(extension_id, kPrefDisableReasons, | 1150 UpdateExtensionPref(extension_id, kPrefDisableReasons, |
| 1154 new base::FundamentalValue(disable_reasons)); | 1151 new base::FundamentalValue(disable_reasons)); |
| 1155 FOR_EACH_OBSERVER(ExtensionPrefsObserver, observer_list_, | 1152 for (auto& observer : observer_list_) |
| 1156 OnExtensionStateChanged(extension_id, false)); | 1153 observer.OnExtensionStateChanged(extension_id, false); |
| 1157 } | 1154 } |
| 1158 | 1155 |
| 1159 void ExtensionPrefs::SetExtensionBlacklistState(const std::string& extension_id, | 1156 void ExtensionPrefs::SetExtensionBlacklistState(const std::string& extension_id, |
| 1160 BlacklistState state) { | 1157 BlacklistState state) { |
| 1161 SetExtensionBlacklisted(extension_id, state == BLACKLISTED_MALWARE); | 1158 SetExtensionBlacklisted(extension_id, state == BLACKLISTED_MALWARE); |
| 1162 UpdateExtensionPref(extension_id, kPrefBlacklistState, | 1159 UpdateExtensionPref(extension_id, kPrefBlacklistState, |
| 1163 new base::FundamentalValue(state)); | 1160 new base::FundamentalValue(state)); |
| 1164 } | 1161 } |
| 1165 | 1162 |
| 1166 BlacklistState ExtensionPrefs::GetExtensionBlacklistState( | 1163 BlacklistState ExtensionPrefs::GetExtensionBlacklistState( |
| (...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1899 | 1896 |
| 1900 for (ExtensionIdList::iterator extension_id = extension_ids.begin(); | 1897 for (ExtensionIdList::iterator extension_id = extension_ids.begin(); |
| 1901 extension_id != extension_ids.end(); | 1898 extension_id != extension_ids.end(); |
| 1902 ++extension_id) { | 1899 ++extension_id) { |
| 1903 base::Time install_time = GetInstallTime(*extension_id); | 1900 base::Time install_time = GetInstallTime(*extension_id); |
| 1904 bool is_enabled = !IsExtensionDisabled(*extension_id); | 1901 bool is_enabled = !IsExtensionDisabled(*extension_id); |
| 1905 bool is_incognito_enabled = IsIncognitoEnabled(*extension_id); | 1902 bool is_incognito_enabled = IsIncognitoEnabled(*extension_id); |
| 1906 value_map->RegisterExtension( | 1903 value_map->RegisterExtension( |
| 1907 *extension_id, install_time, is_enabled, is_incognito_enabled); | 1904 *extension_id, install_time, is_enabled, is_incognito_enabled); |
| 1908 | 1905 |
| 1909 FOR_EACH_OBSERVER( | 1906 for (auto& observer : observer_list_) |
| 1910 ExtensionPrefsObserver, | 1907 observer.OnExtensionRegistered(*extension_id, install_time, is_enabled); |
| 1911 observer_list_, | |
| 1912 OnExtensionRegistered(*extension_id, install_time, is_enabled)); | |
| 1913 | 1908 |
| 1914 // Set regular extension controlled prefs. | 1909 // Set regular extension controlled prefs. |
| 1915 LoadExtensionControlledPrefs( | 1910 LoadExtensionControlledPrefs( |
| 1916 this, value_map, *extension_id, kExtensionPrefsScopeRegular); | 1911 this, value_map, *extension_id, kExtensionPrefsScopeRegular); |
| 1917 // Set incognito extension controlled prefs. | 1912 // Set incognito extension controlled prefs. |
| 1918 LoadExtensionControlledPrefs(this, | 1913 LoadExtensionControlledPrefs(this, |
| 1919 value_map, | 1914 value_map, |
| 1920 *extension_id, | 1915 *extension_id, |
| 1921 kExtensionPrefsScopeIncognitoPersistent); | 1916 kExtensionPrefsScopeIncognitoPersistent); |
| 1922 // Set regular-only extension controlled prefs. | 1917 // Set regular-only extension controlled prefs. |
| 1923 LoadExtensionControlledPrefs( | 1918 LoadExtensionControlledPrefs( |
| 1924 this, value_map, *extension_id, kExtensionPrefsScopeRegularOnly); | 1919 this, value_map, *extension_id, kExtensionPrefsScopeRegularOnly); |
| 1925 | 1920 |
| 1926 FOR_EACH_OBSERVER(ExtensionPrefsObserver, | 1921 for (auto& observer : observer_list_) |
| 1927 observer_list_, | 1922 observer.OnExtensionPrefsLoaded(*extension_id, this); |
| 1928 OnExtensionPrefsLoaded(*extension_id, this)); | |
| 1929 } | 1923 } |
| 1930 } | 1924 } |
| 1931 | 1925 |
| 1932 void ExtensionPrefs::FinishExtensionInfoPrefs( | 1926 void ExtensionPrefs::FinishExtensionInfoPrefs( |
| 1933 const std::string& extension_id, | 1927 const std::string& extension_id, |
| 1934 const base::Time install_time, | 1928 const base::Time install_time, |
| 1935 bool needs_sort_ordinal, | 1929 bool needs_sort_ordinal, |
| 1936 const syncer::StringOrdinal& suggested_page_ordinal, | 1930 const syncer::StringOrdinal& suggested_page_ordinal, |
| 1937 base::DictionaryValue* extension_dict) { | 1931 base::DictionaryValue* extension_dict) { |
| 1938 // Reinitializes various preferences with empty dictionaries. | 1932 // Reinitializes various preferences with empty dictionaries. |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1976 bool is_enabled = false; | 1970 bool is_enabled = false; |
| 1977 int initial_state; | 1971 int initial_state; |
| 1978 if (extension_dict->GetInteger(kPrefState, &initial_state)) { | 1972 if (extension_dict->GetInteger(kPrefState, &initial_state)) { |
| 1979 is_enabled = initial_state == Extension::ENABLED; | 1973 is_enabled = initial_state == Extension::ENABLED; |
| 1980 } | 1974 } |
| 1981 bool is_incognito_enabled = IsIncognitoEnabled(extension_id); | 1975 bool is_incognito_enabled = IsIncognitoEnabled(extension_id); |
| 1982 | 1976 |
| 1983 extension_pref_value_map_->RegisterExtension( | 1977 extension_pref_value_map_->RegisterExtension( |
| 1984 extension_id, install_time, is_enabled, is_incognito_enabled); | 1978 extension_id, install_time, is_enabled, is_incognito_enabled); |
| 1985 | 1979 |
| 1986 FOR_EACH_OBSERVER( | 1980 for (auto& observer : observer_list_) |
| 1987 ExtensionPrefsObserver, | 1981 observer.OnExtensionRegistered(extension_id, install_time, is_enabled); |
| 1988 observer_list_, | |
| 1989 OnExtensionRegistered(extension_id, install_time, is_enabled)); | |
| 1990 } | 1982 } |
| 1991 | 1983 |
| 1992 } // namespace extensions | 1984 } // namespace extensions |
| OLD | NEW |