| Index: chrome/browser/net/spdyproxy/data_reduction_proxy_settings.h
|
| diff --git a/chrome/browser/net/spdyproxy/data_reduction_proxy_settings.h b/chrome/browser/net/spdyproxy/data_reduction_proxy_settings.h
|
| index f066d661713d4b39fbef8b3e680667d43f6546dc..3f003da2f81ad2727645b4a330b9083daee7139e 100644
|
| --- a/chrome/browser/net/spdyproxy/data_reduction_proxy_settings.h
|
| +++ b/chrome/browser/net/spdyproxy/data_reduction_proxy_settings.h
|
| @@ -18,6 +18,10 @@
|
| class PrefService;
|
|
|
| namespace net {
|
| +class AuthChallengeInfo;
|
| +class HostPortPair;
|
| +class HttpAuthCache;
|
| +class HttpNetworkSession;
|
| class URLFetcher;
|
| }
|
|
|
| @@ -37,17 +41,25 @@ COMPILE_ASSERT(kNumDaysInHistorySummary <= kNumDaysInHistory,
|
| // Central point for configuring the data reduction proxy.
|
| // This object lives on the UI thread and all of its methods are expected to
|
| // be called from there.
|
| +// TODO(marq): Convert this to be a BrowserContextKeyedService with an
|
| +// associated factory class, and refactor the Java call sites accordingly.
|
| class DataReductionProxySettings
|
| : public net::URLFetcherDelegate,
|
| public net::NetworkChangeNotifier::IPAddressObserver {
|
| public:
|
| typedef std::vector<long long> ContentLengthList;
|
| + // TODO(marq): Consider instead using a std::pair instead of a vector.
|
| + typedef std::vector<GURL> DataReductionProxyList;
|
|
|
| DataReductionProxySettings();
|
| virtual ~DataReductionProxySettings();
|
|
|
| void InitDataReductionProxySettings();
|
|
|
| + // If proxy authentication is compiled in, pre-cache authentication
|
| + // keys for all configured proxies in |session|.
|
| + static void InitDataReductionProxySession(net::HttpNetworkSession* session);
|
| +
|
| // Add a host pattern to bypass. This should follow the same syntax used
|
| // in net::ProxyBypassRules; that is, a hostname pattern, a hostname suffix
|
| // pattern, an IP literal, a CIDR block, or the magic string '<local>'.
|
| @@ -64,19 +76,31 @@ class DataReductionProxySettings
|
| // instance of Chrome. This could return false, for example, if this instance
|
| // is not part of the field trial, or if the proxy name is not configured
|
| // via gyp.
|
| - bool IsDataReductionProxyAllowed();
|
| + static bool IsDataReductionProxyAllowed();
|
|
|
| // Returns true if a screen promoting the data reduction proxy is allowed to
|
| // be shown. Logic that decides when to show the promo should check its
|
| // availability. This would return false if not part of a separate field
|
| // trial that governs the use of the promotion.
|
| - bool IsDataReductionProxyPromoAllowed();
|
| + static bool IsDataReductionProxyPromoAllowed();
|
|
|
| // Returns the URL of the data reduction proxy.
|
| - std::string GetDataReductionProxyOrigin();
|
| + static std::string GetDataReductionProxyOrigin();
|
| +
|
| + // Returns the URL of the fallback data reduction proxy.
|
| + static std::string GetDataReductionProxyFallback();
|
| +
|
| + // Returns a vector of GURLs for all configured proxies.
|
| + static DataReductionProxyList GetDataReductionProxies();
|
|
|
| - // Returns a configuration string for the proxy.
|
| - std::string GetDataReductionProxyAuth();
|
| + // Returns true if |auth_info| represents an authentication challenge from
|
| + // a compatible, configured proxy.
|
| + bool IsAcceptableAuthChallenge(net::AuthChallengeInfo* auth_info);
|
| +
|
| + // Returns a UTF16 string suitable for use as an authentication token in
|
| + // response to the challenge represented by |auth_info|. If the token can't
|
| + // be correctly generated for |auth_info|, returns an empty UTF16 string.
|
| + base::string16 GetTokenForAuthChallenge(net::AuthChallengeInfo* auth_info);
|
|
|
| // Returns true if the proxy is enabled.
|
| bool IsDataReductionProxyEnabled();
|
| @@ -107,15 +131,13 @@ class DataReductionProxySettings
|
|
|
| protected:
|
| void InitPrefMembers();
|
| +
|
| virtual net::URLFetcher* GetURLFetcher();
|
|
|
| // Virtualized for unit test support.
|
| virtual PrefService* GetOriginalProfilePrefs();
|
| virtual PrefService* GetLocalStatePrefs();
|
|
|
| - std::string GetDataReductionProxyOriginHostPort();
|
| -
|
| - bool IsProxyOriginSetOnCommandLine();
|
| void GetContentLengths(unsigned int days,
|
| int64* original_content_length,
|
| int64* received_content_length,
|
| @@ -134,8 +156,8 @@ class DataReductionProxySettings
|
| virtual void AddDefaultProxyBypassRules();
|
|
|
| // Writes a warning to the log that is used in backend processing of
|
| - // customer feedback.
|
| - void LogProxyState(bool enabled, bool at_startup);
|
| + // customer feedback. Virtual so tests can mock it for verification.
|
| + virtual void LogProxyState(bool enabled, bool at_startup);
|
|
|
| bool HasTurnedOn() { return has_turned_on_; }
|
| bool HasTurnedOff() { return has_turned_off_; }
|
| @@ -150,6 +172,12 @@ class DataReductionProxySettings
|
| friend class DataReductionProxySettingsTestBase;
|
| friend class DataReductionProxySettingsTest;
|
| FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest,
|
| + TestAuthenticationInit);
|
| + FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest,
|
| + TestAuthHashGeneration);
|
| + FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest,
|
| + TestAuthHashGenerationWithOriginSetViaSwitch);
|
| + FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest,
|
| TestResetDataReductionStatistics);
|
| FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsTest,
|
| TestIsProxyEnabledOrManaged);
|
| @@ -173,6 +201,10 @@ class DataReductionProxySettings
|
| // NetworkChangeNotifier::IPAddressObserver:
|
| virtual void OnIPAddressChanged() OVERRIDE;
|
|
|
| + // Underlying implementation of InitDataReductionProxySession(), factored
|
| + // out to be testable without creating a full HttpNetworkSession.
|
| + static void InitDataReductionAuthentication(net::HttpAuthCache* auth_cache);
|
| +
|
| void OnProxyEnabledPrefChange();
|
|
|
| void ResetDataReductionStatistics();
|
| @@ -185,6 +217,11 @@ class DataReductionProxySettings
|
| void ProbeWhetherDataReductionProxyIsAvailable();
|
| std::string GetProxyCheckURL();
|
|
|
| + // Returns a UTF16 string that's the hash of the configured authentication
|
| + // key and |salt|. Returns an empty UTF16 string if no key is configured or
|
| + // the data reduction proxy feature isn't available.
|
| + static base::string16 AuthHashForSalt(int64 salt);
|
| +
|
| std::vector<std::string> bypass_rules_;
|
|
|
| // Indicate whether a user has turned on the data reduction proxy previously
|
|
|