Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_request_options_unittest.cc |
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_auth_request_handler_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_request_options_unittest.cc |
similarity index 53% |
rename from components/data_reduction_proxy/core/browser/data_reduction_proxy_auth_request_handler_unittest.cc |
rename to components/data_reduction_proxy/core/browser/data_reduction_proxy_request_options_unittest.cc |
index 68eedfe6ec85027148e757d0a8feff1ed9f05c99..54081446b32abad1d22fce4c873e82bf5e7e976c 100644 |
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_auth_request_handler_unittest.cc |
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_request_options_unittest.cc |
@@ -3,8 +3,9 @@ |
// found in the LICENSE file. |
-#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_auth_request_handler.h" |
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_request_options.h" |
+#include "base/command_line.h" |
#include "base/md5.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/run_loop.h" |
@@ -13,6 +14,7 @@ |
#include "base/time/time.h" |
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings_test_utils.h" |
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params_test_utils.h" |
+#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" |
#include "net/base/auth.h" |
#include "net/base/host_port_pair.h" |
#include "testing/gmock/include/gmock/gmock.h" |
@@ -76,28 +78,15 @@ const Client kClient = Client::UNKNOWN; |
const char kClientStr[] = ""; |
#endif |
-const std::string kExpectedHeader2 = |
- std::string("ps=0-1633771873-1633771873-1633771873, ") + |
- std::string("sid=c911fdb402f578787562cf7f00eda972, b=2, p=3, c=") + |
- kClientStr; |
-const std::string kExpectedHeader3 = |
- std::string("ps=86401-1633771873-1633771873-1633771873, ") + |
- std::string("sid=d7c1c34ef6b90303b01c48a6c1db6419, b=2, p=3, c=") + |
- kClientStr; |
-const std::string kExpectedHeader4 = |
- std::string("ps=0-1633771873-1633771873-1633771873, ") + |
- std::string("sid=c911fdb402f578787562cf7f00eda972, c=") + |
- kClientStr; |
- |
-class TestDataReductionProxyAuthRequestHandler |
- : public DataReductionProxyAuthRequestHandler { |
+class TestDataReductionProxyRequestOptions |
+ : public DataReductionProxyRequestOptions { |
public: |
- TestDataReductionProxyAuthRequestHandler( |
+ TestDataReductionProxyRequestOptions( |
Client client, |
const std::string& version, |
DataReductionProxyParams* params, |
base::MessageLoopProxy* loop_proxy) |
- : DataReductionProxyAuthRequestHandler( |
+ : DataReductionProxyRequestOptions( |
client, version, params, loop_proxy) {} |
std::string GetDefaultKey() const override { return kTestKey; } |
@@ -124,17 +113,56 @@ class TestDataReductionProxyAuthRequestHandler |
} // namespace |
-class DataReductionProxyAuthRequestHandlerTest : public testing::Test { |
+class DataReductionProxyRequestOptionsTest : public testing::Test { |
public: |
- DataReductionProxyAuthRequestHandlerTest() |
+ DataReductionProxyRequestOptionsTest() |
: loop_proxy_(base::MessageLoopProxy::current().get()) { |
} |
+ |
+ std::map<std::string, std::string> ParseHeader(std::string header) { |
+ std::map<std::string, std::string> header_options; |
+ size_t pos = 0; |
+ std::string name; |
+ std::string value; |
+ std::string equals_delimiter = "="; |
+ std::string comma_delimiter = ", "; |
+ while ((pos = header.find(equals_delimiter)) != std::string::npos) { |
+ name = header.substr(0, pos); |
+ header.erase(0, pos + equals_delimiter.length()); |
+ pos = header.find(comma_delimiter); |
+ if (pos != std::string::npos) { |
+ value = header.substr(0, pos); |
+ header.erase(0, pos + comma_delimiter.length()); |
+ header_options[name] = value; |
+ } |
+ } |
+ |
+ if (!header.empty()) |
+ header_options[name] = header; |
+ |
+ return header_options; |
+ } |
+ |
// Required for MessageLoopProxy::current(). |
base::MessageLoopForUI loop_; |
base::MessageLoopProxy* loop_proxy_; |
}; |
-TEST_F(DataReductionProxyAuthRequestHandlerTest, AuthorizationOnIOThread) { |
+TEST_F(DataReductionProxyRequestOptionsTest, AuthorizationOnIOThread) { |
+ std::map<std::string, std::string> kExpectedHeader; |
+ kExpectedHeader["ps"] = kExpectedSession2; |
+ kExpectedHeader["sid"] = kExpectedCredentials2; |
+ kExpectedHeader["b"] = "2"; |
+ kExpectedHeader["p"] = "3"; |
+ kExpectedHeader["c"] = kClientStr; |
+ |
+ std::map<std::string, std::string> kExpectedHeader2; |
+ kExpectedHeader2["ps"] = "86401-1633771873-1633771873-1633771873"; |
+ kExpectedHeader2["sid"] = "d7c1c34ef6b90303b01c48a6c1db6419"; |
+ kExpectedHeader2["b"] = "2"; |
+ kExpectedHeader2["p"] = "3"; |
+ kExpectedHeader2["c"] = kClientStr; |
+ |
scoped_ptr<TestDataReductionProxyParams> params; |
params.reset( |
new TestDataReductionProxyParams( |
@@ -145,41 +173,41 @@ TEST_F(DataReductionProxyAuthRequestHandlerTest, AuthorizationOnIOThread) { |
~TestDataReductionProxyParams::HAS_DEV_ORIGIN & |
~TestDataReductionProxyParams::HAS_DEV_FALLBACK_ORIGIN)); |
// loop_proxy_ is just the current message loop. This means loop_proxy_ |
- // is the network thread used by DataReductionProxyAuthRequestHandler. |
- TestDataReductionProxyAuthRequestHandler auth_handler(kClient, |
- kVersion, |
- params.get(), |
- loop_proxy_); |
- auth_handler.Init(); |
+ // is the network thread used by DataReductionProxyRequestOptions. |
+ TestDataReductionProxyRequestOptions request_options(kClient, |
+ kVersion, |
+ params.get(), |
+ loop_proxy_); |
+ request_options.Init(); |
base::RunLoop().RunUntilIdle(); |
- EXPECT_EQ(auth_handler.client_, kClientStr); |
- EXPECT_EQ(kExpectedBuild, auth_handler.build_number_); |
- EXPECT_EQ(kExpectedPatch, auth_handler.patch_number_); |
- EXPECT_EQ(auth_handler.key_, kTestKey); |
- EXPECT_EQ(kExpectedCredentials, auth_handler.credentials_); |
- EXPECT_EQ(kExpectedSession, auth_handler.session_); |
+ EXPECT_EQ(request_options.client_, kClientStr); |
+ EXPECT_EQ(kExpectedBuild, request_options.build_number_); |
+ EXPECT_EQ(kExpectedPatch, request_options.patch_number_); |
+ EXPECT_EQ(request_options.key_, kTestKey); |
+ EXPECT_EQ(kExpectedCredentials, request_options.credentials_); |
+ EXPECT_EQ(kExpectedSession, request_options.session_); |
// Now set a key. |
- auth_handler.InitAuthentication(kTestKey2); |
+ request_options.InitAuthentication(kTestKey2); |
base::RunLoop().RunUntilIdle(); |
- EXPECT_EQ(kTestKey2, auth_handler.key_); |
- EXPECT_EQ(kExpectedCredentials2, auth_handler.credentials_); |
- EXPECT_EQ(kExpectedSession2, auth_handler.session_); |
+ EXPECT_EQ(kTestKey2, request_options.key_); |
+ EXPECT_EQ(kExpectedCredentials2, request_options.credentials_); |
+ EXPECT_EQ(kExpectedSession2, request_options.session_); |
// Don't write headers if the proxy is invalid. |
net::HttpRequestHeaders headers; |
- auth_handler.MaybeAddRequestHeader(NULL, net::ProxyServer(), &headers); |
+ request_options.MaybeAddRequestHeader(NULL, net::ProxyServer(), &headers); |
EXPECT_FALSE(headers.HasHeader(kChromeProxyHeader)); |
// Don't write headers with a valid proxy, that's not a data reduction proxy. |
- auth_handler.MaybeAddRequestHeader( |
+ request_options.MaybeAddRequestHeader( |
NULL, |
net::ProxyServer::FromURI(kOtherProxy, net::ProxyServer::SCHEME_HTTP), |
&headers); |
EXPECT_FALSE(headers.HasHeader(kChromeProxyHeader)); |
// Don't write headers with a valid data reduction ssl proxy. |
- auth_handler.MaybeAddRequestHeader( |
+ request_options.MaybeAddRequestHeader( |
NULL, |
net::ProxyServer::FromURI( |
net::HostPortPair::FromURL( |
@@ -189,7 +217,7 @@ TEST_F(DataReductionProxyAuthRequestHandlerTest, AuthorizationOnIOThread) { |
EXPECT_FALSE(headers.HasHeader(kChromeProxyHeader)); |
// Write headers with a valid data reduction proxy. |
- auth_handler.MaybeAddRequestHeader( |
+ request_options.MaybeAddRequestHeader( |
NULL, |
net::ProxyServer::FromURI( |
net::HostPortPair::FromURL(GURL(params->DefaultOrigin())).ToString(), |
@@ -198,23 +226,23 @@ TEST_F(DataReductionProxyAuthRequestHandlerTest, AuthorizationOnIOThread) { |
EXPECT_TRUE(headers.HasHeader(kChromeProxyHeader)); |
std::string header_value; |
headers.GetHeader(kChromeProxyHeader, &header_value); |
- EXPECT_EQ(kExpectedHeader2, header_value); |
+ EXPECT_EQ(kExpectedHeader, ParseHeader(header_value)); |
// Write headers with a valid data reduction ssl proxy when one is expected. |
net::HttpRequestHeaders ssl_headers; |
- auth_handler.MaybeAddProxyTunnelRequestHandler( |
+ request_options.MaybeAddProxyTunnelRequestHandler( |
net::HostPortPair::FromURL(GURL(params->DefaultSSLOrigin())), |
&ssl_headers); |
EXPECT_TRUE(ssl_headers.HasHeader(kChromeProxyHeader)); |
std::string ssl_header_value; |
ssl_headers.GetHeader(kChromeProxyHeader, &ssl_header_value); |
- EXPECT_EQ(kExpectedHeader2, ssl_header_value); |
+ EXPECT_EQ(kExpectedHeader, ParseHeader(ssl_header_value)); |
// Fast forward 24 hours. The header should be the same. |
- auth_handler.set_offset(base::TimeDelta::FromSeconds(24 * 60 * 60)); |
+ request_options.set_offset(base::TimeDelta::FromSeconds(24 * 60 * 60)); |
net::HttpRequestHeaders headers2; |
// Write headers with a valid data reduction proxy. |
- auth_handler.MaybeAddRequestHeader( |
+ request_options.MaybeAddRequestHeader( |
NULL, |
net::ProxyServer::FromURI( |
net::HostPortPair::FromURL(GURL(params->DefaultOrigin())).ToString(), |
@@ -223,13 +251,13 @@ TEST_F(DataReductionProxyAuthRequestHandlerTest, AuthorizationOnIOThread) { |
EXPECT_TRUE(headers2.HasHeader(kChromeProxyHeader)); |
std::string header_value2; |
headers2.GetHeader(kChromeProxyHeader, &header_value2); |
- EXPECT_EQ(kExpectedHeader2, header_value2); |
+ EXPECT_EQ(kExpectedHeader, ParseHeader(header_value2)); |
// Fast forward one more second. The header should be new. |
- auth_handler.set_offset(base::TimeDelta::FromSeconds(24 * 60 * 60 + 1)); |
+ request_options.set_offset(base::TimeDelta::FromSeconds(24 * 60 * 60 + 1)); |
net::HttpRequestHeaders headers3; |
// Write headers with a valid data reduction proxy. |
- auth_handler.MaybeAddRequestHeader( |
+ request_options.MaybeAddRequestHeader( |
NULL, |
net::ProxyServer::FromURI( |
net::HostPortPair::FromURL(GURL(params->DefaultOrigin())).ToString(), |
@@ -238,10 +266,10 @@ TEST_F(DataReductionProxyAuthRequestHandlerTest, AuthorizationOnIOThread) { |
EXPECT_TRUE(headers3.HasHeader(kChromeProxyHeader)); |
std::string header_value3; |
headers3.GetHeader(kChromeProxyHeader, &header_value3); |
- EXPECT_EQ(kExpectedHeader3, header_value3); |
+ EXPECT_EQ(kExpectedHeader2, ParseHeader(header_value3)); |
} |
-TEST_F(DataReductionProxyAuthRequestHandlerTest, AuthorizationIgnoresEmptyKey) { |
+TEST_F(DataReductionProxyRequestOptionsTest, AuthorizationIgnoresEmptyKey) { |
scoped_ptr<TestDataReductionProxyParams> params; |
params.reset( |
new TestDataReductionProxyParams( |
@@ -252,30 +280,35 @@ scoped_ptr<TestDataReductionProxyParams> params; |
~TestDataReductionProxyParams::HAS_DEV_ORIGIN & |
~TestDataReductionProxyParams::HAS_DEV_FALLBACK_ORIGIN)); |
// loop_proxy_ is just the current message loop. This means loop_proxy_ |
- // is the network thread used by DataReductionProxyAuthRequestHandler. |
- TestDataReductionProxyAuthRequestHandler auth_handler(kClient, |
- kVersion, |
- params.get(), |
- loop_proxy_); |
- auth_handler.Init(); |
+ // is the network thread used by DataReductionProxyRequestOptions. |
+ TestDataReductionProxyRequestOptions request_options(kClient, |
+ kVersion, |
+ params.get(), |
+ loop_proxy_); |
+ request_options.Init(); |
base::RunLoop().RunUntilIdle(); |
- EXPECT_EQ(auth_handler.client_, kClientStr); |
- EXPECT_EQ(kExpectedBuild, auth_handler.build_number_); |
- EXPECT_EQ(kExpectedPatch, auth_handler.patch_number_); |
- EXPECT_EQ(auth_handler.key_, kTestKey); |
- EXPECT_EQ(kExpectedCredentials, auth_handler.credentials_); |
- EXPECT_EQ(kExpectedSession, auth_handler.session_); |
+ EXPECT_EQ(request_options.client_, kClientStr); |
+ EXPECT_EQ(kExpectedBuild, request_options.build_number_); |
+ EXPECT_EQ(kExpectedPatch, request_options.patch_number_); |
+ EXPECT_EQ(request_options.key_, kTestKey); |
+ EXPECT_EQ(kExpectedCredentials, request_options.credentials_); |
+ EXPECT_EQ(kExpectedSession, request_options.session_); |
// Now set an empty key. The auth handler should ignore that, and the key |
// remains |kTestKey|. |
- auth_handler.InitAuthentication(""); |
+ request_options.InitAuthentication(""); |
base::RunLoop().RunUntilIdle(); |
- EXPECT_EQ(auth_handler.key_, kTestKey); |
- EXPECT_EQ(kExpectedCredentials, auth_handler.credentials_); |
- EXPECT_EQ(kExpectedSession, auth_handler.session_); |
+ EXPECT_EQ(request_options.key_, kTestKey); |
+ EXPECT_EQ(kExpectedCredentials, request_options.credentials_); |
+ EXPECT_EQ(kExpectedSession, request_options.session_); |
} |
-TEST_F(DataReductionProxyAuthRequestHandlerTest, AuthorizationBogusVersion) { |
+TEST_F(DataReductionProxyRequestOptionsTest, AuthorizationBogusVersion) { |
+ std::map<std::string, std::string> kExpectedHeader; |
+ kExpectedHeader["ps"] = kExpectedSession2; |
+ kExpectedHeader["sid"] = kExpectedCredentials2; |
+ kExpectedHeader["c"] = kClientStr; |
+ |
scoped_ptr<TestDataReductionProxyParams> params; |
params.reset( |
new TestDataReductionProxyParams( |
@@ -285,23 +318,23 @@ TEST_F(DataReductionProxyAuthRequestHandlerTest, AuthorizationBogusVersion) { |
TestDataReductionProxyParams::HAS_EVERYTHING & |
~TestDataReductionProxyParams::HAS_DEV_ORIGIN & |
~TestDataReductionProxyParams::HAS_DEV_FALLBACK_ORIGIN)); |
- TestDataReductionProxyAuthRequestHandler auth_handler(kClient, |
- kBogusVersion, |
- params.get(), |
- loop_proxy_); |
- EXPECT_TRUE(auth_handler.build_number_.empty()); |
- EXPECT_TRUE(auth_handler.patch_number_.empty()); |
+ TestDataReductionProxyRequestOptions request_options(kClient, |
+ kBogusVersion, |
+ params.get(), |
+ loop_proxy_); |
+ EXPECT_TRUE(request_options.build_number_.empty()); |
+ EXPECT_TRUE(request_options.patch_number_.empty()); |
// Now set a key. |
- auth_handler.InitAuthentication(kTestKey2); |
+ request_options.InitAuthentication(kTestKey2); |
base::RunLoop().RunUntilIdle(); |
- EXPECT_EQ(kTestKey2, auth_handler.key_); |
- EXPECT_EQ(kExpectedCredentials2, auth_handler.credentials_); |
- EXPECT_EQ(kExpectedSession2, auth_handler.session_); |
+ EXPECT_EQ(kTestKey2, request_options.key_); |
+ EXPECT_EQ(kExpectedCredentials2, request_options.credentials_); |
+ EXPECT_EQ(kExpectedSession2, request_options.session_); |
net::HttpRequestHeaders headers; |
// Write headers with a valid data reduction proxy; |
- auth_handler.MaybeAddRequestHeader( |
+ request_options.MaybeAddRequestHeader( |
NULL, |
net::ProxyServer::FromURI( |
net::HostPortPair::FromURL(GURL(params->DefaultOrigin())).ToString(), |
@@ -310,16 +343,62 @@ TEST_F(DataReductionProxyAuthRequestHandlerTest, AuthorizationBogusVersion) { |
EXPECT_TRUE(headers.HasHeader(kChromeProxyHeader)); |
std::string header_value; |
headers.GetHeader(kChromeProxyHeader, &header_value); |
- EXPECT_EQ(kExpectedHeader4, header_value); |
+ EXPECT_EQ(kExpectedHeader, ParseHeader(header_value)); |
} |
-TEST_F(DataReductionProxyAuthRequestHandlerTest, AuthHashForSalt) { |
+TEST_F(DataReductionProxyRequestOptionsTest, AuthHashForSalt) { |
std::string salt = "8675309"; // Jenny's number to test the hash generator. |
std::string salted_key = salt + kDataReductionProxyKey + salt; |
base::string16 expected_hash = base::UTF8ToUTF16(base::MD5String(salted_key)); |
EXPECT_EQ(expected_hash, |
- DataReductionProxyAuthRequestHandler::AuthHashForSalt( |
+ DataReductionProxyRequestOptions::AuthHashForSalt( |
8675309, kDataReductionProxyKey)); |
} |
+TEST_F(DataReductionProxyRequestOptionsTest, AuthorizationLoFi) { |
+ std::map<std::string, std::string> kExpectedHeader; |
+ kExpectedHeader["ps"] = kExpectedSession2; |
+ kExpectedHeader["sid"] = kExpectedCredentials2; |
+ kExpectedHeader["c"] = kClientStr; |
+ kExpectedHeader["q"] = "low"; |
+ |
+ scoped_ptr<TestDataReductionProxyParams> params; |
+ params.reset( |
+ new TestDataReductionProxyParams( |
+ DataReductionProxyParams::kAllowed | |
+ DataReductionProxyParams::kFallbackAllowed | |
+ DataReductionProxyParams::kPromoAllowed, |
+ TestDataReductionProxyParams::HAS_EVERYTHING & |
+ ~TestDataReductionProxyParams::HAS_DEV_ORIGIN & |
+ ~TestDataReductionProxyParams::HAS_DEV_FALLBACK_ORIGIN)); |
+ |
+ base::CommandLine::ForCurrentProcess()->AppendSwitch( |
+ data_reduction_proxy::switches::kEnableDataReductionProxyLoFi); |
+ |
+ TestDataReductionProxyRequestOptions request_options(kClient, |
+ kBogusVersion, |
+ params.get(), |
+ loop_proxy_); |
+ |
+ // Now set a key. |
+ request_options.InitAuthentication(kTestKey2); |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(kTestKey2, request_options.key_); |
+ EXPECT_EQ(kExpectedCredentials2, request_options.credentials_); |
+ EXPECT_EQ(kExpectedSession2, request_options.session_); |
+ |
+ net::HttpRequestHeaders headers; |
+ // Write headers with a valid data reduction proxy; |
+ request_options.MaybeAddRequestHeader( |
+ NULL, |
+ net::ProxyServer::FromURI( |
+ net::HostPortPair::FromURL(GURL(params->DefaultOrigin())).ToString(), |
+ net::ProxyServer::SCHEME_HTTP), |
+ &headers); |
+ EXPECT_TRUE(headers.HasHeader(kChromeProxyHeader)); |
+ std::string header_value; |
+ headers.GetHeader(kChromeProxyHeader, &header_value); |
+ EXPECT_EQ(kExpectedHeader, ParseHeader(header_value)); |
+} |
+ |
} // namespace data_reduction_proxy |