Index: chrome/browser/metrics/metrics_service.cc |
=================================================================== |
--- chrome/browser/metrics/metrics_service.cc (revision 152812) |
+++ chrome/browser/metrics/metrics_service.cc (working copy) |
@@ -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 @@ |
// 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 @@ |
return codes; |
} |
-} |
+} // namespace |
// static |
MetricsService::ShutdownCleanliness MetricsService::clean_shutdown_status_ = |
@@ -539,7 +540,8 @@ |
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 @@ |
// 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() { |