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 #ifndef CHROME_BROWSER_PREFS_TRACKED_TRACKED_PREFERENCE_HELPER_H_
      6 #define CHROME_BROWSER_PREFS_TRACKED_TRACKED_PREFERENCE_HELPER_H_
      7 
      8 #include <string>
      9 
     10 #include "base/macros.h"
     11 #include "chrome/browser/prefs/pref_hash_filter.h"
     12 #include "chrome/browser/prefs/pref_hash_store_transaction.h"
     13 
     14 // A TrackedPreferenceHelper is a helper class for TrackedPreference which
     15 // handles decision making and reporting for TrackedPreference's
     16 // implementations.
     17 class TrackedPreferenceHelper {
     18  public:
     19   enum ResetAction {
     20     DONT_RESET,
     21     // WANTED_RESET is reported when DO_RESET would have been reported but the
     22     // current |enforcement_level| doesn't allow a reset for the detected state.
     23     WANTED_RESET,
     24     DO_RESET,
     25   };
     26 
     27   TrackedPreferenceHelper(const std::string& pref_path,
     28                           size_t reporting_id,
     29                           size_t reporting_ids_count,
     30                           PrefHashFilter::EnforcementLevel enforcement_level);
     31 
     32   // Returns a ResetAction stating whether a reset is desired (DO_RESET) or not
     33   // (DONT_RESET) based on observing |value_state|. Can also return WANTED_RESET
     34   // if a reset would have been desired but the current |enforcement_level|
     35   // doesn't allow it.
     36   ResetAction GetAction(
     37       PrefHashStoreTransaction::ValueState value_state) const;
     38 
     39   // Reports |value_state| via UMA under |reporting_id_|.
     40   void ReportValidationResult(
     41       PrefHashStoreTransaction::ValueState value_state) const;
     42 
     43   // Reports |reset_action| via UMA under |reporting_id_|.
     44   void ReportAction(ResetAction reset_action) const;
     45 
     46   // Reports, via UMA, the |count| of split preference entries that were
     47   // considered invalid in a CHANGED event.
     48   void ReportSplitPreferenceChangedCount(size_t count) const;
     49 
     50  private:
     51   const std::string pref_path_;
     52 
     53   const size_t reporting_id_;
     54   const size_t reporting_ids_count_;
     55 
     56   // Deny setting changes and hash seeding/migration.
     57   const bool enforce_;
     58 
     59   DISALLOW_COPY_AND_ASSIGN(TrackedPreferenceHelper);
     60 };
     61 
     62 #endif  // CHROME_BROWSER_PREFS_TRACKED_TRACKED_PREFERENCE_HELPER_H_
     63