Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8699)

Unified Diff: chrome/browser/prefs/tracked/pref_hash_filter.cc

Issue 1227973003: Componentize //chrome/browser/prefs/tracked. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
-}
« no previous file with comments | « chrome/browser/prefs/tracked/pref_hash_filter.h ('k') | chrome/browser/prefs/tracked/pref_hash_filter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698