summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgab@chromium.org <gab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-01 18:37:54 +0000
committergab@chromium.org <gab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-01 18:37:54 +0000
commit1c7fa0c5d9e09b356fad1d241b7e39407a34fc2f (patch)
tree9811e6cecea43737e62a197d85c995895ee134eb
parent70b3cc88078b559b8a5818f3a6859ca5b131c626 (diff)
downloadchromium_src-1c7fa0c5d9e09b356fad1d241b7e39407a34fc2f.zip
chromium_src-1c7fa0c5d9e09b356fad1d241b7e39407a34fc2f.tar.gz
chromium_src-1c7fa0c5d9e09b356fad1d241b7e39407a34fc2f.tar.bz2
Augment PrefHashFilter with the ability to cleanup deprecated tracked preferences and their matching MAC.
The time has come where some tracked preferences are starting to be deprecated and keeping them declared solely for the sake of having them migrated back to the unprotected store by TrackedPreferencesMigrator only to be cleared from that store shortly after is adding overhead (and furthermore with that technique only the value would be cleaned up, not its matching MAC). Implemented in CleanupDeprecatedTrackedPreferences() in pref_hash_filter.cc and added a comment pointing to it from kTrackedPrefs. Review URL: https://codereview.chromium.org/432533003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@287050 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/prefs/chrome_pref_service_factory.cc18
-rw-r--r--chrome/browser/prefs/pref_hash_filter.cc25
-rw-r--r--chrome/browser/prefs/pref_hash_filter_unittest.cc3
-rw-r--r--extensions/browser/extension_prefs.cc6
-rw-r--r--extensions/browser/pref_names.cc1
-rw-r--r--extensions/browser/pref_names.h4
-rw-r--r--tools/metrics/histograms/histograms.xml3
7 files changed, 34 insertions, 26 deletions
diff --git a/chrome/browser/prefs/chrome_pref_service_factory.cc b/chrome/browser/prefs/chrome_pref_service_factory.cc
index c4bc314..3f4ed9a 100644
--- a/chrome/browser/prefs/chrome_pref_service_factory.cc
+++ b/chrome/browser/prefs/chrome_pref_service_factory.cc
@@ -86,6 +86,8 @@ bool g_disable_delays_and_domain_check_for_testing = false;
// tools/metrics/histograms/histograms.xml. To add a new preference, append it
// to the array and add a corresponding value to the histogram enum. Each
// tracked preference must be given a unique reporting ID.
+// See CleanupDeprecatedTrackedPreferences() in pref_hash_filter.cc to remove a
+// deprecated tracked preference.
const PrefHashFilter::TrackedPreferenceMetadata kTrackedPrefs[] = {
{
0, prefs::kShowHomeButton,
@@ -151,15 +153,6 @@ const PrefHashFilter::TrackedPreferenceMetadata kTrackedPrefs[] = {
PrefHashFilter::TRACKING_STRATEGY_ATOMIC
},
#endif
-#if defined(ENABLE_EXTENSIONS)
- {
- // This pref has been deprecated, leave it here for now for it to be
- // properly mapped back to Preferences and cleaned up from there.
- 12, extensions::pref_names::kKnownDisabled,
- PrefHashFilter::NO_ENFORCEMENT,
- PrefHashFilter::TRACKING_STRATEGY_ATOMIC
- },
-#endif
{
13, prefs::kProfileResetPromptMemento,
PrefHashFilter::ENFORCE_ON_LOAD,
@@ -202,10 +195,9 @@ const PrefHashFilter::TrackedPreferenceMetadata kTrackedPrefs[] = {
},
};
-// The count of tracked preferences IDs across all platforms.
-const size_t kTrackedPrefsReportingIDsCount = 19;
-COMPILE_ASSERT(kTrackedPrefsReportingIDsCount >= arraysize(kTrackedPrefs),
- need_to_increment_ids_count);
+// One more than the last tracked preferences ID above.
+const size_t kTrackedPrefsReportingIDsCount =
+ kTrackedPrefs[arraysize(kTrackedPrefs) - 1].reporting_id + 1;
// Each group enforces a superset of the protection provided by the previous
// one.
diff --git a/chrome/browser/prefs/pref_hash_filter.cc b/chrome/browser/prefs/pref_hash_filter.cc
index 9c2a62e..fe216e8 100644
--- a/chrome/browser/prefs/pref_hash_filter.cc
+++ b/chrome/browser/prefs/pref_hash_filter.cc
@@ -21,6 +21,27 @@
#include "chrome/common/pref_names.h"
#include "components/pref_registry/pref_registry_syncable.h"
+namespace {
+
+void CleanupDeprecatedTrackedPreferences(
+ base::DictionaryValue* pref_store_contents,
+ PrefHashStoreTransaction* hash_store_transaction) {
+ // Add deprecated previously tracked preferences below for them to be cleaned
+ // up from both the pref files and the hash store.
+ static const char* kDeprecatedTrackedPreferences[] = {
+ // TODO(gab): Remove in M41+.
+ "extensions.known_disabled",
+ };
+
+ for (size_t i = 0; i < arraysize(kDeprecatedTrackedPreferences); ++i) {
+ const char* key = kDeprecatedTrackedPreferences[i];
+ pref_store_contents->Remove(key, NULL);
+ hash_store_transaction->ClearHash(key);
+ }
+}
+
+} // namespace
+
PrefHashFilter::PrefHashFilter(
scoped_ptr<PrefHashStore> pref_hash_store,
const std::vector<TrackedPreferenceMetadata>& tracked_preferences,
@@ -165,6 +186,10 @@ void PrefHashFilter::FinalizeFilterOnLoad(
scoped_ptr<PrefHashStoreTransaction> hash_store_transaction(
pref_hash_store_->BeginTransaction(scoped_ptr<HashStoreContents>(
new DictionaryHashStoreContents(pref_store_contents.get()))));
+
+ CleanupDeprecatedTrackedPreferences(
+ pref_store_contents.get(), hash_store_transaction.get());
+
if (report_super_mac_validity_) {
UMA_HISTOGRAM_BOOLEAN("Settings.HashesDictionaryTrusted",
hash_store_transaction->IsSuperMACValid());
diff --git a/chrome/browser/prefs/pref_hash_filter_unittest.cc b/chrome/browser/prefs/pref_hash_filter_unittest.cc
index 1dc4ff6..902bca5 100644
--- a/chrome/browser/prefs/pref_hash_filter_unittest.cc
+++ b/chrome/browser/prefs/pref_hash_filter_unittest.cc
@@ -335,7 +335,8 @@ void MockPrefHashStore::MockPrefHashStoreTransaction::ImportHash(
void MockPrefHashStore::MockPrefHashStoreTransaction::ClearHash(
const std::string& path) {
- ADD_FAILURE() << "Unexpected call.";
+ // Allow this to be called by PrefHashFilter's deprecated tracked prefs
+ // cleanup tasks.
}
bool MockPrefHashStore::MockPrefHashStoreTransaction::IsSuperMACValid() const {
diff --git a/extensions/browser/extension_prefs.cc b/extensions/browser/extension_prefs.cc
index efe3ba4..502816c 100644
--- a/extensions/browser/extension_prefs.cc
+++ b/extensions/browser/extension_prefs.cc
@@ -1920,10 +1920,6 @@ ExtensionPrefs::ExtensionPrefs(
app_sorting_(app_sorting.Pass()),
time_provider_(time_provider.Pass()),
extensions_disabled_(extensions_disabled) {
- // Remove this deprecated pref.
- // TODO(gab): Remove the pref's name from the code base altogether in M40.
- prefs_->ClearPref(pref_names::kKnownDisabled);
-
app_sorting_->SetExtensionScopedPrefs(this);
MakePathsRelative();
@@ -1988,8 +1984,6 @@ void ExtensionPrefs::RegisterProfilePrefs(
pref_names::kLastChromeVersion,
std::string(), // default value
user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
- registry->RegisterListPref(pref_names::kKnownDisabled,
- user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
#if defined(OS_MACOSX)
registry->RegisterDoublePref(
pref_names::kBrowserActionContainerWidth,
diff --git a/extensions/browser/pref_names.cc b/extensions/browser/pref_names.cc
index 76a7dc1..b693d21 100644
--- a/extensions/browser/pref_names.cc
+++ b/extensions/browser/pref_names.cc
@@ -38,7 +38,6 @@ const char kExtensions[] = "extensions.settings";
const char kInstallAllowList[] = "extensions.install.allowlist";
const char kInstallDenyList[] = "extensions.install.denylist";
const char kInstallForceList[] = "extensions.install.forcelist";
-const char kKnownDisabled[] = "extensions.known_disabled";
const char kLastChromeVersion[] = "extensions.last_chrome_version";
const char kLastUpdateCheck[] = "extensions.autoupdate.last_check";
const char kNativeMessagingBlacklist[] = "native_messaging.blacklist";
diff --git a/extensions/browser/pref_names.h b/extensions/browser/pref_names.h
index 4f64677..131a939 100644
--- a/extensions/browser/pref_names.h
+++ b/extensions/browser/pref_names.h
@@ -64,10 +64,6 @@ extern const char kInstallDenyList[];
// accessed through extensions::ExternalPolicyProvider.
extern const char kInstallForceList[];
-// Deprecated. A list of known disabled extensions IDs.
-// TODO(gab): Remove this pref in M40+.
-extern const char kKnownDisabled[];
-
// String pref for what version chrome was last time the extension prefs were
// loaded.
extern const char kLastChromeVersion[];
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 5e31b98..4f986de 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -48463,7 +48463,8 @@ Therefore, the affected-histogram name has to have at least one dot in it.
<int value="9" label="prefs::kDefaultSearchProviderKeyword"/>
<int value="10" label="prefs::kDefaultSearchProviderName"/>
<int value="11" label="prefs::kPinnedTabs"/>
- <int value="12" label="extensions::pref_names::kKnownDisabled"/>
+ <int value="12"
+ label="extensions::pref_names::kKnownDisabled (Obsolete 07/2014)"/>
<int value="13" label="prefs::kProfileResetPromptMemento"/>
<int value="14"
label="DefaultSearchManager::kDefaultSearchProviderDataPrefName"/>