| Index: chrome/browser/prefs/tracked/tracked_preference_helper.cc
|
| diff --git a/chrome/browser/prefs/tracked/tracked_preference_helper.cc b/chrome/browser/prefs/tracked/tracked_preference_helper.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..422fcaf0ec2e77a2e09ff82d58b2f1fd465655e2
|
| --- /dev/null
|
| +++ b/chrome/browser/prefs/tracked/tracked_preference_helper.cc
|
| @@ -0,0 +1,106 @@
|
| +// 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/tracked_preference_helper.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/metrics/histogram.h"
|
| +
|
| +TrackedPreferenceHelper::TrackedPreferenceHelper(
|
| + const std::string& pref_path,
|
| + size_t reporting_id,
|
| + size_t reporting_ids_count,
|
| + PrefHashFilter::EnforcementLevel enforcement_level)
|
| + : pref_path_(pref_path),
|
| + reporting_id_(reporting_id), reporting_ids_count_(reporting_ids_count),
|
| + allow_changes_(enforcement_level < PrefHashFilter::ENFORCE),
|
| + allow_seeding_(enforcement_level < PrefHashFilter::ENFORCE_NO_SEEDING),
|
| + allow_migration_(enforcement_level <
|
| + PrefHashFilter::ENFORCE_NO_SEEDING_NO_MIGRATION) {
|
| +}
|
| +
|
| +TrackedPreferenceHelper::ResetAction TrackedPreferenceHelper::GetAction(
|
| + PrefHashStore::ValueState value_state) const {
|
| + switch (value_state) {
|
| + case PrefHashStore::UNCHANGED:
|
| + // Desired case, nothing to do.
|
| + return DONT_RESET;
|
| + case PrefHashStore::CLEARED:
|
| + // Unfortunate case, but there is nothing we can do.
|
| + return DONT_RESET;
|
| + case PrefHashStore::TRUSTED_UNKNOWN_VALUE:
|
| + // It is okay to seed the hash in this case.
|
| + return DONT_RESET;
|
| + case PrefHashStore::MIGRATED:
|
| + return allow_migration_ ? WANTED_RESET : DO_RESET;
|
| + case PrefHashStore::UNTRUSTED_UNKNOWN_VALUE:
|
| + return allow_seeding_ ? WANTED_RESET : DO_RESET;
|
| + case PrefHashStore::CHANGED:
|
| + return allow_changes_ ? WANTED_RESET : DO_RESET;
|
| + }
|
| + NOTREACHED() << "Unexpected PrefHashStore::ValueState: " << value_state;
|
| + return DONT_RESET;
|
| +}
|
| +
|
| +void TrackedPreferenceHelper::ReportValidationResult(
|
| + PrefHashStore::ValueState value_state) const {
|
| + switch (value_state) {
|
| + case PrefHashStore::UNCHANGED:
|
| + UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceUnchanged",
|
| + reporting_id_, reporting_ids_count_);
|
| + return;
|
| + case PrefHashStore::CLEARED:
|
| + UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceCleared",
|
| + reporting_id_, reporting_ids_count_);
|
| + return;
|
| + case PrefHashStore::MIGRATED:
|
| + UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceMigrated",
|
| + reporting_id_, reporting_ids_count_);
|
| + return;
|
| + case PrefHashStore::CHANGED:
|
| + UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceChanged",
|
| + reporting_id_, reporting_ids_count_);
|
| + return;
|
| + case PrefHashStore::UNTRUSTED_UNKNOWN_VALUE:
|
| + UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceInitialized",
|
| + reporting_id_, reporting_ids_count_);
|
| + return;
|
| + case PrefHashStore::TRUSTED_UNKNOWN_VALUE:
|
| + UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceTrustedInitialized",
|
| + reporting_id_, reporting_ids_count_);
|
| + return;
|
| + }
|
| + NOTREACHED() << "Unexpected PrefHashStore::ValueState: " << value_state;
|
| +}
|
| +
|
| +void TrackedPreferenceHelper::ReportAction(ResetAction reset_action) const {
|
| + switch (reset_action) {
|
| + case DONT_RESET:
|
| + // No report for DONT_RESET.
|
| + break;
|
| + case WANTED_RESET:
|
| + UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceWantedReset",
|
| + reporting_id_, reporting_ids_count_);
|
| + break;
|
| + case DO_RESET:
|
| + UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceReset",
|
| + reporting_id_, reporting_ids_count_);
|
| + break;
|
| + }
|
| +}
|
| +
|
| +void TrackedPreferenceHelper::ReportSplitPreferenceChangedCount(
|
| + size_t count) const {
|
| + // The histogram below is an expansion of the UMA_HISTOGRAM_COUNTS_100 macro
|
| + // adapted to allow for a dynamically suffixed histogram name.
|
| + // Note: The factory creates and owns the histogram.
|
| + base::HistogramBase* histogram =
|
| + base::LinearHistogram::FactoryGet(
|
| + "Settings.TrackedSplitPreferenceChanged." + pref_path_,
|
| + 1,
|
| + 100, // Allow counts up to 100.
|
| + 101,
|
| + base::HistogramBase::kUmaTargetedHistogramFlag);
|
| + histogram->Add(count);
|
| +}
|
|
|