| OLD | NEW |
| (Empty) |
| 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 COMPONENTS_RAPPOR_RAPPOR_PARAMETERS_H_ | |
| 6 #define COMPONENTS_RAPPOR_RAPPOR_PARAMETERS_H_ | |
| 7 | |
| 8 #include <string> | |
| 9 | |
| 10 namespace rappor { | |
| 11 | |
| 12 // Levels of noise added to a sample. | |
| 13 enum NoiseLevel { | |
| 14 NO_NOISE = 0, | |
| 15 NORMAL_NOISE, | |
| 16 SPARSE_NOISE, | |
| 17 NUM_NOISE_LEVELS, | |
| 18 }; | |
| 19 | |
| 20 // The type of data stored in a metric. | |
| 21 // Any use of the LOW_FREQUENCY types must be approved by Chrome Privacy and | |
| 22 // the rappor-dev team. | |
| 23 enum RapporType { | |
| 24 // Generic metrics from UMA opt-in users. | |
| 25 UMA_RAPPOR_TYPE = 0, | |
| 26 // Generic metrics for SafeBrowsing users. Deprecated, replaced by | |
| 27 // LOW_FREQUENCY_SAFEBROWSING_RAPPOR_TYPE. | |
| 28 SAFEBROWSING_RAPPOR_TYPE, | |
| 29 // Deprecated: Use UMA_RAPPOR_TYPE for new metrics | |
| 30 ETLD_PLUS_ONE_RAPPOR_TYPE, | |
| 31 // Type for low-frequency metrics from UMA opt-in users. | |
| 32 LOW_FREQUENCY_UMA_RAPPOR_TYPE, | |
| 33 // Type for low-frequency metrics from SafeBrowsing users. | |
| 34 LOW_FREQUENCY_SAFEBROWSING_RAPPOR_TYPE, | |
| 35 // Type for low-frequency metrics from UMA opt-in users. Do not use for new | |
| 36 // metrics. | |
| 37 LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, | |
| 38 NUM_RAPPOR_TYPES, | |
| 39 COARSE_RAPPOR_TYPE = SAFEBROWSING_RAPPOR_TYPE, | |
| 40 }; | |
| 41 | |
| 42 enum Probability { | |
| 43 PROBABILITY_100, // 100% | |
| 44 PROBABILITY_75, // 75% | |
| 45 PROBABILITY_50, // 50% | |
| 46 PROBABILITY_25, // 25% | |
| 47 PROBABILITY_0, // 0% | |
| 48 }; | |
| 49 | |
| 50 | |
| 51 // A metric is reported when its reporting group is in the set of groups | |
| 52 // passed in to RapporService::Start() | |
| 53 enum RecordingGroup { | |
| 54 // Metrics for UMA users. | |
| 55 UMA_RAPPOR_GROUP = 1 << 0, | |
| 56 // Metrics related to SafeBrowsing, for SafeBrowsing users. | |
| 57 SAFEBROWSING_RAPPOR_GROUP = 1 << 1, | |
| 58 }; | |
| 59 | |
| 60 | |
| 61 // An object describing noise probabilities for a noise level | |
| 62 struct NoiseParameters { | |
| 63 // The probability that a bit will be redacted with fake data. This | |
| 64 // corresponds to the F privacy parameter. | |
| 65 Probability fake_prob; | |
| 66 // The probability that a fake bit will be a one. | |
| 67 Probability fake_one_prob; | |
| 68 // The probability that a one bit in the redacted data reports as one. This | |
| 69 // corresponds to the Q privacy parameter | |
| 70 Probability one_coin_prob; | |
| 71 // The probability that a zero bit in the redacted data reports as one. This | |
| 72 // corresponds to the P privacy parameter. | |
| 73 Probability zero_coin_prob; | |
| 74 }; | |
| 75 | |
| 76 // An object describing a rappor metric and the parameters used to generate it. | |
| 77 // | |
| 78 // For a full description of the rappor metrics, see | |
| 79 // http://www.chromium.org/developers/design-documents/rappor | |
| 80 struct RapporParameters { | |
| 81 // Get a string representing the parameters, for DCHECK_EQ. | |
| 82 std::string ToString() const; | |
| 83 | |
| 84 // The maximum number of cohorts we divide clients into. | |
| 85 static const int kMaxCohorts; | |
| 86 | |
| 87 // The number of cohorts to divide the reports for this metric into. | |
| 88 // This should divide kMaxCohorts evenly so that each cohort has an equal | |
| 89 // probability of being assigned users. | |
| 90 int num_cohorts; | |
| 91 | |
| 92 // The number of bytes stored in the Bloom filter. | |
| 93 size_t bloom_filter_size_bytes; | |
| 94 // The number of hash functions used in the Bloom filter. | |
| 95 int bloom_filter_hash_function_count; | |
| 96 | |
| 97 // The level of noise to use. | |
| 98 NoiseLevel noise_level; | |
| 99 | |
| 100 // The reporting level this metric is reported at. | |
| 101 RecordingGroup recording_group; | |
| 102 }; | |
| 103 | |
| 104 namespace internal { | |
| 105 | |
| 106 const NoiseParameters kNoiseParametersForLevel[NUM_NOISE_LEVELS] = { | |
| 107 // NO_NOISE | |
| 108 { | |
| 109 rappor::PROBABILITY_0 /* Fake data probability */, | |
| 110 rappor::PROBABILITY_0 /* Fake one probability */, | |
| 111 rappor::PROBABILITY_100 /* One coin probability */, | |
| 112 rappor::PROBABILITY_0 /* Zero coin probability */, | |
| 113 }, | |
| 114 // NORMAL_NOISE | |
| 115 { | |
| 116 rappor::PROBABILITY_50 /* Fake data probability */, | |
| 117 rappor::PROBABILITY_50 /* Fake one probability */, | |
| 118 rappor::PROBABILITY_75 /* One coin probability */, | |
| 119 rappor::PROBABILITY_25 /* Zero coin probability */, | |
| 120 }, | |
| 121 // SPARSE_NOISE | |
| 122 { | |
| 123 rappor::PROBABILITY_25 /* Fake data probability */, | |
| 124 rappor::PROBABILITY_50 /* Fake one probability */, | |
| 125 rappor::PROBABILITY_75 /* One coin probability */, | |
| 126 rappor::PROBABILITY_25 /* Zero coin probability */, | |
| 127 }, | |
| 128 }; | |
| 129 | |
| 130 const RapporParameters kRapporParametersForType[NUM_RAPPOR_TYPES] = { | |
| 131 // UMA_RAPPOR_TYPE | |
| 132 {128 /* Num cohorts */, | |
| 133 4 /* Bloom filter size bytes */, | |
| 134 2 /* Bloom filter hash count */, | |
| 135 rappor::NORMAL_NOISE /* Noise level */, | |
| 136 UMA_RAPPOR_GROUP /* Recording group */}, | |
| 137 // SAFEBROWSING_RAPPOR_TYPE | |
| 138 {128 /* Num cohorts */, | |
| 139 1 /* Bloom filter size bytes */, | |
| 140 2 /* Bloom filter hash count */, | |
| 141 rappor::NORMAL_NOISE /* Noise level */, | |
| 142 SAFEBROWSING_RAPPOR_GROUP /* Recording group */}, | |
| 143 // ETLD_PLUS_ONE_RAPPOR_TYPE | |
| 144 {128 /* Num cohorts */, | |
| 145 16 /* Bloom filter size bytes */, | |
| 146 2 /* Bloom filter hash count */, | |
| 147 rappor::NORMAL_NOISE /* Noise level */, | |
| 148 UMA_RAPPOR_GROUP /* Recording group */}, | |
| 149 // LOW_FREQUENCY_UMA_RAPPOR_TYPE | |
| 150 {128 /* Num cohorts */, | |
| 151 4 /* Bloom filter size bytes */, | |
| 152 2 /* Bloom filter hash count */, | |
| 153 rappor::SPARSE_NOISE /* Noise level */, | |
| 154 UMA_RAPPOR_GROUP /* Recording group */}, | |
| 155 // LOW_FREQUENCY_SAFEBROWSING_RAPPOR_TYPE | |
| 156 {128 /* Num cohorts */, | |
| 157 1 /* Bloom filter size bytes */, | |
| 158 2 /* Bloom filter hash count */, | |
| 159 rappor::SPARSE_NOISE /* Noise level */, | |
| 160 SAFEBROWSING_RAPPOR_GROUP /* Recording group */}, | |
| 161 // LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE | |
| 162 {128 /* Num cohorts */, | |
| 163 16 /* Bloom filter size bytes */, | |
| 164 2 /* Bloom filter hash count */, | |
| 165 rappor::SPARSE_NOISE /* Noise level */, | |
| 166 UMA_RAPPOR_GROUP /* Recording group */}, | |
| 167 }; | |
| 168 | |
| 169 } // namespace internal | |
| 170 | |
| 171 } // namespace rappor | |
| 172 | |
| 173 #endif // COMPONENTS_RAPPOR_RAPPOR_PARAMETERS_H_ | |
| OLD | NEW |