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::WEAK_LEGACY:  // Falls through.
     36     case PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE:  // Falls through.
     37     case PrefHashStoreTransaction::CHANGED:
     38       return enforce_ ? DO_RESET : WANTED_RESET;
     39   }
     40   NOTREACHED() << "Unexpected PrefHashStoreTransaction::ValueState: "
     41                << value_state;
     42   return DONT_RESET;
     43 }
     44 
     45 void TrackedPreferenceHelper::ReportValidationResult(
     46     PrefHashStoreTransaction::ValueState value_state) const {
     47   switch (value_state) {
     48     case PrefHashStoreTransaction::UNCHANGED:
     49       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceUnchanged",
     50                                 reporting_id_, reporting_ids_count_);
     51       return;
     52     case PrefHashStoreTransaction::CLEARED:
     53       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceCleared",
     54                                 reporting_id_, reporting_ids_count_);
     55       return;
     56     case PrefHashStoreTransaction::WEAK_LEGACY:
     57       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceMigrated",
     58                                 reporting_id_, reporting_ids_count_);
     59       return;
     60     case PrefHashStoreTransaction::SECURE_LEGACY:
     61       UMA_HISTOGRAM_ENUMERATION(
     62           "Settings.TrackedPreferenceMigratedLegacyDeviceId", reporting_id_,
     63           reporting_ids_count_);
     64       return;
     65     case PrefHashStoreTransaction::CHANGED:
     66       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceChanged",
     67                                 reporting_id_, reporting_ids_count_);
     68       return;
     69     case PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE:
     70       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceInitialized",
     71                                 reporting_id_, reporting_ids_count_);
     72       return;
     73     case PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE:
     74       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceTrustedInitialized",
     75                                 reporting_id_, reporting_ids_count_);
     76       return;
     77   }
     78   NOTREACHED() << "Unexpected PrefHashStoreTransaction::ValueState: "
     79                << value_state;
     80 }
     81 
     82 void TrackedPreferenceHelper::ReportAction(ResetAction reset_action) const {
     83   switch (reset_action) {
     84     case DONT_RESET:
     85       // No report for DONT_RESET.
     86       break;
     87     case WANTED_RESET:
     88       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceWantedReset",
     89                                 reporting_id_, reporting_ids_count_);
     90       break;
     91     case DO_RESET:
     92       UMA_HISTOGRAM_ENUMERATION("Settings.TrackedPreferenceReset",
     93                                 reporting_id_, reporting_ids_count_);
     94       break;
     95   }
     96 }
     97 
     98 void TrackedPreferenceHelper::ReportSplitPreferenceChangedCount(
     99     size_t count) const {
    100   // The histogram below is an expansion of the UMA_HISTOGRAM_COUNTS_100 macro
    101   // adapted to allow for a dynamically suffixed histogram name.
    102   // Note: The factory creates and owns the histogram.
    103   base::HistogramBase* histogram =
    104       base::LinearHistogram::FactoryGet(
    105           "Settings.TrackedSplitPreferenceChanged." + pref_path_,
    106           1,
    107           100,  // Allow counts up to 100.
    108           101,
    109           base::HistogramBase::kUmaTargetedHistogramFlag);
    110   histogram->Add(count);
    111 }
    112