diff options
author | battre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-14 15:50:50 +0000 |
---|---|---|
committer | battre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-14 15:50:50 +0000 |
commit | 87a09a9ee309f5c600d3c81771d79005a219dc78 (patch) | |
tree | 0b4f0abeeb393d79fe23efa159ae736af8c2101b /net | |
parent | 8423a97deb51c5096c2e5b27004bc786dc431864 (diff) | |
download | chromium_src-87a09a9ee309f5c600d3c81771d79005a219dc78.zip chromium_src-87a09a9ee309f5c600d3c81771d79005a219dc78.tar.gz chromium_src-87a09a9ee309f5c600d3c81771d79005a219dc78.tar.bz2 |
Unit testing of event generation NetworkDelegate / Web Request API
The network stack has many different code paths. This CL uses the existing network unit tests to check which events are generated for the Web Request API.
BUG=86139
TEST=no
Review URL: http://codereview.chromium.org/7284008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92543 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/url_request/url_request.cc | 10 | ||||
-rw-r--r-- | net/url_request/url_request_http_job.cc | 4 | ||||
-rw-r--r-- | net/url_request/url_request_test_util.cc | 202 | ||||
-rw-r--r-- | net/url_request/url_request_test_util.h | 29 | ||||
-rw-r--r-- | net/url_request/url_request_unittest.cc | 365 |
5 files changed, 447 insertions, 163 deletions
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc index 5c30d67..f058c2f 100644 --- a/net/url_request/url_request.cc +++ b/net/url_request/url_request.cc @@ -723,6 +723,16 @@ void URLRequest::SetUserData(const void* key, UserData* data) { } void URLRequest::NotifyAuthRequired(AuthChallengeInfo* auth_info) { + // TODO(battre): We could simulate a redirection there as follows: + // if (context_ && context_->network_delegate()) { + // // We simulate a redirection. + // context_->network_delegate()->NotifyBeforeRedirect(this, url()); + //} + // This fixes URLRequestTestHTTP.BasicAuth but not + // URLRequestTestHTTP.BasicAuthWithCookies. In both cases we observe a + // call sequence of OnBeforeSendHeaders -> OnRequestSent -> + // OnBeforeSendHeaders. + if (delegate_) delegate_->OnAuthRequired(this, auth_info); } diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc index 9a31d72..3256c04 100644 --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc @@ -316,6 +316,10 @@ void URLRequestHttpJob::NotifyHeadersComplete() { // notified of the headers completion so that we can update the cookie store. if (transaction_->IsReadyToRestartForAuth()) { DCHECK(!response_info_->auth_challenge.get()); + // TODO(battre): This breaks the webrequest API for + // URLRequestTestHTTP.BasicAuthWithCookies + // where OnBeforeSendHeaders -> OnRequestSent -> OnBeforeSendHeaders + // occurs. RestartTransactionWithAuth(string16(), string16()); return; } diff --git a/net/url_request/url_request_test_util.cc b/net/url_request/url_request_test_util.cc index 716e1e7..cc6f1b9 100644 --- a/net/url_request/url_request_test_util.cc +++ b/net/url_request/url_request_test_util.cc @@ -12,49 +12,110 @@ #include "net/http/http_network_session.h" #include "net/url_request/url_request_job_factory.h" +namespace { + +// These constants put the net::NetworkDelegate events of TestNetworkDelegate +// into an order. They are used in conjunction with +// |TestNetworkDelegate::next_states_| to check that we do not send +// events in the wrong order. +const int kStageBeforeURLRequest = 1 << 0; +const int kStageBeforeSendHeaders = 1 << 1; +const int kStageRequestSent = 1 << 2; +const int kStageBeforeRedirect = 1 << 3; +const int kStageResponseStarted = 1 << 4; +const int kStageCompletedSuccess = 1 << 5; +const int kStageCompletedError = 1 << 6; +const int kStageURLRequestDestroyed = 1 << 7; +const int kStageDestruction = 1 << 8; + +} // namespace + TestURLRequestContext::TestURLRequestContext() - : ALLOW_THIS_IN_INITIALIZER_LIST(context_storage_(this)) { + : initialized_(false), + ALLOW_THIS_IN_INITIALIZER_LIST(context_storage_(this)) { context_storage_.set_host_resolver( net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism, net::HostResolver::kDefaultRetryAttempts, NULL)); - context_storage_.set_proxy_service(net::ProxyService::CreateDirect()); + SetProxyDirect(); Init(); } +TestURLRequestContext::TestURLRequestContext(bool delay_initialization) + : initialized_(false), + ALLOW_THIS_IN_INITIALIZER_LIST(context_storage_(this)) { + context_storage_.set_host_resolver( + net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism, + net::HostResolver::kDefaultRetryAttempts, + NULL)); + SetProxyDirect(); + if (!delay_initialization) + Init(); +} + TestURLRequestContext::TestURLRequestContext(const std::string& proxy) - : ALLOW_THIS_IN_INITIALIZER_LIST(context_storage_(this)) { + : initialized_(false), + ALLOW_THIS_IN_INITIALIZER_LIST(context_storage_(this)) { context_storage_.set_host_resolver( net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism, net::HostResolver::kDefaultRetryAttempts, NULL)); - net::ProxyConfig proxy_config; - proxy_config.proxy_rules().ParseFromString(proxy); - context_storage_.set_proxy_service( - net::ProxyService::CreateFixed(proxy_config)); + SetProxyFromString(proxy); + Init(); +} + +TestURLRequestContext::TestURLRequestContext(const char* proxy) + : initialized_(false), + ALLOW_THIS_IN_INITIALIZER_LIST(context_storage_(this)) { + context_storage_.set_host_resolver( + net::CreateSystemHostResolver(net::HostResolver::kDefaultParallelism, + net::HostResolver::kDefaultRetryAttempts, + NULL)); + SetProxyFromString(proxy); Init(); } TestURLRequestContext::TestURLRequestContext(const std::string& proxy, net::HostResolver* host_resolver) - : ALLOW_THIS_IN_INITIALIZER_LIST(context_storage_(this)) { + : initialized_(false), + ALLOW_THIS_IN_INITIALIZER_LIST(context_storage_(this)) { context_storage_.set_host_resolver(host_resolver); + SetProxyFromString(proxy); + Init(); +} + +void TestURLRequestContext::SetProxyFromString(const std::string& proxy) { + DCHECK(!initialized_); net::ProxyConfig proxy_config; proxy_config.proxy_rules().ParseFromString(proxy); context_storage_.set_proxy_service( net::ProxyService::CreateFixed(proxy_config)); - Init(); } -TestURLRequestContext::~TestURLRequestContext() {} +void TestURLRequestContext::SetProxyDirect() { + DCHECK(!initialized_); + context_storage_.set_proxy_service(net::ProxyService::CreateDirect()); +} + +TestURLRequestContext::~TestURLRequestContext() { + DCHECK(initialized_); +} void TestURLRequestContext::Init() { - context_storage_.set_cert_verifier(new net::CertVerifier); - context_storage_.set_ftp_transaction_factory( - new net::FtpNetworkLayer(host_resolver())); - context_storage_.set_ssl_config_service(new net::SSLConfigServiceDefaults); - context_storage_.set_http_auth_handler_factory( - net::HttpAuthHandlerFactory::CreateDefault(host_resolver())); + DCHECK(!initialized_); + initialized_ = true; + if (!cert_verifier()) + context_storage_.set_cert_verifier(new net::CertVerifier); + if (!ftp_transaction_factory()) { + context_storage_.set_ftp_transaction_factory( + new net::FtpNetworkLayer(host_resolver())); + } + if (!ssl_config_service()) + context_storage_.set_ssl_config_service(new net::SSLConfigServiceDefaults); + if (!http_auth_handler_factory()) { + context_storage_.set_http_auth_handler_factory( + net::HttpAuthHandlerFactory::CreateDefault(host_resolver())); + } net::HttpNetworkSession::Params params; params.host_resolver = host_resolver(); params.cert_verifier = cert_verifier(); @@ -63,14 +124,20 @@ void TestURLRequestContext::Init() { params.http_auth_handler_factory = http_auth_handler_factory(); params.network_delegate = network_delegate(); - context_storage_.set_http_transaction_factory(new net::HttpCache( - new net::HttpNetworkSession(params), - net::HttpCache::DefaultBackend::InMemory(0))); + if (!http_transaction_factory()) { + context_storage_.set_http_transaction_factory(new net::HttpCache( + new net::HttpNetworkSession(params), + net::HttpCache::DefaultBackend::InMemory(0))); + } // In-memory cookie store. - context_storage_.set_cookie_store(new net::CookieMonster(NULL, NULL)); - set_accept_language("en-us,fr"); - set_accept_charset("iso-8859-1,*,utf-8"); - context_storage_.set_job_factory(new net::URLRequestJobFactory); + if (!cookie_store()) + context_storage_.set_cookie_store(new net::CookieMonster(NULL, NULL)); + if (accept_language().empty()) + set_accept_language("en-us,fr"); + if (accept_charset().empty()) + set_accept_charset("iso-8859-1,*,utf-8"); + if (!job_factory()) + context_storage_.set_job_factory(new net::URLRequestJobFactory); } @@ -248,12 +315,36 @@ TestNetworkDelegate::TestNetworkDelegate() completed_requests_(0) { } -TestNetworkDelegate::~TestNetworkDelegate() {} +TestNetworkDelegate::~TestNetworkDelegate() { + for (std::map<int, int>::iterator i = next_states_.begin(); + i != next_states_.end(); ++i) { + event_order_[i->first] += "~TestNetworkDelegate\n"; + EXPECT_TRUE(i->second & kStageDestruction) << event_order_[i->first]; + } +} + +void TestNetworkDelegate::InitRequestStatesIfNew(int request_id) { + if (next_states_.find(request_id) == next_states_.end()) { + next_states_[request_id] = kStageBeforeURLRequest; + event_order_[request_id] = ""; + } +} + int TestNetworkDelegate::OnBeforeURLRequest( net::URLRequest* request, net::CompletionCallback* callback, GURL* new_url ) { + int req_id = request->identifier(); + event_order_[req_id] += "OnBeforeURLRequest\n"; + InitRequestStatesIfNew(req_id); + EXPECT_TRUE(next_states_[req_id] & kStageBeforeURLRequest) << + event_order_[req_id]; + next_states_[req_id] = + kStageBeforeSendHeaders | + kStageResponseStarted | // data: URLs do not trigger sending headers + kStageBeforeRedirect | // a delegate can trigger a redirection + kStageCompletedError; // request canceled by delegate created_requests_++; return net::OK; } @@ -262,6 +353,18 @@ int TestNetworkDelegate::OnBeforeSendHeaders( net::URLRequest* request, net::CompletionCallback* callback, net::HttpRequestHeaders* headers) { + int req_id = request->identifier(); + event_order_[req_id] += "OnBeforeSendHeaders\n"; + InitRequestStatesIfNew(req_id); + EXPECT_TRUE(next_states_[req_id] & kStageBeforeSendHeaders) << + event_order_[req_id]; + next_states_[req_id] = + kStageRequestSent | + kStageCompletedError; // request canceled by delegate + + // In case we can answer a request from the cache we can respond directly. + next_states_[req_id] |= kStageResponseStarted; + return net::OK; } @@ -269,13 +372,45 @@ void TestNetworkDelegate::OnRequestSent( uint64 request_id, const net::HostPortPair& socket_address, const net::HttpRequestHeaders& headers) { + event_order_[request_id] += "OnRequestSent\n"; + InitRequestStatesIfNew(request_id); + EXPECT_TRUE(next_states_[request_id] & kStageRequestSent) << + event_order_[request_id]; + next_states_[request_id] = + kStageBeforeRedirect | + kStageResponseStarted | + kStageCompletedError; // e.g. proxy resolution problem + + // Basic authentication sends a second request from the URLRequestHttpJob + // layer before the URLRequest reports that a response has started. + next_states_[request_id] |= kStageBeforeSendHeaders; } void TestNetworkDelegate::OnBeforeRedirect(net::URLRequest* request, const GURL& new_location) { + int req_id = request->identifier(); + event_order_[req_id] += "OnBeforeRedirect\n"; + InitRequestStatesIfNew(req_id); + EXPECT_TRUE(next_states_[req_id] & kStageBeforeRedirect) << + event_order_[req_id]; + next_states_[req_id] = + kStageBeforeURLRequest | // HTTP redirects trigger this. + kStageBeforeSendHeaders | // Redirects from the network delegate do not + // trigger onBeforeURLRequest. + kStageCompletedError; + + // A redirect can lead to a file or a data URL. In this case, we do not send + // headers. + next_states_[req_id] |= kStageResponseStarted; } void TestNetworkDelegate::OnResponseStarted(net::URLRequest* request) { + int req_id = request->identifier(); + event_order_[req_id] += "OnResponseStarted\n"; + InitRequestStatesIfNew(req_id); + EXPECT_TRUE(next_states_[req_id] & kStageResponseStarted) << + event_order_[req_id]; + next_states_[req_id] = kStageCompletedSuccess | kStageCompletedError; if (request->status().status() == net::URLRequestStatus::FAILED) { error_count_++; last_os_error_ = request->status().os_error(); @@ -287,6 +422,19 @@ void TestNetworkDelegate::OnRawBytesRead(const net::URLRequest& request, } void TestNetworkDelegate::OnCompleted(net::URLRequest* request) { + int req_id = request->identifier(); + event_order_[req_id] += "OnCompleted\n"; + InitRequestStatesIfNew(req_id); + // Expect "Success -> (next_states_ & kStageCompletedSuccess)" + // is logically identical to + // Expect "!(Success) || (next_states_ & kStageCompletedSuccess)" + EXPECT_TRUE(!request->status().is_success() || + (next_states_[req_id] & kStageCompletedSuccess)) << + event_order_[req_id]; + EXPECT_TRUE(request->status().is_success() || + (next_states_[req_id] & kStageCompletedError)) << + event_order_[req_id]; + next_states_[req_id] = kStageURLRequestDestroyed; completed_requests_++; if (request->status().status() == net::URLRequestStatus::FAILED) { error_count_++; @@ -296,6 +444,12 @@ void TestNetworkDelegate::OnCompleted(net::URLRequest* request) { void TestNetworkDelegate::OnURLRequestDestroyed( net::URLRequest* request) { + int req_id = request->identifier(); + event_order_[req_id] += "OnURLRequestDestroyed\n"; + InitRequestStatesIfNew(req_id); + EXPECT_TRUE(next_states_[req_id] & kStageURLRequestDestroyed) << + event_order_[req_id]; + next_states_[req_id] = kStageDestruction; destroyed_requests_++; } diff --git a/net/url_request/url_request_test_util.h b/net/url_request/url_request_test_util.h index 74d8fab..14cee1c 100644 --- a/net/url_request/url_request_test_util.h +++ b/net/url_request/url_request_test_util.h @@ -47,16 +47,29 @@ class HostPortPair; class TestURLRequestContext : public net::URLRequestContext { public: TestURLRequestContext(); + // Default constructor like TestURLRequestContext() but does not call + // Init() in case |delay_initialization| is true. This allows modifying the + // URLRequestContext before it is constructed completely. If + // |delay_initialization| is true, Init() needs be be called manually. + explicit TestURLRequestContext(bool delay_initialization); + // We need this constructor because TestURLRequestContext("foo") actually + // calls the boolean constructor rather than the std::string constructor. + explicit TestURLRequestContext(const char* proxy); explicit TestURLRequestContext(const std::string& proxy); TestURLRequestContext(const std::string& proxy, net::HostResolver* host_resolver); + // Configures the proxy server, must not be called after Init(). + void SetProxyFromString(const std::string& proxy); + void SetProxyDirect(); + + void Init(); + protected: virtual ~TestURLRequestContext(); private: - void Init(); - + bool initialized_; net::URLRequestContextStorage context_storage_; }; @@ -203,11 +216,23 @@ class TestNetworkDelegate : public net::NetworkDelegate { net::URLRequest* request); virtual void OnPACScriptError(int line_number, const string16& error); + void InitRequestStatesIfNew(int request_id); + int last_os_error_; int error_count_; int created_requests_; int destroyed_requests_; int completed_requests_; + + // net::NetworkDelegate callbacks happen in a particular order (e.g. + // OnBeforeURLRequest is always called before OnBeforeSendHeaders). + // This bit-set indicates for each request id (key) what events may be sent + // next. + std::map<int, int> next_states_; + + // A log that records for each request id (key) the order in which On... + // functions were called. + std::map<int, std::string> event_order_; }; #endif // NET_URL_REQUEST_URL_REQUEST_TEST_UTIL_H_ diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index 28ec3e1..ba443df 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc @@ -161,9 +161,18 @@ class BlockingNetworkDelegate : public TestNetworkDelegate { // Inherit PlatformTest since we require the autorelease pool on Mac OS X.f class URLRequestTest : public PlatformTest { public: + URLRequestTest() : default_context_(new TestURLRequestContext(true)) { + default_context_->set_network_delegate(&default_network_delegate_); + default_context_->Init(); + } + static void SetUpTestCase() { URLRequest::AllowFileAccess(); } + + protected: + TestNetworkDelegate default_network_delegate_; // must outlive URLRequest + scoped_refptr<TestURLRequestContext> default_context_; }; class URLRequestTestHTTP : public URLRequestTest { @@ -193,12 +202,10 @@ class URLRequestTestHTTP : public URLRequestTest { } uploadBytes[kMsgSize] = '\0'; - scoped_refptr<URLRequestContext> context(new TestURLRequestContext()); - for (int i = 0; i < kIterations; ++i) { TestDelegate d; URLRequest r(test_server_.GetURL("echo"), &d); - r.set_context(context); + r.set_context(default_context_); r.set_method(method.c_str()); r.AppendBytesToUpload(uploadBytes, kMsgSize); @@ -253,12 +260,16 @@ class URLRequestTestHTTP : public URLRequestTest { TEST_F(URLRequestTestHTTP, ProxyTunnelRedirectTest) { ASSERT_TRUE(test_server_.Start()); + TestNetworkDelegate network_delegate; // must outlive URLRequest + scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext(true)); + context->SetProxyFromString(test_server_.host_port_pair().ToString()); + context->set_network_delegate(&network_delegate); + context->Init(); + TestDelegate d; { URLRequest r(GURL("https://www.redirect.com/"), &d); - r.set_context( - new TestURLRequestContext(test_server_.host_port_pair().ToString())); - + r.set_context(context); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -277,15 +288,16 @@ TEST_F(URLRequestTestHTTP, ProxyTunnelRedirectTest) { TEST_F(URLRequestTestHTTP, NetworkDelegateTunnelConnectionFailed) { ASSERT_TRUE(test_server_.Start()); + TestNetworkDelegate network_delegate; // must outlive URLRequest + scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext(true)); + context->SetProxyFromString(test_server_.host_port_pair().ToString()); + context->set_network_delegate(&network_delegate); + context->Init(); + TestDelegate d; { - TestNetworkDelegate network_delegate; // must outlive URLRequest URLRequest r(GURL("https://www.redirect.com/"), &d); - scoped_refptr<TestURLRequestContext> context( - new TestURLRequestContext(test_server_.host_port_pair().ToString())); - context->set_network_delegate(&network_delegate); r.set_context(context); - r.Start(); EXPECT_TRUE(r.is_pending()); @@ -310,11 +322,13 @@ TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequest) { BlockingNetworkDelegate network_delegate; network_delegate.set_callback_retval(ERR_EMPTY_RESPONSE); + scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext(true)); + context->SetProxyFromString(test_server_.host_port_pair().ToString()); + context->set_network_delegate(&network_delegate); + context->Init(); + { TestURLRequest r(test_server_.GetURL(""), &d); - scoped_refptr<TestURLRequestContext> context( - new TestURLRequestContext(test_server_.host_port_pair().ToString())); - context->set_network_delegate(&network_delegate); r.set_context(context); r.Start(); @@ -338,12 +352,14 @@ TEST_F(URLRequestTestHTTP, NetworkDelegateRedirectRequest) { GURL redirect_url(test_server_.GetURL("simple.html")); network_delegate.set_redirect_url(redirect_url); + scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext(true)); + context->SetProxyFromString(test_server_.host_port_pair().ToString()); + context->set_network_delegate(&network_delegate); + context->Init(); + { GURL original_url(test_server_.GetURL("empty.html")); TestURLRequest r(original_url, &d); - scoped_refptr<TestURLRequestContext> context( - new TestURLRequestContext(test_server_.host_port_pair().ToString())); - context->set_network_delegate(&network_delegate); r.set_context(context); r.Start(); @@ -366,11 +382,16 @@ TEST_F(URLRequestTestHTTP, NetworkDelegateRedirectRequest) { TEST_F(URLRequestTestHTTP, UnexpectedServerAuthTest) { ASSERT_TRUE(test_server_.Start()); + TestNetworkDelegate network_delegate; // must outlive URLRequest + scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext(true)); + context->SetProxyFromString(test_server_.host_port_pair().ToString()); + context->set_network_delegate(&network_delegate); + context->Init(); + TestDelegate d; { URLRequest r(GURL("https://www.server-auth.com/"), &d); - r.set_context( - new TestURLRequestContext(test_server_.host_port_pair().ToString())); + r.set_context(context); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -388,6 +409,7 @@ TEST_F(URLRequestTestHTTP, GetTest_NoCache) { TestDelegate d; { TestURLRequest r(test_server_.GetURL(""), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -412,6 +434,7 @@ TEST_F(URLRequestTestHTTP, GetTest) { TestDelegate d; { TestURLRequest r(test_server_.GetURL(""), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -451,8 +474,15 @@ TEST_F(URLRequestTestHTTP, GetZippedTest) { std::string test_file = base::StringPrintf("compressedfiles/BullRunSpeech.txt?%c", test_parameters[i]); - TestURLRequest r(test_server_.GetURL(test_file), &d); + TestNetworkDelegate network_delegate; // must outlive URLRequest + scoped_refptr<TestURLRequestContext> context( + new TestURLRequestContext(true)); + context->set_network_delegate(&network_delegate); + context->Init(); + + TestURLRequest r(test_server_.GetURL(test_file), &d); + r.set_context(context); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -489,6 +519,7 @@ TEST_F(URLRequestTestHTTP, HTTPSToHTTPRedirectNoRefererTest) { TestDelegate d; TestURLRequest req(https_test_server.GetURL( "server-redirect?" + http_destination.spec()), &d); + req.set_context(default_context_); req.set_referrer("https://www.referrer.com/"); req.Start(); MessageLoop::current()->Run(); @@ -509,6 +540,7 @@ TEST_F(URLRequestTestHTTP, MultipleRedirectTest) { "server-redirect?" + middle_redirect_url.spec()); TestDelegate d; TestURLRequest req(original_url, &d); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -523,17 +555,27 @@ TEST_F(URLRequestTestHTTP, MultipleRedirectTest) { } class HTTPSRequestTest : public testing::Test { + public: + HTTPSRequestTest() : default_context_(new TestURLRequestContext(true)) { + default_context_->set_network_delegate(&default_network_delegate_); + default_context_->Init(); + } + virtual ~HTTPSRequestTest() {} + + protected: + TestNetworkDelegate default_network_delegate_; // must outlive URLRequest + scoped_refptr<TestURLRequestContext> default_context_; }; TEST_F(HTTPSRequestTest, HTTPSGetTest) { TestServer test_server(TestServer::TYPE_HTTPS, - FilePath(FILE_PATH_LITERAL("net/data/ssl"))); + FilePath(FILE_PATH_LITERAL("net/data/ssl"))); ASSERT_TRUE(test_server.Start()); TestDelegate d; { TestURLRequest r(test_server.GetURL(""), &d); - + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -554,7 +596,7 @@ TEST_F(HTTPSRequestTest, HTTPSMismatchedTest) { TestServer::HTTPSOptions https_options( TestServer::HTTPSOptions::CERT_MISMATCHED_NAME); TestServer test_server(https_options, - FilePath(FILE_PATH_LITERAL("net/data/ssl"))); + FilePath(FILE_PATH_LITERAL("net/data/ssl"))); ASSERT_TRUE(test_server.Start()); bool err_allowed = true; @@ -563,6 +605,7 @@ TEST_F(HTTPSRequestTest, HTTPSMismatchedTest) { { d.set_allow_certificate_errors(err_allowed); TestURLRequest r(test_server.GetURL(""), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -586,7 +629,7 @@ TEST_F(HTTPSRequestTest, HTTPSExpiredTest) { TestServer::HTTPSOptions https_options( TestServer::HTTPSOptions::CERT_EXPIRED); TestServer test_server(https_options, - FilePath(FILE_PATH_LITERAL("net/data/ssl"))); + FilePath(FILE_PATH_LITERAL("net/data/ssl"))); ASSERT_TRUE(test_server.Start()); // Iterate from false to true, just so that we do the opposite of the @@ -597,6 +640,7 @@ TEST_F(HTTPSRequestTest, HTTPSExpiredTest) { { d.set_allow_certificate_errors(err_allowed); TestURLRequest r(test_server.GetURL(""), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -646,12 +690,13 @@ TEST_F(HTTPSRequestTest, ClientAuthTest) { TestServer::HTTPSOptions https_options; https_options.request_client_certificate = true; TestServer test_server(https_options, - FilePath(FILE_PATH_LITERAL("net/data/ssl"))); + FilePath(FILE_PATH_LITERAL("net/data/ssl"))); ASSERT_TRUE(test_server.Start()); SSLClientAuthTestDelegate d; { TestURLRequest r(test_server.GetURL(""), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -679,6 +724,7 @@ TEST_F(URLRequestTestHTTP, CancelTest) { TestDelegate d; { TestURLRequest r(GURL("http://www.google.com/"), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -701,6 +747,7 @@ TEST_F(URLRequestTestHTTP, CancelTest2) { TestDelegate d; { TestURLRequest r(test_server_.GetURL(""), &d); + r.set_context(default_context_); d.set_cancel_in_response_started(true); @@ -722,6 +769,7 @@ TEST_F(URLRequestTestHTTP, CancelTest3) { TestDelegate d; { TestURLRequest r(test_server_.GetURL(""), &d); + r.set_context(default_context_); d.set_cancel_in_received_data(true); @@ -746,6 +794,7 @@ TEST_F(URLRequestTestHTTP, CancelTest4) { TestDelegate d; { TestURLRequest r(test_server_.GetURL(""), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -768,13 +817,11 @@ TEST_F(URLRequestTestHTTP, CancelTest4) { TEST_F(URLRequestTestHTTP, CancelTest5) { ASSERT_TRUE(test_server_.Start()); - scoped_refptr<URLRequestContext> context(new TestURLRequestContext()); - // populate cache { TestDelegate d; URLRequest r(test_server_.GetURL("cachetime"), &d); - r.set_context(context); + r.set_context(default_context_); r.Start(); MessageLoop::current()->Run(); EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); @@ -784,7 +831,7 @@ TEST_F(URLRequestTestHTTP, CancelTest5) { { TestDelegate d; URLRequest r(test_server_.GetURL("cachetime"), &d); - r.set_context(context); + r.set_context(default_context_); r.Start(); r.Cancel(); MessageLoop::current()->Run(); @@ -812,6 +859,7 @@ TEST_F(URLRequestTestHTTP, PostEmptyTest) { TestDelegate d; { TestURLRequest r(test_server_.GetURL("echo"), &d); + r.set_context(default_context_); r.set_method("POST"); r.Start(); @@ -833,6 +881,7 @@ TEST_F(URLRequestTestHTTP, PostFileTest) { TestDelegate d; { TestURLRequest r(test_server_.GetURL("echo"), &d); + r.set_context(default_context_); r.set_method("POST"); FilePath dir; @@ -881,6 +930,7 @@ TEST_F(URLRequestTestHTTP, TestPostChunkedDataBeforeStart) { TestDelegate d; { TestURLRequest r(test_server_.GetURL("echo"), &d); + r.set_context(default_context_); r.EnableChunkedUpload(); r.set_method("POST"); AddChunksToUpload(&r); @@ -899,6 +949,7 @@ TEST_F(URLRequestTestHTTP, TestPostChunkedDataAfterStart) { TestDelegate d; { TestURLRequest r(test_server_.GetURL("echo"), &d); + r.set_context(default_context_); r.EnableChunkedUpload(); r.set_method("POST"); r.Start(); @@ -916,6 +967,7 @@ TEST_F(URLRequestTest, AboutBlankTest) { TestDelegate d; { TestURLRequest r(GURL("about:blank"), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -955,6 +1007,7 @@ TEST_F(URLRequestTest, DataURLImageTest) { "moRWRNZr/F1KfVMjW+IKEnv2FwZfKdzt0BQR6lClcZR0EfEXEfv/G6W9iLiIyCoReV5En" "hORIBHx+ufPj/gLB/zGI/G4Bk0AAAAASUVORK5CYII="), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -977,6 +1030,7 @@ TEST_F(URLRequestTest, FileTest) { TestDelegate d; { TestURLRequest r(app_url, &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -1017,6 +1071,7 @@ TEST_F(URLRequestTest, FileTestFullSpecifiedRange) { TestDelegate d; { TestURLRequest r(temp_url, &d); + r.set_context(default_context_); HttpRequestHeaders headers; headers.SetHeader(HttpRequestHeaders::kRange, @@ -1061,6 +1116,7 @@ TEST_F(URLRequestTest, FileTestHalfSpecifiedRange) { TestDelegate d; { TestURLRequest r(temp_url, &d); + r.set_context(default_context_); HttpRequestHeaders headers; headers.SetHeader(HttpRequestHeaders::kRange, @@ -1098,6 +1154,7 @@ TEST_F(URLRequestTest, FileTestMultipleRanges) { TestDelegate d; { TestURLRequest r(temp_url, &d); + r.set_context(default_context_); HttpRequestHeaders headers; headers.SetHeader(HttpRequestHeaders::kRange, @@ -1117,6 +1174,7 @@ TEST_F(URLRequestTest, InvalidUrlTest) { TestDelegate d; { TestURLRequest r(GURL("invalid url"), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -1131,6 +1189,7 @@ TEST_F(URLRequestTestHTTP, ResponseHeadersTest) { TestDelegate d; TestURLRequest req(test_server_.GetURL("files/with-headers.html"), &d); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1192,6 +1251,7 @@ TEST_F(URLRequestTest, ResolveShortcutTest) { TestDelegate d; { TestURLRequest r(FilePathToFileURL(FilePath(lnk_path)), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -1230,6 +1290,7 @@ TEST_F(URLRequestTestHTTP, ContentTypeNormalizationTest) { TestDelegate d; TestURLRequest req(test_server_.GetURL( "files/content-type-normalization.html"), &d); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1255,6 +1316,7 @@ TEST_F(URLRequestTest, FileDirCancelTest) { file_path = file_path.Append(FILE_PATH_LITERAL("data")); TestURLRequest req(FilePathToFileURL(file_path), &d); + req.set_context(default_context_); req.Start(); EXPECT_TRUE(req.is_pending()); @@ -1280,6 +1342,7 @@ TEST_F(URLRequestTest, FileDirRedirectNoCrash) { TestDelegate d; TestURLRequest req(FilePathToFileURL(path), &d); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1294,6 +1357,7 @@ TEST_F(URLRequestTest, FileDirRedirectNoCrash) { TEST_F(URLRequestTest, FileDirRedirectSingleSlash) { TestDelegate d; TestURLRequest req(GURL("file:///"), &d); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1308,6 +1372,7 @@ TEST_F(URLRequestTestHTTP, RestrictRedirects) { TestDelegate d; TestURLRequest req(test_server_.GetURL( "files/redirect-to-file.html"), &d); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1321,6 +1386,7 @@ TEST_F(URLRequestTestHTTP, RedirectToInvalidURL) { TestDelegate d; TestURLRequest req(test_server_.GetURL( "files/redirect-to-invalid-url.html"), &d); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1332,8 +1398,8 @@ TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) { ASSERT_TRUE(test_server_.Start()); TestDelegate d; - TestURLRequest req(test_server_.GetURL( - "echoheader?Referer"), &d); + TestURLRequest req(test_server_.GetURL("echoheader?Referer"), &d); + req.set_context(default_context_); req.set_referrer("http://user:pass@foo.com/"); req.Start(); MessageLoop::current()->Run(); @@ -1347,8 +1413,8 @@ TEST_F(URLRequestTestHTTP, CancelRedirect) { TestDelegate d; { d.set_cancel_in_received_redirect(true); - TestURLRequest req(test_server_.GetURL( - "files/redirect-test.html"), &d); + TestURLRequest req(test_server_.GetURL("files/redirect-test.html"), &d); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1365,8 +1431,8 @@ TEST_F(URLRequestTestHTTP, DeferredRedirect) { TestDelegate d; { d.set_quit_on_redirect(true); - TestURLRequest req(test_server_.GetURL( - "files/redirect-test.html"), &d); + TestURLRequest req(test_server_.GetURL("files/redirect-test.html"), &d); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1398,8 +1464,8 @@ TEST_F(URLRequestTestHTTP, CancelDeferredRedirect) { TestDelegate d; { d.set_quit_on_redirect(true); - TestURLRequest req(test_server_.GetURL( - "files/redirect-test.html"), &d); + TestURLRequest req(test_server_.GetURL("files/redirect-test.html"), &d); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1418,13 +1484,11 @@ TEST_F(URLRequestTestHTTP, CancelDeferredRedirect) { TEST_F(URLRequestTestHTTP, VaryHeader) { ASSERT_TRUE(test_server_.Start()); - scoped_refptr<URLRequestContext> context(new TestURLRequestContext()); - // populate the cache { TestDelegate d; URLRequest req(test_server_.GetURL("echoheadercache?foo"), &d); - req.set_context(context); + req.set_context(default_context_); HttpRequestHeaders headers; headers.SetHeader("foo", "1"); req.SetExtraRequestHeaders(headers); @@ -1433,10 +1497,15 @@ TEST_F(URLRequestTestHTTP, VaryHeader) { } // expect a cache hit + + // TODO(battre): We have a sequence OnBeforeSendHeaders -> OnResponseStarted + // here because the cache hit does not trigger a OnRequestSent event. + // Do we need it? + { TestDelegate d; URLRequest req(test_server_.GetURL("echoheadercache?foo"), &d); - req.set_context(context); + req.set_context(default_context_); HttpRequestHeaders headers; headers.SetHeader("foo", "1"); req.SetExtraRequestHeaders(headers); @@ -1450,7 +1519,7 @@ TEST_F(URLRequestTestHTTP, VaryHeader) { { TestDelegate d; URLRequest req(test_server_.GetURL("echoheadercache?foo"), &d); - req.set_context(context); + req.set_context(default_context_); HttpRequestHeaders headers; headers.SetHeader("foo", "2"); req.SetExtraRequestHeaders(headers); @@ -1464,8 +1533,6 @@ TEST_F(URLRequestTestHTTP, VaryHeader) { TEST_F(URLRequestTestHTTP, BasicAuth) { ASSERT_TRUE(test_server_.Start()); - scoped_refptr<URLRequestContext> context(new TestURLRequestContext()); - // populate the cache { TestDelegate d; @@ -1473,7 +1540,7 @@ TEST_F(URLRequestTestHTTP, BasicAuth) { d.set_password(kSecret); URLRequest r(test_server_.GetURL("auth-basic"), &d); - r.set_context(context); + r.set_context(default_context_); r.Start(); MessageLoop::current()->Run(); @@ -1490,7 +1557,7 @@ TEST_F(URLRequestTestHTTP, BasicAuth) { d.set_password(kSecret); URLRequest r(test_server_.GetURL("auth-basic"), &d); - r.set_context(context); + r.set_context(default_context_); r.set_load_flags(LOAD_VALIDATE_CACHE); r.Start(); @@ -1514,7 +1581,12 @@ TEST_F(URLRequestTestHTTP, BasicAuthWithCookies) { // Request a page that will give a 401 containing a Set-Cookie header. // Verify that when the transaction is restarted, it includes the new cookie. { - scoped_refptr<URLRequestContext> context(new TestURLRequestContext()); + TestNetworkDelegate network_delegate; // must outlive URLRequest + scoped_refptr<TestURLRequestContext> context( + new TestURLRequestContext(true)); + context->set_network_delegate(&network_delegate); + context->Init(); + TestDelegate d; d.set_username(kUser); d.set_password(kSecret); @@ -1535,7 +1607,12 @@ TEST_F(URLRequestTestHTTP, BasicAuthWithCookies) { // Same test as above, except this time the restart is initiated earlier // (without user intervention since identity is embedded in the URL). { - scoped_refptr<URLRequestContext> context(new TestURLRequestContext()); + TestNetworkDelegate network_delegate; // must outlive URLRequest + scoped_refptr<TestURLRequestContext> context( + new TestURLRequestContext(true)); + context->set_network_delegate(&network_delegate); + context->Init(); + TestDelegate d; GURL::Replacements replacements; @@ -1563,13 +1640,11 @@ TEST_F(URLRequestTest, DoNotSendCookies) { TestServer test_server(TestServer::TYPE_HTTP, FilePath()); ASSERT_TRUE(test_server.Start()); - scoped_refptr<URLRequestContext> context(new TestURLRequestContext()); - // Set up a cookie. { TestDelegate d; URLRequest req(test_server.GetURL("set-cookie?CookieToNotSend=1"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); EXPECT_EQ(0, d.blocked_get_cookies_count()); @@ -1580,7 +1655,7 @@ TEST_F(URLRequestTest, DoNotSendCookies) { { TestDelegate d; TestURLRequest req(test_server.GetURL("echoheader?Cookie"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1595,7 +1670,7 @@ TEST_F(URLRequestTest, DoNotSendCookies) { TestDelegate d; TestURLRequest req(test_server.GetURL("echoheader?Cookie"), &d); req.set_load_flags(LOAD_DO_NOT_SEND_COOKIES); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1612,14 +1687,11 @@ TEST_F(URLRequestTest, DoNotSaveCookies) { TestServer test_server(TestServer::TYPE_HTTP, FilePath()); ASSERT_TRUE(test_server.Start()); - scoped_refptr<URLRequestContext> context(new TestURLRequestContext()); - // Set up a cookie. { TestDelegate d; - URLRequest req(test_server.GetURL("set-cookie?CookieToNotUpdate=2"), - &d); - req.set_context(context); + URLRequest req(test_server.GetURL("set-cookie?CookieToNotUpdate=2"), &d); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1634,7 +1706,7 @@ TEST_F(URLRequestTest, DoNotSaveCookies) { URLRequest req(test_server.GetURL( "set-cookie?CookieToNotSave=1&CookieToNotUpdate=1"), &d); req.set_load_flags(LOAD_DO_NOT_SAVE_COOKIES); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1649,7 +1721,7 @@ TEST_F(URLRequestTest, DoNotSaveCookies) { { TestDelegate d; TestURLRequest req(test_server.GetURL("echoheader?Cookie"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1668,13 +1740,11 @@ TEST_F(URLRequestTest, DoNotSendCookies_ViaPolicy) { TestServer test_server(TestServer::TYPE_HTTP, FilePath()); ASSERT_TRUE(test_server.Start()); - scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext()); - // Set up a cookie. { TestDelegate d; URLRequest req(test_server.GetURL("set-cookie?CookieToNotSend=1"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1686,7 +1756,7 @@ TEST_F(URLRequestTest, DoNotSendCookies_ViaPolicy) { { TestDelegate d; TestURLRequest req(test_server.GetURL("echoheader?Cookie"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1702,7 +1772,7 @@ TEST_F(URLRequestTest, DoNotSendCookies_ViaPolicy) { TestDelegate d; d.set_cookie_options(TestDelegate::NO_GET_COOKIES); TestURLRequest req(test_server.GetURL("echoheader?Cookie"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1718,14 +1788,11 @@ TEST_F(URLRequestTest, DoNotSaveCookies_ViaPolicy) { TestServer test_server(TestServer::TYPE_HTTP, FilePath()); ASSERT_TRUE(test_server.Start()); - scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext()); - // Set up a cookie. { TestDelegate d; - URLRequest req(test_server.GetURL("set-cookie?CookieToNotUpdate=2"), - &d); - req.set_context(context); + URLRequest req(test_server.GetURL("set-cookie?CookieToNotUpdate=2"), &d); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1739,7 +1806,7 @@ TEST_F(URLRequestTest, DoNotSaveCookies_ViaPolicy) { d.set_cookie_options(TestDelegate::NO_SET_COOKIE); URLRequest req(test_server.GetURL( "set-cookie?CookieToNotSave=1&CookieToNotUpdate=1"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1753,7 +1820,7 @@ TEST_F(URLRequestTest, DoNotSaveCookies_ViaPolicy) { { TestDelegate d; TestURLRequest req(test_server.GetURL("echoheader?Cookie"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1771,13 +1838,11 @@ TEST_F(URLRequestTest, DoNotSaveEmptyCookies) { TestServer test_server(TestServer::TYPE_HTTP, FilePath()); ASSERT_TRUE(test_server.Start()); - scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext()); - // Set up an empty cookie. { TestDelegate d; URLRequest req(test_server.GetURL("set-cookie"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1791,13 +1856,11 @@ TEST_F(URLRequestTest, DoNotSendCookies_ViaPolicy_Async) { TestServer test_server(TestServer::TYPE_HTTP, FilePath()); ASSERT_TRUE(test_server.Start()); - scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext()); - // Set up a cookie. { TestDelegate d; URLRequest req(test_server.GetURL("set-cookie?CookieToNotSend=1"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1809,7 +1872,7 @@ TEST_F(URLRequestTest, DoNotSendCookies_ViaPolicy_Async) { { TestDelegate d; TestURLRequest req(test_server.GetURL("echoheader?Cookie"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1825,7 +1888,7 @@ TEST_F(URLRequestTest, DoNotSendCookies_ViaPolicy_Async) { TestDelegate d; d.set_cookie_options(TestDelegate::NO_GET_COOKIES); TestURLRequest req(test_server.GetURL("echoheader?Cookie"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1841,14 +1904,11 @@ TEST_F(URLRequestTest, DoNotSaveCookies_ViaPolicy_Async) { TestServer test_server(TestServer::TYPE_HTTP, FilePath()); ASSERT_TRUE(test_server.Start()); - scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext()); - // Set up a cookie. { TestDelegate d; - URLRequest req(test_server.GetURL("set-cookie?CookieToNotUpdate=2"), - &d); - req.set_context(context); + URLRequest req(test_server.GetURL("set-cookie?CookieToNotUpdate=2"), &d); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1862,7 +1922,7 @@ TEST_F(URLRequestTest, DoNotSaveCookies_ViaPolicy_Async) { d.set_cookie_options(TestDelegate::NO_SET_COOKIE); URLRequest req(test_server.GetURL( "set-cookie?CookieToNotSave=1&CookieToNotUpdate=1"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1875,7 +1935,7 @@ TEST_F(URLRequestTest, DoNotSaveCookies_ViaPolicy_Async) { { TestDelegate d; TestURLRequest req(test_server.GetURL("echoheader?Cookie"), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); @@ -1893,15 +1953,13 @@ TEST_F(URLRequestTest, CookiePolicy_ForceSession) { TestServer test_server(TestServer::TYPE_HTTP, FilePath()); ASSERT_TRUE(test_server.Start()); - scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext()); - // Set up a cookie. { TestDelegate d; d.set_cookie_options(TestDelegate::FORCE_SESSION); URLRequest req(test_server.GetURL( "set-cookie?A=1;expires=\"Fri, 05 Feb 2010 23:42:01 GMT\""), &d); - req.set_context(context); + req.set_context(default_context_); req.Start(); // Triggers an asynchronous cookie policy check. MessageLoop::current()->Run(); @@ -1912,7 +1970,7 @@ TEST_F(URLRequestTest, CookiePolicy_ForceSession) { // Now, check the cookie store. CookieList cookies = - context->cookie_store()->GetCookieMonster()->GetAllCookies(); + default_context_->cookie_store()->GetCookieMonster()->GetAllCookies(); EXPECT_EQ(1U, cookies.size()); EXPECT_FALSE(cookies[0].IsPersistent()); } @@ -1928,6 +1986,7 @@ TEST_F(URLRequestTestHTTP, Post302RedirectGet) { TestDelegate d; TestURLRequest req(test_server_.GetURL("files/redirect-to-echoall"), &d); + req.set_context(default_context_); req.set_method("POST"); req.set_upload(CreateSimpleUploadData(kData)); @@ -1969,8 +2028,8 @@ TEST_F(URLRequestTestHTTP, Post307RedirectPost) { const char kData[] = "hello world"; TestDelegate d; - TestURLRequest req(test_server_.GetURL("files/redirect307-to-echo"), - &d); + TestURLRequest req(test_server_.GetURL("files/redirect307-to-echo"), &d); + req.set_context(default_context_); req.set_method("POST"); req.set_upload(CreateSimpleUploadData(kData).get()); HttpRequestHeaders headers; @@ -2183,6 +2242,7 @@ TEST_F(URLRequestTest, Intercept) { TestDelegate d; TestURLRequest req(GURL("http://test_intercept/foo"), &d); + req.set_context(default_context_); URLRequest::UserData* user_data0 = new URLRequest::UserData(); URLRequest::UserData* user_data1 = new URLRequest::UserData(); URLRequest::UserData* user_data2 = new URLRequest::UserData(); @@ -2224,6 +2284,7 @@ TEST_F(URLRequestTest, InterceptRedirect) { TestDelegate d; TestURLRequest req(GURL("http://test_intercept/foo"), &d); + req.set_context(default_context_); req.set_method("GET"); req.Start(); MessageLoop::current()->Run(); @@ -2257,6 +2318,7 @@ TEST_F(URLRequestTest, InterceptServerError) { TestDelegate d; TestURLRequest req(GURL("http://test_intercept/foo"), &d); + req.set_context(default_context_); req.set_method("GET"); req.Start(); MessageLoop::current()->Run(); @@ -2286,6 +2348,7 @@ TEST_F(URLRequestTest, InterceptNetworkError) { TestDelegate d; TestURLRequest req(GURL("http://test_intercept/foo"), &d); + req.set_context(default_context_); req.set_method("GET"); req.Start(); MessageLoop::current()->Run(); @@ -2315,6 +2378,7 @@ TEST_F(URLRequestTest, InterceptRestartRequired) { TestDelegate d; TestURLRequest req(GURL("http://test_intercept/foo"), &d); + req.set_context(default_context_); req.set_method("GET"); req.Start(); MessageLoop::current()->Run(); @@ -2346,6 +2410,7 @@ TEST_F(URLRequestTest, InterceptRespectsCancelMain) { TestDelegate d; TestURLRequest req(GURL("http://test_intercept/foo"), &d); + req.set_context(default_context_); req.set_method("GET"); req.Start(); MessageLoop::current()->Run(); @@ -2377,6 +2442,7 @@ TEST_F(URLRequestTest, InterceptRespectsCancelRedirect) { TestDelegate d; TestURLRequest req(GURL("http://test_intercept/foo"), &d); + req.set_context(default_context_); req.set_method("GET"); req.Start(); MessageLoop::current()->Run(); @@ -2402,6 +2468,7 @@ TEST_F(URLRequestTest, InterceptRespectsCancelFinal) { TestDelegate d; TestURLRequest req(GURL("http://test_intercept/foo"), &d); + req.set_context(default_context_); req.set_method("GET"); req.Start(); MessageLoop::current()->Run(); @@ -2428,6 +2495,7 @@ TEST_F(URLRequestTest, InterceptRespectsCancelInRestart) { TestDelegate d; TestURLRequest req(GURL("http://test_intercept/foo"), &d); + req.set_context(default_context_); req.set_method("GET"); req.Start(); MessageLoop::current()->Run(); @@ -2453,17 +2521,20 @@ TEST_F(URLRequestTest, Identifiers) { // Check that a failure to connect to the proxy is reported to the network // delegate. TEST_F(URLRequestTest, NetworkDelegateProxyError) { - TestDelegate d; - TestNetworkDelegate network_delegate; - TestURLRequest req(GURL("http://example.com"), &d); - req.set_method("GET"); - scoped_ptr<MockHostResolverBase> host_resolver(new MockHostResolver); host_resolver->rules()->AddSimulatedFailure("*"); - scoped_refptr<TestURLRequestContext> context( - new TestURLRequestContext("myproxy:70", host_resolver.release())); + + TestNetworkDelegate network_delegate; // must outlive URLRequests + scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext(true)); context->set_network_delegate(&network_delegate); + context->SetProxyFromString("myproxy:70"); + context->set_host_resolver(host_resolver.release()); + context->Init(); + + TestDelegate d; + TestURLRequest req(GURL("http://example.com"), &d); req.set_context(context); + req.set_method("GET"); req.Start(); MessageLoop::current()->Run(); @@ -2484,15 +2555,13 @@ TEST_F(URLRequestTest, DoNotOverrideReferrer) { TestServer test_server(TestServer::TYPE_HTTP, FilePath()); ASSERT_TRUE(test_server.Start()); - scoped_refptr<URLRequestContext> context(new TestURLRequestContext()); - // If extra headers contain referer and the request contains a referer, // only the latter shall be respected. { TestDelegate d; TestURLRequest req(test_server.GetURL("echoheader?Referer"), &d); req.set_referrer("http://foo.com/"); - req.set_context(context); + req.set_context(default_context_); HttpRequestHeaders headers; headers.SetHeader(HttpRequestHeaders::kReferer, "http://bar.com/"); @@ -2509,7 +2578,7 @@ TEST_F(URLRequestTest, DoNotOverrideReferrer) { { TestDelegate d; TestURLRequest req(test_server.GetURL("echoheader?Referer"), &d); - req.set_context(context); + req.set_context(default_context_); HttpRequestHeaders headers; headers.SetHeader(HttpRequestHeaders::kReferer, "http://bar.com/"); @@ -2526,16 +2595,14 @@ TEST_F(URLRequestTest, DoNotOverrideReferrer) { // Make sure that net::NetworkDelegate::NotifyCompleted is called if // content is empty. TEST_F(URLRequestTest, RequestCompletionForEmptyResponse) { - TestNetworkDelegate network_delegate; - scoped_refptr<URLRequestContext> context(new TestURLRequestContext()); - context->set_network_delegate(&network_delegate); TestDelegate d; TestURLRequest req(GURL("data:,"), &d); - req.set_context(context); + req.set_context(new TestURLRequestContext()); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); EXPECT_EQ("", d.data_received()); - EXPECT_EQ(1, network_delegate.completed_requests()); + EXPECT_EQ(1, default_network_delegate_.completed_requests()); } class URLRequestTestFTP : public URLRequestTest { @@ -2554,6 +2621,7 @@ TEST_F(URLRequestTestFTP, FLAKY_FTPDirectoryListing) { TestDelegate d; { TestURLRequest r(test_server_.GetURL("/"), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -2580,6 +2648,7 @@ TEST_F(URLRequestTestFTP, FLAKY_FTPGetTestAnonymous) { TestDelegate d; { TestURLRequest r(test_server_.GetURL("/LICENSE"), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -2611,6 +2680,7 @@ TEST_F(URLRequestTestFTP, FLAKY_FTPGetTest) { TestURLRequest r( test_server_.GetURLWithUserAndPassword("/LICENSE", "chrome", "chrome"), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -2644,6 +2714,7 @@ TEST_F(URLRequestTestFTP, FLAKY_FTPCheckWrongPassword) { "chrome", "wrong_password"), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -2677,6 +2748,7 @@ TEST_F(URLRequestTestFTP, FLAKY_FTPCheckWrongPasswordRestart) { "chrome", "wrong_password"), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -2706,6 +2778,7 @@ TEST_F(URLRequestTestFTP, FLAKY_FTPCheckWrongUser) { "wrong_user", "chrome"), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -2739,6 +2812,7 @@ TEST_F(URLRequestTestFTP, FLAKY_FTPCheckWrongUserRestart) { "wrong_user", "chrome"), &d); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -2770,6 +2844,7 @@ TEST_F(URLRequestTestFTP, FLAKY_FTPCacheURLCredentials) { "chrome", "chrome"), d.get()); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -2788,6 +2863,7 @@ TEST_F(URLRequestTestFTP, FLAKY_FTPCacheURLCredentials) { { // This request should use cached identity from previous request. TestURLRequest r(test_server_.GetURL("/LICENSE"), d.get()); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -2822,6 +2898,7 @@ TEST_F(URLRequestTestFTP, FLAKY_FTPCacheLoginBoxCredentials) { "chrome", "wrong_password"), d.get()); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -2843,6 +2920,7 @@ TEST_F(URLRequestTestFTP, FLAKY_FTPCacheLoginBoxCredentials) { // Don't pass wrong credentials in the URL, they would override valid cached // ones. TestURLRequest r(test_server_.GetURL("/LICENSE"), d.get()); + r.set_context(default_context_); r.Start(); EXPECT_TRUE(r.is_pending()); @@ -2862,10 +2940,14 @@ TEST_F(URLRequestTestFTP, FLAKY_FTPCacheLoginBoxCredentials) { TEST_F(URLRequestTestHTTP, DefaultAcceptLanguage) { ASSERT_TRUE(test_server_.Start()); + TestNetworkDelegate network_delegate; // must outlive URLRequests + scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext(true)); + context->set_network_delegate(&network_delegate); + context->set_accept_language("en"); + context->Init(); + TestDelegate d; TestURLRequest req(test_server_.GetURL("echoheader?Accept-Language"), &d); - scoped_refptr<URLRequestContext> context = new TestURLRequestContext; - context->set_accept_language("en"); req.set_context(context); req.Start(); MessageLoop::current()->Run(); @@ -2876,11 +2958,16 @@ TEST_F(URLRequestTestHTTP, DefaultAcceptLanguage) { TEST_F(URLRequestTestHTTP, EmptyAcceptLanguage) { ASSERT_TRUE(test_server_.Start()); - TestDelegate d; - TestURLRequest req(test_server_.GetURL("echoheader?Accept-Language"), - &d); - scoped_refptr<URLRequestContext> context = new TestURLRequestContext; + TestNetworkDelegate network_delegate; // must outlive URLRequests + scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext(true)); + context->set_network_delegate(&network_delegate); + context->Init(); + // We override the language after initialization because empty entries + // get overridden by Init(). context->set_accept_language(""); + + TestDelegate d; + TestURLRequest req(test_server_.GetURL("echoheader?Accept-Language"), &d); req.set_context(context); req.Start(); MessageLoop::current()->Run(); @@ -2893,9 +2980,8 @@ TEST_F(URLRequestTestHTTP, OverrideAcceptLanguage) { ASSERT_TRUE(test_server_.Start()); TestDelegate d; - TestURLRequest - req(test_server_.GetURL("echoheader?Accept-Language"), &d); - req.set_context(new TestURLRequestContext()); + TestURLRequest req(test_server_.GetURL("echoheader?Accept-Language"), &d); + req.set_context(default_context_); HttpRequestHeaders headers; headers.SetHeader(HttpRequestHeaders::kAcceptLanguage, "ru"); req.SetExtraRequestHeaders(headers); @@ -2909,9 +2995,8 @@ TEST_F(URLRequestTestHTTP, DefaultAcceptEncoding) { ASSERT_TRUE(test_server_.Start()); TestDelegate d; - TestURLRequest - req(test_server_.GetURL("echoheader?Accept-Encoding"), &d); - req.set_context(new TestURLRequestContext()); + TestURLRequest req(test_server_.GetURL("echoheader?Accept-Encoding"), &d); + req.set_context(default_context_); HttpRequestHeaders headers; req.SetExtraRequestHeaders(headers); req.Start(); @@ -2925,9 +3010,8 @@ TEST_F(URLRequestTestHTTP, OverrideAcceptEncoding) { ASSERT_TRUE(test_server_.Start()); TestDelegate d; - TestURLRequest - req(test_server_.GetURL("echoheader?Accept-Encoding"), &d); - req.set_context(new TestURLRequestContext()); + TestURLRequest req(test_server_.GetURL("echoheader?Accept-Encoding"), &d); + req.set_context(default_context_); HttpRequestHeaders headers; headers.SetHeader(HttpRequestHeaders::kAcceptEncoding, "identity"); req.SetExtraRequestHeaders(headers); @@ -2941,10 +3025,14 @@ TEST_F(URLRequestTestHTTP, OverrideAcceptEncoding) { TEST_F(URLRequestTestHTTP, DefaultAcceptCharset) { ASSERT_TRUE(test_server_.Start()); + TestNetworkDelegate network_delegate; // must outlive URLRequests + scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext(true)); + context->set_network_delegate(&network_delegate); + context->set_accept_charset("en"); + context->Init(); + TestDelegate d; TestURLRequest req(test_server_.GetURL("echoheader?Accept-Charset"), &d); - scoped_refptr<URLRequestContext> context = new TestURLRequestContext; - context->set_accept_charset("en"); req.set_context(context); req.Start(); MessageLoop::current()->Run(); @@ -2955,11 +3043,16 @@ TEST_F(URLRequestTestHTTP, DefaultAcceptCharset) { TEST_F(URLRequestTestHTTP, EmptyAcceptCharset) { ASSERT_TRUE(test_server_.Start()); - TestDelegate d; - TestURLRequest req(test_server_.GetURL("echoheader?Accept-Charset"), - &d); - scoped_refptr<URLRequestContext> context = new TestURLRequestContext; + TestNetworkDelegate network_delegate; // must outlive URLRequests + scoped_refptr<TestURLRequestContext> context(new TestURLRequestContext(true)); + context->set_network_delegate(&network_delegate); + context->Init(); + // We override the accepted charset after initialization because empty + // entries get overridden otherwise. context->set_accept_charset(""); + + TestDelegate d; + TestURLRequest req(test_server_.GetURL("echoheader?Accept-Charset"), &d); req.set_context(context); req.Start(); MessageLoop::current()->Run(); @@ -2972,9 +3065,8 @@ TEST_F(URLRequestTestHTTP, OverrideAcceptCharset) { ASSERT_TRUE(test_server_.Start()); TestDelegate d; - TestURLRequest - req(test_server_.GetURL("echoheader?Accept-Charset"), &d); - req.set_context(new TestURLRequestContext()); + TestURLRequest req(test_server_.GetURL("echoheader?Accept-Charset"), &d); + req.set_context(default_context_); HttpRequestHeaders headers; headers.SetHeader(HttpRequestHeaders::kAcceptCharset, "koi-8r"); req.SetExtraRequestHeaders(headers); @@ -2989,7 +3081,7 @@ TEST_F(URLRequestTestHTTP, DefaultUserAgent) { TestDelegate d; TestURLRequest req(test_server_.GetURL("echoheader?User-Agent"), &d); - req.set_context(new TestURLRequestContext()); + req.set_context(default_context_); req.Start(); MessageLoop::current()->Run(); EXPECT_EQ(req.context()->GetUserAgent(req.url()), d.data_received()); @@ -3001,9 +3093,8 @@ TEST_F(URLRequestTestHTTP, OverrideUserAgent) { ASSERT_TRUE(test_server_.Start()); TestDelegate d; - TestURLRequest - req(test_server_.GetURL("echoheader?User-Agent"), &d); - req.set_context(new TestURLRequestContext()); + TestURLRequest req(test_server_.GetURL("echoheader?User-Agent"), &d); + req.set_context(default_context_); HttpRequestHeaders headers; headers.SetHeader(HttpRequestHeaders::kUserAgent, "Lynx (textmode)"); req.SetExtraRequestHeaders(headers); |