Index: components/ssl_errors/error_classification.cc |
diff --git a/components/ssl_errors/error_classification.cc b/components/ssl_errors/error_classification.cc |
index 579c5cc01501cad0761378beb91ecf3674f7b11a..f69a623947b0b06da8107c4bb978891169312ca3 100644 |
--- a/components/ssl_errors/error_classification.cc |
+++ b/components/ssl_errors/error_classification.cc |
@@ -38,6 +38,26 @@ using base::TimeDelta; |
namespace ssl_errors { |
namespace { |
+// Describes the result of getting network time and if it was |
+// unavailable, why it was unavailable. This enum is being histogrammed |
+// so do not reorder or remove values. |
+enum NetworkClockState { |
+ // The clock state relative to network time is unknown because the |
+ // NetworkTimeTracker has no information from the network. |
+ NETWORK_CLOCK_STATE_UNKNOWN_NO_SYNC = 0, |
+ // The clock state relative to network time is unknown because the |
+ // user's clock has fallen out of sync with the latest information |
+ // from the network (due to e.g. suspend/resume). |
+ NETWORK_CLOCK_STATE_UNKNOWN_SYNC_LOST, |
+ // The clock is "close enough" to the network time. |
+ NETWORK_CLOCK_STATE_OK, |
+ // The clock is in the past relative to network time. |
+ NETWORK_CLOCK_STATE_PAST, |
+ // The clock is in the future relative to network time. |
+ NETWORK_CLOCK_STATE_FUTURE, |
+ NETWORK_CLOCK_STATE_MAX |
+}; |
+ |
// Events for UMA. Do not reorder or change! |
enum SSLInterstitialCause { |
CLOCK_PAST, |
@@ -207,15 +227,25 @@ ClockState GetClockState( |
base::Time now_network; |
base::TimeDelta uncertainty; |
const base::TimeDelta kNetworkTimeFudge = base::TimeDelta::FromMinutes(5); |
- ClockState network_state = CLOCK_STATE_UNKNOWN; |
- if (network_time_tracker->GetNetworkTime(&now_network, &uncertainty)) { |
- if (now_system < now_network - uncertainty - kNetworkTimeFudge) { |
- network_state = CLOCK_STATE_PAST; |
- } else if (now_system > now_network + uncertainty + kNetworkTimeFudge) { |
- network_state = CLOCK_STATE_FUTURE; |
- } else { |
- network_state = CLOCK_STATE_OK; |
- } |
+ NetworkClockState network_state = NETWORK_CLOCK_STATE_MAX; |
+ network_time::NetworkTimeTracker::NetworkTimeResult network_time_result = |
+ network_time_tracker->GetNetworkTime(&now_network, &uncertainty); |
+ switch (network_time_result) { |
+ case network_time::NetworkTimeTracker::NETWORK_TIME_AVAILABLE: |
+ if (now_system < now_network - uncertainty - kNetworkTimeFudge) { |
+ network_state = NETWORK_CLOCK_STATE_PAST; |
+ } else if (now_system > now_network + uncertainty + kNetworkTimeFudge) { |
+ network_state = NETWORK_CLOCK_STATE_FUTURE; |
mab
2016/08/16 19:04:52
I'm not sure how to fix this, but it sounds a bit
estark
2016/08/18 12:15:11
Changed it to NETWORK_CLOCK_STATE_CLOCK_IN_FUTURE
mab
2016/08/19 01:51:07
_DINOSAURS and _FLYING_CARS?
|
+ } else { |
+ network_state = NETWORK_CLOCK_STATE_OK; |
+ } |
+ break; |
+ case network_time::NetworkTimeTracker::NETWORK_TIME_SYNC_LOST: |
+ network_state = NETWORK_CLOCK_STATE_UNKNOWN_SYNC_LOST; |
+ break; |
+ case network_time::NetworkTimeTracker::NETWORK_TIME_NO_SYNC: |
+ network_state = NETWORK_CLOCK_STATE_UNKNOWN_NO_SYNC; |
+ break; |
} |
ClockState build_time_state = CLOCK_STATE_UNKNOWN; |
@@ -228,13 +258,28 @@ ClockState GetClockState( |
build_time_state = CLOCK_STATE_FUTURE; |
} |
- UMA_HISTOGRAM_ENUMERATION("interstitial.ssl.clockstate.network", |
- network_state, CLOCK_STATE_MAX); |
+ UMA_HISTOGRAM_ENUMERATION("interstitial.ssl.clockstate.network2", |
+ network_time_result, NETWORK_CLOCK_STATE_MAX); |
UMA_HISTOGRAM_ENUMERATION("interstitial.ssl.clockstate.build_time", |
build_time_state, CLOCK_STATE_MAX); |
- return network_state == CLOCK_STATE_UNKNOWN ? build_time_state |
- : network_state; |
+ switch (network_state) { |
+ case NETWORK_CLOCK_STATE_UNKNOWN_NO_SYNC: |
+ case NETWORK_CLOCK_STATE_UNKNOWN_SYNC_LOST: |
+ return build_time_state; |
+ case NETWORK_CLOCK_STATE_OK: |
+ return CLOCK_STATE_OK; |
+ case NETWORK_CLOCK_STATE_PAST: |
+ return CLOCK_STATE_PAST; |
+ case NETWORK_CLOCK_STATE_FUTURE: |
+ return CLOCK_STATE_FUTURE; |
+ case NETWORK_CLOCK_STATE_MAX: |
+ NOTREACHED(); |
+ return CLOCK_STATE_UNKNOWN; |
+ } |
+ |
+ NOTREACHED(); |
+ return CLOCK_STATE_UNKNOWN; |
} |
void SetBuildTimeForTesting(const base::Time& testing_time) { |