Index: chrome/browser/prefs/tracked/pref_hash_filter.cc |
diff --git a/chrome/browser/prefs/tracked/pref_hash_filter.cc b/chrome/browser/prefs/tracked/pref_hash_filter.cc |
deleted file mode 100644 |
index 5fe4fa14e0d156c8dcedb1de1ded23228706af8e..0000000000000000000000000000000000000000 |
--- a/chrome/browser/prefs/tracked/pref_hash_filter.cc |
+++ /dev/null |
@@ -1,230 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/prefs/tracked/pref_hash_filter.h" |
- |
-#include <algorithm> |
- |
-#include "base/logging.h" |
-#include "base/metrics/histogram.h" |
-#include "base/prefs/pref_service.h" |
-#include "base/prefs/pref_store.h" |
-#include "base/strings/string_number_conversions.h" |
-#include "base/time/time.h" |
-#include "base/values.h" |
-#include "chrome/browser/prefs/tracked/dictionary_hash_store_contents.h" |
-#include "chrome/browser/prefs/tracked/pref_hash_store.h" |
-#include "chrome/browser/prefs/tracked/pref_hash_store_transaction.h" |
-#include "chrome/browser/prefs/tracked/tracked_atomic_preference.h" |
-#include "chrome/browser/prefs/tracked/tracked_split_preference.h" |
-#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* const kDeprecatedTrackedPreferences[] = { |
- // TODO(grt): Remove in M44+. |
- "safebrowsing.incident_report_sent", |
- // TODO(mad): Remove in M48+. |
- "software_reporter.prompt_reason", |
- }; |
- |
- 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, |
- const base::Closure& on_reset_on_load, |
- TrackedPreferenceValidationDelegate* delegate, |
- size_t reporting_ids_count, |
- bool report_super_mac_validity) |
- : pref_hash_store_(pref_hash_store.Pass()), |
- on_reset_on_load_(on_reset_on_load), |
- report_super_mac_validity_(report_super_mac_validity) { |
- DCHECK(pref_hash_store_); |
- DCHECK_GE(reporting_ids_count, tracked_preferences.size()); |
- |
- for (size_t i = 0; i < tracked_preferences.size(); ++i) { |
- const TrackedPreferenceMetadata& metadata = tracked_preferences[i]; |
- |
- scoped_ptr<TrackedPreference> tracked_preference; |
- switch (metadata.strategy) { |
- case TRACKING_STRATEGY_ATOMIC: |
- tracked_preference.reset( |
- new TrackedAtomicPreference(metadata.name, |
- metadata.reporting_id, |
- reporting_ids_count, |
- metadata.enforcement_level, |
- metadata.value_type, |
- delegate)); |
- break; |
- case TRACKING_STRATEGY_SPLIT: |
- tracked_preference.reset( |
- new TrackedSplitPreference(metadata.name, |
- metadata.reporting_id, |
- reporting_ids_count, |
- metadata.enforcement_level, |
- metadata.value_type, |
- delegate)); |
- break; |
- } |
- DCHECK(tracked_preference); |
- |
- bool is_new = tracked_paths_.add(metadata.name, |
- tracked_preference.Pass()).second; |
- DCHECK(is_new); |
- } |
-} |
- |
-PrefHashFilter::~PrefHashFilter() { |
- // Ensure new values for all |changed_paths_| have been flushed to |
- // |pref_hash_store_| already. |
- DCHECK(changed_paths_.empty()); |
-} |
- |
-// static |
-void PrefHashFilter::RegisterProfilePrefs( |
- user_prefs::PrefRegistrySyncable* registry) { |
- // See GetResetTime for why this is a StringPref and not Int64Pref. |
- registry->RegisterStringPref( |
- prefs::kPreferenceResetTime, |
- base::Int64ToString(base::Time().ToInternalValue())); |
-} |
- |
-// static |
-base::Time PrefHashFilter::GetResetTime(PrefService* user_prefs) { |
- // Provide our own implementation (identical to the PrefService::GetInt64) in |
- // order to ensure it remains consistent with the way we store this value |
- // (which we do via a PrefStore, preventing us from reusing |
- // PrefService::SetInt64). |
- int64 internal_value = base::Time().ToInternalValue(); |
- if (!base::StringToInt64( |
- user_prefs->GetString(prefs::kPreferenceResetTime), |
- &internal_value)) { |
- // Somehow the value stored on disk is not a valid int64. |
- NOTREACHED(); |
- return base::Time(); |
- } |
- return base::Time::FromInternalValue(internal_value); |
-} |
- |
-// static |
-void PrefHashFilter::ClearResetTime(PrefService* user_prefs) { |
- user_prefs->ClearPref(prefs::kPreferenceResetTime); |
-} |
- |
-void PrefHashFilter::Initialize(base::DictionaryValue* pref_store_contents) { |
- scoped_ptr<PrefHashStoreTransaction> hash_store_transaction( |
- pref_hash_store_->BeginTransaction(scoped_ptr<HashStoreContents>( |
- new DictionaryHashStoreContents(pref_store_contents)))); |
- for (TrackedPreferencesMap::const_iterator it = tracked_paths_.begin(); |
- it != tracked_paths_.end(); ++it) { |
- const std::string& initialized_path = it->first; |
- const TrackedPreference* initialized_preference = it->second; |
- const base::Value* value = NULL; |
- pref_store_contents->Get(initialized_path, &value); |
- initialized_preference->OnNewValue(value, hash_store_transaction.get()); |
- } |
-} |
- |
-// Marks |path| has having changed if it is part of |tracked_paths_|. A new hash |
-// will be stored for it the next time FilterSerializeData() is invoked. |
-void PrefHashFilter::FilterUpdate(const std::string& path) { |
- TrackedPreferencesMap::const_iterator it = tracked_paths_.find(path); |
- if (it != tracked_paths_.end()) |
- changed_paths_.insert(std::make_pair(path, it->second)); |
-} |
- |
-// Updates the stored hashes for |changed_paths_| before serializing data to |
-// disk. This is required as storing the hash everytime a pref's value changes |
-// is too expensive (see perf regression @ http://crbug.com/331273). |
-void PrefHashFilter::FilterSerializeData( |
- base::DictionaryValue* pref_store_contents) { |
- if (!changed_paths_.empty()) { |
- base::TimeTicks checkpoint = base::TimeTicks::Now(); |
- { |
- scoped_ptr<PrefHashStoreTransaction> hash_store_transaction( |
- pref_hash_store_->BeginTransaction(scoped_ptr<HashStoreContents>( |
- new DictionaryHashStoreContents(pref_store_contents)))); |
- for (ChangedPathsMap::const_iterator it = changed_paths_.begin(); |
- it != changed_paths_.end(); ++it) { |
- const std::string& changed_path = it->first; |
- const TrackedPreference* changed_preference = it->second; |
- const base::Value* value = NULL; |
- pref_store_contents->Get(changed_path, &value); |
- changed_preference->OnNewValue(value, hash_store_transaction.get()); |
- } |
- changed_paths_.clear(); |
- } |
- // TODO(gab): Remove this histogram by Feb 21 2014; after sufficient timing |
- // data has been gathered from the wild to be confident this doesn't |
- // significantly affect performance on the UI thread. |
- UMA_HISTOGRAM_TIMES("Settings.FilterSerializeDataTime", |
- base::TimeTicks::Now() - checkpoint); |
- } |
-} |
- |
-void PrefHashFilter::FinalizeFilterOnLoad( |
- const PostFilterOnLoadCallback& post_filter_on_load_callback, |
- scoped_ptr<base::DictionaryValue> pref_store_contents, |
- bool prefs_altered) { |
- DCHECK(pref_store_contents); |
- base::TimeTicks checkpoint = base::TimeTicks::Now(); |
- |
- bool did_reset = false; |
- { |
- 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()); |
- } |
- |
- for (TrackedPreferencesMap::const_iterator it = tracked_paths_.begin(); |
- it != tracked_paths_.end(); ++it) { |
- if (it->second->EnforceAndReport(pref_store_contents.get(), |
- hash_store_transaction.get())) { |
- did_reset = true; |
- prefs_altered = true; |
- } |
- } |
- if (hash_store_transaction->StampSuperMac()) |
- prefs_altered = true; |
- } |
- |
- if (did_reset) { |
- pref_store_contents->Set(prefs::kPreferenceResetTime, |
- new base::StringValue(base::Int64ToString( |
- base::Time::Now().ToInternalValue()))); |
- FilterUpdate(prefs::kPreferenceResetTime); |
- |
- if (!on_reset_on_load_.is_null()) |
- on_reset_on_load_.Run(); |
- } |
- |
- // TODO(gab): Remove this histogram by Feb 21 2014; after sufficient timing |
- // data has been gathered from the wild to be confident this doesn't |
- // significantly affect startup. |
- UMA_HISTOGRAM_TIMES("Settings.FilterOnLoadTime", |
- base::TimeTicks::Now() - checkpoint); |
- |
- post_filter_on_load_callback.Run(pref_store_contents.Pass(), prefs_altered); |
-} |