Index: net/url_request/url_request_http_job_unittest.cc |
diff --git a/net/url_request/url_request_http_job_unittest.cc b/net/url_request/url_request_http_job_unittest.cc |
index 713ae608e40a4247fe371c6903a28b595dd29784..5958487c9e3403e6f00c0427b92020e5d994f4f6 100644 |
--- a/net/url_request/url_request_http_job_unittest.cc |
+++ b/net/url_request/url_request_http_job_unittest.cc |
@@ -22,12 +22,14 @@ |
#include "net/socket/socket_test_util.h" |
#include "net/test/cert_test_util.h" |
#include "net/url_request/url_request.h" |
+#include "net/url_request/url_request_job_factory_impl.h" |
#include "net/url_request/url_request_status.h" |
#include "net/url_request/url_request_test_util.h" |
#include "net/websockets/websocket_handshake_stream_base.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "url/gurl.h" |
+#include "url/url_constants.h" |
namespace net { |
@@ -52,11 +54,19 @@ class TestURLRequestHttpJob : public URLRequestHttpJob { |
class URLRequestHttpJobTest : public ::testing::Test { |
protected: |
- URLRequestHttpJobTest() |
- : req_(context_.CreateRequest(GURL("http://www.example.com"), |
- DEFAULT_PRIORITY, |
- &delegate_)) { |
+ URLRequestHttpJobTest() : context_(true) { |
context_.set_http_transaction_factory(&network_layer_); |
+ |
+ // The |test_job_factory_| takes ownership of the interceptor. |
+ test_job_interceptor_ = new TestJobInterceptor(); |
+ EXPECT_TRUE(test_job_factory_.SetProtocolHandler( |
+ url::kHttpScheme, make_scoped_ptr(test_job_interceptor_))); |
+ context_.set_job_factory(&test_job_factory_); |
+ |
+ context_.Init(); |
+ |
+ req_ = context_.CreateRequest(GURL("http://www.example.com"), |
+ DEFAULT_PRIORITY, &delegate_); |
} |
bool TransactionAcceptsSdchEncoding() { |
@@ -91,6 +101,11 @@ class URLRequestHttpJobTest : public ::testing::Test { |
} |
MockNetworkLayer network_layer_; |
+ |
+ // |test_job_interceptor_| is owned by |test_job_factory_|. |
+ TestJobInterceptor* test_job_interceptor_; |
+ URLRequestJobFactoryImpl test_job_factory_; |
+ |
TestURLRequestContext context_; |
TestDelegate delegate_; |
scoped_ptr<URLRequest> req_; |
@@ -543,7 +558,7 @@ TEST_F(URLRequestHttpJobTest, TestCancelWhileReadingCookies) { |
} |
// Make sure that SetPriority actually sets the URLRequestHttpJob's |
-// priority, both before and after start. |
+// priority, before start. Other tests handle the after start case. |
TEST_F(URLRequestHttpJobTest, SetPriorityBasic) { |
scoped_ptr<TestURLRequestHttpJob> job(new TestURLRequestHttpJob(req_.get())); |
EXPECT_EQ(DEFAULT_PRIORITY, job->priority()); |
@@ -553,23 +568,18 @@ TEST_F(URLRequestHttpJobTest, SetPriorityBasic) { |
job->SetPriority(LOW); |
EXPECT_EQ(LOW, job->priority()); |
- |
- job->Start(); |
- EXPECT_EQ(LOW, job->priority()); |
- |
- job->SetPriority(MEDIUM); |
- EXPECT_EQ(MEDIUM, job->priority()); |
} |
// Make sure that URLRequestHttpJob passes on its priority to its |
// transaction on start. |
TEST_F(URLRequestHttpJobTest, SetTransactionPriorityOnStart) { |
- scoped_ptr<TestURLRequestHttpJob> job(new TestURLRequestHttpJob(req_.get())); |
- job->SetPriority(LOW); |
+ test_job_interceptor_->set_main_intercept_job( |
+ make_scoped_ptr(new TestURLRequestHttpJob(req_.get()))); |
+ req_->SetPriority(LOW); |
EXPECT_FALSE(network_layer_.last_transaction()); |
- job->Start(); |
+ req_->Start(); |
ASSERT_TRUE(network_layer_.last_transaction()); |
EXPECT_EQ(LOW, network_layer_.last_transaction()->priority()); |
@@ -578,13 +588,14 @@ TEST_F(URLRequestHttpJobTest, SetTransactionPriorityOnStart) { |
// Make sure that URLRequestHttpJob passes on its priority updates to |
// its transaction. |
TEST_F(URLRequestHttpJobTest, SetTransactionPriority) { |
- scoped_ptr<TestURLRequestHttpJob> job(new TestURLRequestHttpJob(req_.get())); |
- job->SetPriority(LOW); |
- job->Start(); |
+ test_job_interceptor_->set_main_intercept_job( |
+ make_scoped_ptr(new TestURLRequestHttpJob(req_.get()))); |
+ req_->SetPriority(LOW); |
+ req_->Start(); |
ASSERT_TRUE(network_layer_.last_transaction()); |
EXPECT_EQ(LOW, network_layer_.last_transaction()->priority()); |
- job->SetPriority(HIGHEST); |
+ req_->SetPriority(HIGHEST); |
EXPECT_EQ(HIGHEST, network_layer_.last_transaction()->priority()); |
} |
@@ -592,8 +603,9 @@ TEST_F(URLRequestHttpJobTest, SetTransactionPriority) { |
TEST_F(URLRequestHttpJobTest, SdchAdvertisementGet) { |
EnableSdch(); |
req_->set_method("GET"); // Redundant with default. |
- scoped_ptr<TestURLRequestHttpJob> job(new TestURLRequestHttpJob(req_.get())); |
- job->Start(); |
+ test_job_interceptor_->set_main_intercept_job( |
+ make_scoped_ptr(new TestURLRequestHttpJob(req_.get()))); |
+ req_->Start(); |
EXPECT_TRUE(TransactionAcceptsSdchEncoding()); |
} |
@@ -601,8 +613,9 @@ TEST_F(URLRequestHttpJobTest, SdchAdvertisementGet) { |
TEST_F(URLRequestHttpJobTest, SdchAdvertisementPost) { |
EnableSdch(); |
req_->set_method("POST"); |
- scoped_ptr<TestURLRequestHttpJob> job(new TestURLRequestHttpJob(req_.get())); |
- job->Start(); |
+ test_job_interceptor_->set_main_intercept_job( |
+ make_scoped_ptr(new TestURLRequestHttpJob(req_.get()))); |
+ req_->Start(); |
EXPECT_FALSE(TransactionAcceptsSdchEncoding()); |
} |
@@ -710,12 +723,6 @@ class URLRequestHttpJobWebSocketTest |
: req_(context_.CreateRequest(GURL("ws://www.example.com"), |
DEFAULT_PRIORITY, |
&delegate_)) { |
- // The TestNetworkDelegate expects a call to NotifyBeforeURLRequest before |
- // anything else happens. |
- GURL url("ws://localhost/"); |
- TestCompletionCallback dummy; |
- network_delegate_.NotifyBeforeURLRequest( |
- req_.get(), dummy.callback(), &url); |
} |
TestDelegate delegate_; |
@@ -741,6 +748,12 @@ class MockCreateHelper : public WebSocketHandshakeStreamBase::CreateHelper { |
bool)); |
}; |
+// iOS doesn't support WebSockets, so these tests fail with ERR_UNKOWN_SCHEME on |
+// iOS. |
+// TODO(mmenke): Hard coding features based on OS is regression prone and ugly. |
+// Seems like this should use a build flag instead. |
+#if !defined(OS_IOS) |
+ |
class FakeWebSocketHandshakeStream : public WebSocketHandshakeStreamBase { |
public: |
FakeWebSocketHandshakeStream() : initialize_stream_was_called_(false) {} |
@@ -818,15 +831,13 @@ class FakeWebSocketHandshakeStream : public WebSocketHandshakeStreamBase { |
}; |
TEST_F(URLRequestHttpJobWebSocketTest, RejectedWithoutCreateHelper) { |
- scoped_ptr<TestURLRequestHttpJob> job(new TestURLRequestHttpJob(req_.get())); |
- job->Start(); |
+ req_->Start(); |
base::RunLoop().RunUntilIdle(); |
EXPECT_EQ(URLRequestStatus::FAILED, req_->status().status()); |
EXPECT_EQ(ERR_DISALLOWED_URL_SCHEME, req_->status().error()); |
} |
TEST_F(URLRequestHttpJobWebSocketTest, CreateHelperPassedThrough) { |
- scoped_ptr<TestURLRequestHttpJob> job(new TestURLRequestHttpJob(req_.get())); |
scoped_ptr<MockCreateHelper> create_helper( |
new ::testing::StrictMock<MockCreateHelper>()); |
FakeWebSocketHandshakeStream* fake_handshake_stream( |
@@ -838,12 +849,14 @@ TEST_F(URLRequestHttpJobWebSocketTest, CreateHelperPassedThrough) { |
req_->SetUserData(WebSocketHandshakeStreamBase::CreateHelper::DataKey(), |
create_helper.release()); |
req_->SetLoadFlags(LOAD_DISABLE_CACHE); |
- job->Start(); |
+ req_->Start(); |
base::RunLoop().RunUntilIdle(); |
EXPECT_EQ(URLRequestStatus::IO_PENDING, req_->status().status()); |
EXPECT_TRUE(fake_handshake_stream->initialize_stream_was_called()); |
} |
+#endif // !defined(OS_IOS) |
+ |
} // namespace |
} // namespace net |