Index: chrome/browser/metrics/variations/variations_service.cc |
diff --git a/chrome/browser/metrics/variations/variations_service.cc b/chrome/browser/metrics/variations/variations_service.cc |
index 82b751050c7f361dc0c06ddddebff08bb3699da9..6ebfc021205640497322d3ac774c8fcdc17854cd 100644 |
--- a/chrome/browser/metrics/variations/variations_service.cc |
+++ b/chrome/browser/metrics/variations/variations_service.cc |
@@ -25,6 +25,7 @@ |
#include "net/base/load_flags.h" |
#include "net/base/network_change_notifier.h" |
#include "net/http/http_response_headers.h" |
+#include "net/http/http_status_code.h" |
#include "net/http/http_util.h" |
#include "net/url_request/url_fetcher.h" |
#include "net/url_request/url_request_status.h" |
@@ -41,6 +42,10 @@ const int kMaxRetrySeedFetch = 5; |
// Time between seed fetches, in hours. |
const int kSeedFetchPeriodHours = 5; |
+// TODO(mad): To be removed when we stop updating the NetworkTimeTracker. |
+// For the HTTP date headers, the resolution of the server time is 1 second. |
+const int64 kServerTimeResolutionMs = 1000; |
+ |
// Maps Study_Channel enum values to corresponding chrome::VersionInfo::Channel |
// enum values. |
chrome::VersionInfo::Channel ConvertStudyChannelToVersionChannel( |
@@ -187,6 +192,11 @@ void VariationsService::StartRepeatedVariationsSeedFetch() { |
this, &VariationsService::FetchVariationsSeed); |
} |
+bool VariationsService::GetNetworkTime(base::Time* network_time, |
+ base::TimeDelta* uncertainty) const { |
+ return network_time_tracker_.GetNetworkTime(network_time, uncertainty); |
+} |
+ |
#if defined(OS_WIN) |
void VariationsService::StartGoogleUpdateRegistrySync() { |
registry_syncer_.RequestRegistrySync(); |
@@ -256,17 +266,30 @@ void VariationsService::OnURLFetchComplete(const net::URLFetcher* source) { |
} |
// Log the response code. |
+ const int response_code = request->GetResponseCode(); |
UMA_HISTOGRAM_CUSTOM_ENUMERATION("Variations.SeedFetchResponseCode", |
- net::HttpUtil::MapStatusCodeForHistogram(request->GetResponseCode()), |
+ net::HttpUtil::MapStatusCodeForHistogram(response_code), |
net::HttpUtil::GetStatusCodesForHistogram()); |
const base::TimeDelta latency = |
base::TimeTicks::Now() - last_request_started_time_; |
- if (request->GetResponseCode() != 200) { |
- DVLOG(1) << "Variations server request returned non-200 response code: " |
- << request->GetResponseCode(); |
- if (request->GetResponseCode() == 304) |
+ base::Time response_date; |
+ if (response_code == net::HTTP_OK || |
+ response_code == net::HTTP_NOT_MODIFIED) { |
+ bool success = request->GetResponseHeaders()->GetDateValue(&response_date); |
+ DCHECK(success || response_date.is_null()); |
+ |
+ if (!response_date.is_null()) { |
+ network_time_tracker_.UpdateNetworkTime( |
+ response_date, |
+ base::TimeDelta::FromMilliseconds(kServerTimeResolutionMs), |
+ latency); |
+ } |
+ } else if (response_code != net::HTTP_OK) { |
+ DVLOG(1) << "Variations server request returned non-HTTP_OK response code: " |
+ << response_code; |
+ if (response_code == net::HTTP_NOT_MODIFIED) |
UMA_HISTOGRAM_MEDIUM_TIMES("Variations.FetchNotModifiedLatency", latency); |
else |
UMA_HISTOGRAM_MEDIUM_TIMES("Variations.FetchOtherLatency", latency); |
@@ -278,10 +301,6 @@ void VariationsService::OnURLFetchComplete(const net::URLFetcher* source) { |
bool success = request->GetResponseAsString(&seed_data); |
DCHECK(success); |
- base::Time response_date; |
- success = request->GetResponseHeaders()->GetDateValue(&response_date); |
- DCHECK(success || response_date.is_null()); |
- |
StoreSeedData(seed_data, response_date, g_browser_process->local_state()); |
} |