Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(170)

Unified Diff: components/data_reduction_proxy/core/browser/data_reduction_proxy_config.h

Issue 1363673004: [DRP] Consistently use LoFi for an entire page (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nits and test fixes Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 46a301c7b2e3b37f46648e05f6d12e0b75a60e19..6fa71c5f5d472b31456b582518203f70ef517c84 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,24 +181,17 @@ 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;
-
- // 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 the Lo-Fi "q=low" directive should be added to the Chrome
+ // Proxy header or when the user is in the Lo-Fi "Control" group and the
bengr 2015/10/03 00:01:29 Chrome-Proxy Also, I would say less about how the
megjablon 2015/10/05 20:22:58 Done.
+ // network quality is prohibitively slow. Records metrics for Lo-Fi state
+ // changes.
+ bool ShouldEnableLoFiMode(const net::URLRequest& request);
protected:
// Virtualized for mocking. Records UMA containing the result of requesting
@@ -265,11 +226,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:
@@ -310,27 +271,22 @@ 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 the Lo-Fi "q=low" directive should be added to the Chrome
bengr 2015/10/03 00:01:29 I would get away from the mechanics.
megjablon 2015/10/05 20:22:58 Done.
+ // Proxy header or when the user is in the Lo-Fi "Control" group and 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;
@@ -375,31 +331,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_;
+ // Store 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);
};

Powered by Google App Engine
This is Rietveld 408576698