Index: net/url_request/url_request_unittest.cc |
=================================================================== |
--- net/url_request/url_request_unittest.cc (revision 169969) |
+++ net/url_request/url_request_unittest.cc (working copy) |
@@ -3682,7 +3682,8 @@ |
req.SetExtraRequestHeaders(headers); |
URLRequestRedirectJob* job = new URLRequestRedirectJob( |
- &req, default_context_.network_delegate(), test_server_.GetURL("echo")); |
+ &req, default_context_.network_delegate(), test_server_.GetURL("echo"), |
+ URLRequestRedirectJob::REDIRECT_302_FOUND); |
AddTestInterceptor()->set_main_intercept_job(job); |
req.Start(); |
@@ -3705,8 +3706,7 @@ |
req.SetExtraRequestHeaders(headers); |
URLRequestRedirectJob* job = new URLRequestRedirectJob( |
- &req, default_context_.network_delegate(), test_server_.GetURL("echo")); |
- job->set_redirect_code( |
+ &req, default_context_.network_delegate(), test_server_.GetURL("echo"), |
URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT); |
AddTestInterceptor()->set_main_intercept_job(job); |
@@ -4179,6 +4179,58 @@ |
domain_state.bad_static_spki_hashes)); |
} |
+// Make sure HSTS preserves a POST request's method and body. |
+TEST_F(HTTPSRequestTest, HSTSPreservesPosts) { |
+ static const char kData[] = "hello world"; |
+ |
+ TestServer::SSLOptions ssl_options(TestServer::SSLOptions::CERT_OK); |
+ TestServer test_server(TestServer::TYPE_HTTPS, |
+ ssl_options, |
+ FilePath(FILE_PATH_LITERAL("net/data/ssl"))); |
+ ASSERT_TRUE(test_server.Start()); |
+ |
+ |
+ // Per spec, TransportSecurityState expects a domain name, rather than an IP |
+ // address, so a MockHostResolver is needed to redirect www.somewhere.com to |
+ // the TestServer. |
+ MockHostResolver host_resolver; |
+ host_resolver.rules()->AddRule("www.somewhere.com", "127.0.0.1"); |
szym
2012/11/28 18:04:16
Drive-by: MockHostResolver redirects everything to
mmenke
2012/11/28 18:34:45
Thanks. This was copy/pasted directly from anothe
|
+ |
+ // Force https for www.somewhere.com. |
+ TransportSecurityState transport_security_state; |
+ net::TransportSecurityState::DomainState domain_state; |
+ domain_state.upgrade_expiry = |
+ domain_state.created + base::TimeDelta::FromDays(1000); |
+ transport_security_state.EnableHost("www.somewhere.com", domain_state); |
+ |
+ TestNetworkDelegate network_delegate; // Must outlive URLRequest. |
+ |
+ TestURLRequestContext context(true); |
+ context.set_host_resolver(&host_resolver); |
+ context.set_transport_security_state(&transport_security_state); |
+ context.set_network_delegate(&network_delegate); |
+ context.Init(); |
+ |
+ TestDelegate d; |
+ // Navigating to https://www.somewhere.com instead of https://127.0.0.1 will |
+ // cause a certificate error. Ignore the error. |
+ d.set_allow_certificate_errors(true); |
+ |
+ URLRequest req(GURL(StringPrintf("http://www.somewhere.com:%d/echo", |
+ test_server.host_port_pair().port())), |
+ &d, |
+ &context); |
+ req.set_method("POST"); |
+ req.set_upload(CreateSimpleUploadData(kData).get()); |
+ |
+ req.Start(); |
+ MessageLoop::current()->Run(); |
+ |
+ EXPECT_EQ("https", req.url().scheme()); |
+ EXPECT_EQ("POST", req.method()); |
+ EXPECT_EQ(kData, d.data_received()); |
+} |
+ |
TEST_F(HTTPSRequestTest, SSLv3Fallback) { |
TestServer::SSLOptions ssl_options( |
TestServer::SSLOptions::CERT_OK); |