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_METRIC_H_ 6 #define COMPONENTS_RAPPOR_RAPPOR_METRIC_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/macros.h" 12 #include "components/rappor/bloom_filter.h" 13 #include "components/rappor/byte_vector_utils.h" 14 #include "components/rappor/rappor_parameters.h" 15 16 namespace rappor { 17 18 // A RapporMetric is an object that collects string samples into a Bloom filter, 19 // and generates randomized reports about the collected data. 20 // 21 // This class should not be used directly by metrics clients. Record metrics 22 // using RapporService::RecordSample instead. 23 // 24 // For a full description of the rappor metrics, see 25 // http://www.chromium.org/developers/design-documents/rappor 26 class RapporMetric { 27 public: 28 // Takes the |metric_name| that this will be reported to the server with, 29 // a |parameters| describing size and probability weights used in recording 30 // this metric, and a |cohort| value, which determines the hash functions 31 // used in the Bloom filter. 32 RapporMetric(const std::string& metric_name, 33 const RapporParameters& parameters, 34 int32_t cohort); 35 ~RapporMetric(); 36 37 // Records an additional sample in the Bloom filter. 38 void AddSample(const std::string& str); 39 40 // Retrieves the current Bloom filter bits. 41 const ByteVector& bytes() const { return bloom_filter_.bytes(); } 42 43 // Gets the parameter values this metric was constructed with. 44 const RapporParameters& parameters() const { return parameters_; } 45 46 // Generates the bits to report for this metric. Using the secret as a seed, 47 // randomly selects bits for redaction. Then flips coins to generate the 48 // final report bits. 49 ByteVector GetReport(const std::string& secret) const; 50 51 private: 52 const std::string metric_name_; 53 const RapporParameters parameters_; 54 BloomFilter bloom_filter_; 55 56 DISALLOW_COPY_AND_ASSIGN(RapporMetric); 57 }; 58 59 } // namespace rappor 60 61 #endif // COMPONENTS_RAPPOR_RAPPOR_METRIC_H_ 62