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 16namespace 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 26class 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