| 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() {
|
|
|