diff options
Diffstat (limited to 'chrome/browser/metrics/metrics_service.cc')
-rw-r--r-- | chrome/browser/metrics/metrics_service.cc | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc index 61a42b9..d89c9cb 100644 --- a/chrome/browser/metrics/metrics_service.cc +++ b/chrome/browser/metrics/metrics_service.cc @@ -185,6 +185,7 @@ #include "chrome/common/chrome_notification_types.h" #include "chrome/common/chrome_result_codes.h" #include "chrome/common/chrome_switches.h" +#include "chrome/common/metrics/entropy_provider.h" #include "chrome/common/metrics/metrics_log_manager.h" #include "chrome/common/net/test_server_locations.h" #include "chrome/common/pref_names.h" @@ -274,12 +275,12 @@ ResponseStatus ResponseCodeToStatus(int response_code) { // The argument used to generate a non-identifying entropy source. We want no // more than 13 bits of entropy, so use this max to return a number between 1 // and 2^13 = 8192 as the entropy source. -const uint32 kMaxEntropySize = (1 << 13); +const uint32 kMaxLowEntropySize = (1 << 13); // Generates a new non-identifying entropy source used to seed persistent // activities. int GenerateLowEntropySource() { - return base::RandInt(1, kMaxEntropySize); + return base::RandInt(0, kMaxLowEntropySize - 1); } // Converts an exit code into something that can be inserted into our @@ -344,7 +345,7 @@ std::vector<int> GetAllCrashExitCodes() { return codes; } -} +} // namespace // static MetricsService::ShutdownCleanliness MetricsService::clean_shutdown_status_ = @@ -539,7 +540,8 @@ std::string MetricsService::GetClientId() { return client_id_; } -std::string MetricsService::GetEntropySource(bool reporting_will_be_enabled) { +scoped_ptr<const base::FieldTrial::EntropyProvider> + MetricsService::CreateEntropyProvider(bool reporting_will_be_enabled) { // For metrics reporting-enabled users, we combine the client ID and low // entropy source to get the final entropy source. Otherwise, only use the low // entropy source. @@ -547,17 +549,22 @@ std::string MetricsService::GetEntropySource(bool reporting_will_be_enabled) { // 1) It makes the entropy source less identifiable for parties that do not // know the low entropy source. // 2) It makes the final entropy source resettable. - std::string low_entropy_source = base::IntToString(GetLowEntropySource()); if (reporting_will_be_enabled) { if (entropy_source_returned_ == LAST_ENTROPY_NONE) entropy_source_returned_ = LAST_ENTROPY_HIGH; DCHECK_EQ(LAST_ENTROPY_HIGH, entropy_source_returned_); - return client_id_ + low_entropy_source; + const std::string high_entropy_source = + client_id_ + base::IntToString(GetLowEntropySource()); + return scoped_ptr<const base::FieldTrial::EntropyProvider>( + new metrics::SHA1EntropyProvider(high_entropy_source)); } + if (entropy_source_returned_ == LAST_ENTROPY_NONE) entropy_source_returned_ = LAST_ENTROPY_LOW; DCHECK_EQ(LAST_ENTROPY_LOW, entropy_source_returned_); - return low_entropy_source; + return scoped_ptr<const base::FieldTrial::EntropyProvider>( + new metrics::PermutedEntropyProvider(GetLowEntropySource(), + kMaxLowEntropySize)); } void MetricsService::ForceClientIdCreation() { |