Upstream version 6.35.121.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / prefs / tracked / tracked_preference_helper.cc
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 }