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

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

Issue 114223002: Multi-strategy based tracking. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge up to r248367 Created 6 years, 11 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
« no previous file with comments | « chrome/browser/prefs/pref_hash_filter.h ('k') | chrome/browser/prefs/pref_hash_filter_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prefs/pref_hash_filter.cc
diff --git a/chrome/browser/prefs/pref_hash_filter.cc b/chrome/browser/prefs/pref_hash_filter.cc
index 01ba41355bc2b6f7b5be2b3b7d99a5c2b0bb32f0..1935708f9e22ca39964f2580d8dd402d1d39d9b9 100644
--- a/chrome/browser/prefs/pref_hash_filter.cc
+++ b/chrome/browser/prefs/pref_hash_filter.cc
@@ -9,62 +9,52 @@
#include "base/prefs/pref_store.h"
#include "base/time/time.h"
#include "base/values.h"
-#include "chrome/common/pref_names.h"
-
-namespace {
-
-void ReportValidationResult(PrefHashStore::ValueState value_state,
- size_t value_index,
- size_t num_values) {
- switch (value_state) {
- case PrefHashStore::UNCHANGED:
- UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceUnchanged",
- value_index, num_values);
- return;
- case PrefHashStore::CLEARED:
- UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceCleared",
- value_index, num_values);
- return;
- case PrefHashStore::MIGRATED:
- UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceMigrated",
- value_index, num_values);
- return;
- case PrefHashStore::CHANGED:
- UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceChanged",
- value_index, num_values);
- return;
- case PrefHashStore::UNTRUSTED_UNKNOWN_VALUE:
- UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceInitialized",
- value_index, num_values);
- return;
- case PrefHashStore::TRUSTED_UNKNOWN_VALUE:
- UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceTrustedInitialized",
- value_index, num_values);
- return;
- }
- NOTREACHED() << "Unexpected PrefHashStore::ValueState: " << value_state;
-}
-
-} // namespace
-
-PrefHashFilter::PrefHashFilter(scoped_ptr<PrefHashStore> pref_hash_store,
- const TrackedPreference tracked_preferences[],
- size_t tracked_preferences_size,
- size_t reporting_ids_count,
- EnforcementLevel enforcement_level)
- : pref_hash_store_(pref_hash_store.Pass()),
- reporting_ids_count_(reporting_ids_count),
- enforce_(enforcement_level >= ENFORCE),
- no_seeding_(enforcement_level >= ENFORCE_NO_SEEDING),
- no_migration_(enforcement_level >= ENFORCE_NO_SEEDING_NO_MIGRATION) {
+#include "chrome/browser/prefs/tracked/tracked_atomic_preference.h"
+#include "chrome/browser/prefs/tracked/tracked_split_preference.h"
+
+PrefHashFilter::PrefHashFilter(
+ scoped_ptr<PrefHashStore> pref_hash_store,
+ const TrackedPreferenceMetadata tracked_preferences[],
+ size_t tracked_preferences_size,
+ size_t reporting_ids_count,
+ EnforcementLevel enforcement_level) {
+ DCHECK(pref_hash_store);
DCHECK_GE(reporting_ids_count, tracked_preferences_size);
for (size_t i = 0; i < tracked_preferences_size; ++i) {
- bool is_new = tracked_paths_.insert(std::make_pair(
- std::string(tracked_preferences[i].name),
- tracked_preferences[i])).second;
+ const TrackedPreferenceMetadata& metadata = tracked_preferences[i];
+
+ EnforcementLevel enforcement_level_for_pref =
+ metadata.allow_enforcement ? enforcement_level : NO_ENFORCEMENT;
+
+ 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,
+ enforcement_level_for_pref,
+ pref_hash_store.get()));
+ break;
+ case TRACKING_STRATEGY_SPLIT:
+ tracked_preference.reset(
+ new TrackedSplitPreference(metadata.name, metadata.reporting_id,
+ reporting_ids_count,
+ enforcement_level_for_pref,
+ pref_hash_store.get()));
+ break;
+ }
+ DCHECK(tracked_preference);
+
+ bool is_new = tracked_paths_.add(metadata.name,
+ tracked_preference.Pass()).second;
DCHECK(is_new);
}
+
+ // Retain const-ownership of |pref_hash_store| in this class, non-const access
+ // was granted to this class' TrackedPreferences above which should be used
+ // for any further interaction with the |pref_hash_store|.
+ pref_hash_store_ = pref_hash_store.Pass();
}
PrefHashFilter::~PrefHashFilter() {
@@ -79,9 +69,11 @@ void PrefHashFilter::Initialize(PrefStore* pref_store) {
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->GetValue(it->first, &value);
- pref_hash_store_->StoreHash(it->first, value);
+ pref_store->GetValue(initialized_path, &value);
+ initialized_preference->OnNewValue(value);
}
}
@@ -92,61 +84,7 @@ void PrefHashFilter::FilterOnLoad(base::DictionaryValue* pref_store_contents) {
base::TimeTicks checkpoint = base::TimeTicks::Now();
for (TrackedPreferencesMap::const_iterator it = tracked_paths_.begin();
it != tracked_paths_.end(); ++it) {
- const std::string& pref_path = it->first;
- const TrackedPreference& metadata = it->second;
- const base::Value* value = NULL;
- pref_store_contents->Get(pref_path, &value);
-
- PrefHashStore::ValueState value_state =
- pref_hash_store_->CheckValue(pref_path, value);
- ReportValidationResult(value_state, metadata.reporting_id,
- reporting_ids_count_);
-
- enum {
- DONT_RESET,
- WANTED_RESET,
- DO_RESET,
- } reset_state = DONT_RESET;
- if (metadata.allow_enforcement) {
- switch (value_state) {
- case PrefHashStore::UNCHANGED:
- // Desired case, nothing to do.
- break;
- case PrefHashStore::CLEARED:
- // Unfortunate case, but there is nothing we can do.
- break;
- case PrefHashStore::TRUSTED_UNKNOWN_VALUE:
- // It is okay to seed the hash in this case.
- break;
- case PrefHashStore::MIGRATED:
- reset_state = no_migration_ ? DO_RESET : WANTED_RESET;
- break;
- case PrefHashStore::UNTRUSTED_UNKNOWN_VALUE:
- reset_state = no_seeding_ ? DO_RESET : WANTED_RESET;
- break;
- case PrefHashStore::CHANGED:
- reset_state = enforce_ ? DO_RESET : WANTED_RESET;
- break;
- }
- }
-
- if (reset_state == DO_RESET) {
- UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceReset",
- metadata.reporting_id, reporting_ids_count_);
- // TODO(gab): Store the |old_value| to provide an undo UI.
- scoped_ptr<base::Value> old_value;
- pref_store_contents->RemovePath(pref_path, &old_value);
- } else if (reset_state == WANTED_RESET) {
- UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceWantedReset",
- metadata.reporting_id, reporting_ids_count_);
- }
-
- if (value_state != PrefHashStore::UNCHANGED) {
- // Store the hash for the new value (whether it was reset or not).
- const base::Value* new_value = NULL;
- pref_store_contents->Get(pref_path, &new_value);
- pref_hash_store_->StoreHash(pref_path, new_value);
- }
+ it->second->EnforceAndReport(pref_store_contents);
}
// 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
@@ -158,8 +96,9 @@ void PrefHashFilter::FilterOnLoad(base::DictionaryValue* pref_store_contents) {
// 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) {
- if (tracked_paths_.find(path) != tracked_paths_.end())
- changed_paths_.insert(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
@@ -169,12 +108,13 @@ void PrefHashFilter::FilterSerializeData(
const base::DictionaryValue* pref_store_contents) {
if (!changed_paths_.empty()) {
base::TimeTicks checkpoint = base::TimeTicks::Now();
- for (std::set<std::string>::const_iterator it = changed_paths_.begin();
+ for (ChangedPathsMap::const_iterator it = changed_paths_.begin();
it != changed_paths_.end(); ++it) {
- const std::string& changed_path = *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);
- pref_hash_store_->StoreHash(changed_path, value);
+ changed_preference->OnNewValue(value);
}
changed_paths_.clear();
// TODO(gab): Remove this histogram by Feb 21 2014; after sufficient timing
« no previous file with comments | « chrome/browser/prefs/pref_hash_filter.h ('k') | chrome/browser/prefs/pref_hash_filter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698