Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_config.h |
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.h |
index 86471b0a33db38fc7922906eceb78ae2aa29b38f..7c05ed2ed0df68ca8883400dcc66fe7920c2a807 100644 |
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.h |
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config.h |
@@ -78,38 +78,6 @@ enum SecureProxyCheckFetchResult { |
SECURE_PROXY_CHECK_FETCH_RESULT_COUNT |
}; |
-// Values of the |lofi_status_|. |
-// Default state is |LOFI_STATUS_TEMPORARILY_OFF|. |
-enum LoFiStatus { |
- // Used if Lo-Fi is permanently off. |
- LOFI_STATUS_OFF = 0, |
- |
- // Used if Lo-Fi is disabled temporarily through direct or indirect user |
- // action. The state would be reset on next main frame request. |
- LOFI_STATUS_TEMPORARILY_OFF, |
- |
- // Used if Lo-Fi is enabled through flags. |
- LOFI_STATUS_ACTIVE_FROM_FLAGS, |
- |
- // Session is in Auto Lo-Fi Control group and the current conditions are |
- // suitable to use Lo-Fi "q=low" header. |
- LOFI_STATUS_ACTIVE_CONTROL, |
- |
- // Session is in Auto Lo-Fi Control group and the current conditions are |
- // not suitable to use Lo-Fi "q=low" header. |
- LOFI_STATUS_INACTIVE_CONTROL, |
- |
- // Session is in Auto Lo-Fi enabled group and the current conditions are |
- // suitable to use Lo-Fi "q=low" header. |
- LOFI_STATUS_ACTIVE, |
- |
- // Session is in Auto Lo-Fi enabled group and the current conditions are |
- // not suitable to use Lo-Fi "q=low" header. |
- LOFI_STATUS_INACTIVE, |
- |
- LOFI_STATUS_LAST = LOFI_STATUS_INACTIVE |
-}; |
- |
// Central point for holding the Data Reduction Proxy configuration. |
// This object lives on the IO thread and all of its methods are expected to be |
// called from there. |
@@ -213,28 +181,16 @@ class DataReductionProxyConfig |
// tied to whether the Data Reduction Proxy is enabled. |
bool promo_allowed() const; |
- // Returns the Lo-Fi status. |
- LoFiStatus GetLoFiStatus() const; |
- |
- // Returns true only if Lo-Fi "q=low" header should be added to the Chrome |
- // Proxy header. |
- // Should be called on all URL requests (main frame and non main frame). |
- bool ShouldUseLoFiHeaderForRequests() const; |
- |
- // Returns true if the session is in the Lo-Fi control experiment. This |
- // happens if user is in Control group, and connection is slow. |
- bool IsInLoFiActiveControlExperiment() const; |
- |
- // Sets |lofi_status_| to LOFI_STATUS_OFF. |
+ // Sets |lofi_off_| to true. |
void SetLoFiModeOff(); |
- // Updates |lofi_status_| based on the arguments provided and the current |
- // value of |lofi_status_|. |
- // |network_quality_estimator| may be NULL. |
- // Should be called only on main frame loads. |
- void UpdateLoFiStatusOnMainFrameRequest( |
- bool user_temporarily_disabled_lofi, |
- const net::NetworkQualityEstimator* network_quality_estimator); |
+ // Returns |lofi_off_|. |
+ bool lofi_off() const { return lofi_off_; } |
+ |
+ // Returns true when Lo-Fi mode should be activated. Records metrics for Lo-Fi |
+ // state changes. |request| is used to get the network quality estimator from |
+ // the URLRequestContext. |
+ bool ShouldEnableLoFiMode(const net::URLRequest& request); |
protected: |
// Virtualized for mocking. Records UMA containing the result of requesting |
@@ -269,11 +225,11 @@ class DataReductionProxyConfig |
FRIEND_TEST_ALL_PREFIXES(DataReductionProxyConfigTest, AutoLoFiAccuracy); |
// Values of the estimated network quality at the beginning of the most |
- // recent main frame request. |
- enum NetworkQualityAtLastMainFrameRequest { |
- NETWORK_QUALITY_AT_LAST_MAIN_FRAME_REQUEST_UNKNOWN, |
- NETWORK_QUALITY_AT_LAST_MAIN_FRAME_REQUEST_SLOW, |
- NETWORK_QUALITY_AT_LAST_MAIN_FRAME_REQUEST_NOT_SLOW |
+ // recent query of the Network Quality Estimator. |
+ enum NetworkQualityAtLastQuery { |
+ NETWORK_QUALITY_AT_LAST_QUERY_UNKNOWN, |
+ NETWORK_QUALITY_AT_LAST_QUERY_SLOW, |
+ NETWORK_QUALITY_AT_LAST_QUERY_NOT_SLOW |
}; |
// NetworkChangeNotifier::IPAddressObserver: |
@@ -314,27 +270,21 @@ class DataReductionProxyConfig |
bool is_https, |
base::TimeDelta* min_retry_delay) const; |
- // Returns true if this client is part of Lo-Fi enabled field trial. |
- // Virtualized for unit testing. |
- virtual bool IsIncludedInLoFiEnabledFieldTrial() const; |
- |
- // Returns true if this client is part of Lo-Fi control field trial. |
- // Virtualized for unit testing. |
- virtual bool IsIncludedInLoFiControlFieldTrial() const; |
+ // Returns true when Lo-Fi mode should be activated. Determines if Lo-Fi mode |
+ // should be activated by checking the Lo-Fi flags and if the network quality |
+ // is prohibitively slow. |network_quality_estimator| may be NULL. |
+ bool ShouldEnableLoFiModeInternal( |
+ const net::NetworkQualityEstimator* network_quality_estimator); |
// Returns true if expected throughput is lower than the one specified in the |
// Auto Lo-Fi field trial parameters OR if the expected round trip time is |
// higher than the one specified in the Auto Lo-Fi field trial parameters. |
// |network_quality_estimator| may be NULL. |
- // Virtualized for unit testing. Should be called only on main frame loads. |
+ // Virtualized for unit testing. |
virtual bool IsNetworkQualityProhibitivelySlow( |
const net::NetworkQualityEstimator* network_quality_estimator); |
- // Returns true only if Lo-Fi "q=low" header should be added to the Chrome |
- // Proxy header based on the value of |lofi_status|. |
- static bool ShouldUseLoFiHeaderForRequests(LoFiStatus lofi_status); |
- |
- // Records Lo-Fi accuracy metric. Should be called only on main frame loads. |
+ // Records Lo-Fi accuracy metric. |
void RecordAutoLoFiAccuracyRate( |
const net::NetworkQualityEstimator* network_quality_estimator) const; |
@@ -379,31 +329,36 @@ class DataReductionProxyConfig |
// duration shorter than |auto_lofi_hysteresis_|. |
base::TimeDelta auto_lofi_hysteresis_; |
- // Time when the network quality was last updated. |
- base::TimeTicks network_quality_last_updated_; |
+ // Time when the network quality was last checked. |
+ base::TimeTicks network_quality_last_checked_; |
// True iff the network was determined to be prohibitively slow when the |
- // network quality was last updated. This happens on main frame request, and |
- // not more than once in any window of duration shorter than |
- // |auto_lofi_hysteresis_|. |
+ // network quality was last updated. This happens on when the network quality |
+ // was last checked, and not more than once in any window of duration shorter |
+ // than |auto_lofi_hysteresis_|. |
bool network_prohibitively_slow_; |
// Set to the connection type reported by NetworkChangeNotifier when the |
- // network quality was last updated (most recent main frame request). |
+ // network quality was last checked. |
net::NetworkChangeNotifier::ConnectionType connection_type_; |
- // Current Lo-Fi status. |
- // The value changes only on main frame load. |
- LoFiStatus lofi_status_; |
+ // If true, Lo-Fi is turned off for the rest of the session. This is set to |
+ // true if Lo-Fi is disabled via flags or if the user implicitly opts out. |
+ bool lofi_off_; |
+ |
+ // Timestamp when the most recent query of the Network Quality Estimator |
+ // happened. |
+ base::TimeTicks last_query_; |
- // Timestamp when the most recent main frame request started. |
- base::TimeTicks last_main_frame_request_; |
+ // Holds the estimated network quality at the last query of the estimator. |
+ // This should be used only for the purpose of recording Lo-Fi accuracy UMA. |
+ NetworkQualityAtLastQuery network_quality_at_last_query_; |
- // Holds the estimated network quality at the beginning of the most recent |
- // main frame request. This should be used only for the purpose of recording |
- // Lo-Fi accuracy UMA. |
- NetworkQualityAtLastMainFrameRequest |
- network_quality_at_last_main_frame_request_; |
+ // True if the previous state of Lo-Fi was on, so that change in Lo-Fi status |
+ // can be recorded properly. This is not recorded for the control group, |
+ // because it is only used to report changes in request headers, and the |
+ // request headers are never modified in the control group. |
+ bool previous_state_lofi_on_; |
DISALLOW_COPY_AND_ASSIGN(DataReductionProxyConfig); |
}; |