Home | History | Annotate | Download | only in tracked
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/prefs/tracked/tracked_preference_helper.h"
      6 
      7 #include "base/logging.h"
      8 #include "base/metrics/histogram.h"
      9 
     10 TrackedPreferenceHelper::TrackedPreferenceHelper(
     11     const std::string& pref_path,
     12     size_t reporting_id,
     13     size_t reporting_ids_count,
     14     PrefHashFilter::EnforcementLevel enforcement_level)
     15     : pref_path_(pref_path),
     16       reporting_id_(reporting_id), reporting_ids_count_(reporting_ids_count),
     17       enforce_(enforcement_level == PrefHashFilter::ENFORCE_ON_LOAD) {
     18 }
     19 
     20 TrackedPreferenceHelper::ResetAction TrackedPreferenceHelper::GetAction(
     21     PrefHashStoreTransaction::ValueState value_state) const {
     22   switch (value_state) {
     23     case PrefHashStoreTransaction::UNCHANGED:
     24       // Desired case, nothing to do.
     25       return DONT_RESET;
     26     case PrefHashStoreTransaction::CLEARED:
     27       // Unfortunate case, but there is nothing we can do.
     28       return DONT_RESET;
     29     case PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE:
     30       // It is okay to seed the hash in this case.
     31       return DONT_RESET;
     32     case PrefHashStoreTransaction::SECURE_LEGACY:
     33       // Accept secure legacy device ID based hashes.
     34       return DONT_RESET;
     35     case PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE:  // Falls through.
     36     case PrefHashStoreTransaction::CHANGED:
     37       return enforce_ ? DO_RESET : WANTED_RESET;
     38   }
     39   NOTREACHED() << "Unexpected PrefHashStoreTransaction::ValueState: "
     40                << value_state;
     41   return DONT_RESET;
     42 }
     43 
     44 void TrackedPreferenceHelper::ReportValidationResult(
     45     PrefHashStoreTransaction::ValueState value_state) const {
     46   switch (value_state) {
     47     case PrefHashStoreTransaction::UNCHANGED:
     48       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceUnchanged",
     49                                 reporting_id_, reporting_ids_count_);
     50       return;
     51     case PrefHashStoreTransaction::CLEARED:
     52       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceCleared",
     53                                 reporting_id_, reporting_ids_count_);
     54       return;
     55     case PrefHashStoreTransaction::SECURE_LEGACY:
     56       UMA_HISTOGRAM_ENUMERATION(
     57           "Settings.TrackedPreferenceMigratedLegacyDeviceId", reporting_id_,
     58           reporting_ids_count_);
     59       return;
     60     case PrefHashStoreTransaction::CHANGED:
     61       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceChanged",
     62                                 reporting_id_, reporting_ids_count_);
     63       return;
     64     case PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE:
     65       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceInitialized",
     66                                 reporting_id_, reporting_ids_count_);
     67       return;
     68     case PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE:
     69       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceTrustedInitialized",
     70                                 reporting_id_, reporting_ids_count_);
     71       return;
     72   }
     73   NOTREACHED() << "Unexpected PrefHashStoreTransaction::ValueState: "
     74                << value_state;
     75 }
     76 
     77 void TrackedPreferenceHelper::ReportAction(ResetAction reset_action) const {
     78   switch (reset_action) {
     79     case DONT_RESET:
     80       // No report for DONT_RESET.
     81       break;
     82     case WANTED_RESET:
     83       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceWantedReset",
     84                                 reporting_id_, reporting_ids_count_);
     85       break;
     86     case DO_RESET:
     87       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceReset",
     88                                 reporting_id_, reporting_ids_count_);
     89       break;
     90   }
     91 }
     92 
     93 void TrackedPreferenceHelper::ReportSplitPreferenceChangedCount(
     94     size_t count) const {
     95   // The histogram below is an expansion of the UMA_HISTOGRAM_COUNTS_100 macro
     96   // adapted to allow for a dynamically suffixed histogram name.
     97   // Note: The factory creates and owns the histogram.
     98   base::HistogramBase* histogram =
     99       base::LinearHistogram::FactoryGet(
    100           "Settings.TrackedSplitPreferenceChanged." + pref_path_,
    101           1,
    102           100,  // Allow counts up to 100.
    103           101,
    104           base::HistogramBase::kUmaTargetedHistogramFlag);
    105   histogram->Add(count);
    106 }
    107