Index: content/browser/appcache/appcache_url_request_job_unittest.cc |
diff --git a/content/browser/appcache/appcache_url_request_job_unittest.cc b/content/browser/appcache/appcache_url_request_job_unittest.cc |
index 5636aacae99621e683cbad09984f0b30c6a18760..86748d62c81e569ffe5af26ba15cbb9c274ed8a6 100644 |
--- a/content/browser/appcache/appcache_url_request_job_unittest.cc |
+++ b/content/browser/appcache/appcache_url_request_job_unittest.cc |
@@ -20,6 +20,7 @@ |
#include "net/url_request/url_request.h" |
#include "net/url_request/url_request_context.h" |
#include "net/url_request/url_request_error_job.h" |
+#include "net/url_request/url_request_job_factory.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "webkit/browser/appcache/appcache_response.h" |
#include "webkit/browser/appcache/appcache_url_request_job.h" |
@@ -37,12 +38,62 @@ using net::WrappedIOBuffer; |
namespace content { |
-static const char kHttpBasicHeaders[] = |
- "HTTP/1.0 200 OK\0Content-Length: 5\0\0"; |
-static const char kHttpBasicBody[] = "Hello"; |
+namespace { |
-static const int kNumBlocks = 4; |
-static const int kBlockSize = 1024; |
+const char kHttpBasicHeaders[] = "HTTP/1.0 200 OK\0Content-Length: 5\0\0"; |
+const char kHttpBasicBody[] = "Hello"; |
+ |
+const int kNumBlocks = 4; |
+const int kBlockSize = 1024; |
+ |
+class MockURLRequestJobFactory : public net::URLRequestJobFactory { |
+ public: |
+ MockURLRequestJobFactory() : job_(NULL) { |
+ } |
+ |
+ virtual ~MockURLRequestJobFactory() { |
+ DCHECK(!job_); |
+ } |
+ |
+ void SetJob(net::URLRequestJob* job) { |
+ job_ = job; |
+ } |
+ |
+ bool has_job() const { |
+ return job_ != NULL; |
+ } |
+ |
+ // net::URLRequestJobFactory implementation. |
+ virtual net::URLRequestJob* MaybeCreateJobWithProtocolHandler( |
+ const std::string& scheme, |
+ net::URLRequest* request, |
+ net::NetworkDelegate* network_delegate) const OVERRIDE { |
+ if (job_) { |
+ net::URLRequestJob* temp = job_; |
+ job_ = NULL; |
+ return temp; |
+ } else { |
+ return new net::URLRequestErrorJob(request, |
+ network_delegate, |
+ net::ERR_INTERNET_DISCONNECTED); |
+ } |
+ } |
+ |
+ virtual bool IsHandledProtocol(const std::string& scheme) const OVERRIDE { |
+ return scheme == "http"; |
+ }; |
+ |
+ virtual bool IsHandledURL(const GURL& url) const OVERRIDE { |
+ return url.SchemeIs("http"); |
+ } |
+ |
+ virtual bool IsSafeRedirectTarget(const GURL& location) const OVERRIDE { |
+ return false; |
+ } |
+ |
+ private: |
+ mutable net::URLRequestJob* job_; |
+}; |
class AppCacheURLRequestJobTest : public testing::Test { |
public: |
@@ -138,21 +189,6 @@ class AppCacheURLRequestJobTest : public testing::Test { |
bool kill_with_io_pending_; |
}; |
- static net::URLRequestJob* MockHttpJobFactory( |
- net::URLRequest* request, |
- net::NetworkDelegate* network_delegate, |
- const std::string& scheme) { |
- if (mock_factory_job_) { |
- net::URLRequestJob* temp = mock_factory_job_; |
- mock_factory_job_ = NULL; |
- return temp; |
- } else { |
- return new net::URLRequestErrorJob(request, |
- network_delegate, |
- net::ERR_INTERNET_DISCONNECTED); |
- } |
- } |
- |
// Helper callback to run a test on our io_thread. The io_thread is spun up |
// once and reused for all tests. |
template <class Method> |
@@ -185,9 +221,7 @@ class AppCacheURLRequestJobTest : public testing::Test { |
void SetUpTest() { |
DCHECK(base::MessageLoop::current() == io_thread_->message_loop()); |
DCHECK(task_stack_.empty()); |
- orig_http_factory_ = net::URLRequest::Deprecated::RegisterProtocolFactory( |
- "http", MockHttpJobFactory); |
- url_request_delegate_.reset(new MockURLRequestDelegate(this)); |
+ |
storage_delegate_.reset(new MockStorageDelegate(this)); |
service_.reset(new MockAppCacheService()); |
expected_read_result_ = 0; |
@@ -195,16 +229,16 @@ class AppCacheURLRequestJobTest : public testing::Test { |
written_response_id_ = 0; |
reader_deletion_count_down_ = 0; |
writer_deletion_count_down_ = 0; |
+ |
+ url_request_delegate_.reset(new MockURLRequestDelegate(this)); |
+ job_factory_.reset(new MockURLRequestJobFactory()); |
+ empty_context_.reset(new net::URLRequestContext()); |
+ empty_context_->set_job_factory(job_factory_.get()); |
} |
void TearDownTest() { |
DCHECK(base::MessageLoop::current() == io_thread_->message_loop()); |
- net::URLRequest::Deprecated::RegisterProtocolFactory("http", |
- orig_http_factory_); |
- orig_http_factory_ = NULL; |
request_.reset(); |
- url_request_delegate_.reset(); |
- DCHECK(!mock_factory_job_); |
while (!task_stack_.empty()) |
task_stack_.pop(); |
@@ -217,6 +251,11 @@ class AppCacheURLRequestJobTest : public testing::Test { |
write_info_buffer_ = NULL; |
storage_delegate_.reset(); |
service_.reset(); |
+ |
+ DCHECK(!job_factory_->has_job()); |
+ empty_context_.reset(); |
+ job_factory_.reset(); |
+ url_request_delegate_.reset(); |
} |
void TestFinished() { |
@@ -385,8 +424,8 @@ class AppCacheURLRequestJobTest : public testing::Test { |
// Basic ------------------------------------------------------------------- |
void Basic() { |
AppCacheStorage* storage = service_->storage(); |
- net::URLRequest request( |
- GURL("http://blah/"), net::DEFAULT_PRIORITY, NULL, &empty_context_); |
+ net::URLRequest request(GURL("http://blah/"), net::DEFAULT_PRIORITY, NULL, |
+ empty_context_.get()); |
scoped_refptr<AppCacheURLRequestJob> job; |
// Create an instance and see that it looks as expected. |
@@ -409,8 +448,8 @@ class AppCacheURLRequestJobTest : public testing::Test { |
// DeliveryOrders ----------------------------------------------------- |
void DeliveryOrders() { |
AppCacheStorage* storage = service_->storage(); |
- net::URLRequest request( |
- GURL("http://blah/"), net::DEFAULT_PRIORITY, NULL, &empty_context_); |
+ net::URLRequest request(GURL("http://blah/"), net::DEFAULT_PRIORITY, NULL, |
+ empty_context_.get()); |
scoped_refptr<AppCacheURLRequestJob> job; |
// Create an instance, give it a delivery order and see that |
@@ -454,24 +493,25 @@ class AppCacheURLRequestJobTest : public testing::Test { |
base::Unretained(this))); |
AppCacheStorage* storage = service_->storage(); |
- request_ = empty_context_.CreateRequest(GURL("http://blah/"), |
- net::DEFAULT_PRIORITY, |
- url_request_delegate_.get(), |
- NULL); |
+ request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
+ net::DEFAULT_PRIORITY, |
+ url_request_delegate_.get(), |
+ NULL); |
// Setup to create an AppCacheURLRequestJob with orders to deliver |
// a network response. |
- mock_factory_job_ = new AppCacheURLRequestJob( |
+ AppCacheURLRequestJob* mock_job = new AppCacheURLRequestJob( |
request_.get(), NULL, storage, NULL, false); |
- mock_factory_job_->DeliverNetworkResponse(); |
- EXPECT_TRUE(mock_factory_job_->is_delivering_network_response()); |
- EXPECT_FALSE(mock_factory_job_->has_been_started()); |
+ job_factory_->SetJob(mock_job); |
+ mock_job->DeliverNetworkResponse(); |
+ EXPECT_TRUE(mock_job->is_delivering_network_response()); |
+ EXPECT_FALSE(mock_job->has_been_started()); |
// Start the request. |
request_->Start(); |
// The job should have been picked up. |
- EXPECT_FALSE(mock_factory_job_); |
+ EXPECT_FALSE(job_factory_->has_job()); |
// Completion is async. |
} |
@@ -490,24 +530,25 @@ class AppCacheURLRequestJobTest : public testing::Test { |
base::Unretained(this))); |
AppCacheStorage* storage = service_->storage(); |
- request_ = empty_context_.CreateRequest(GURL("http://blah/"), |
- net::DEFAULT_PRIORITY, |
- url_request_delegate_.get(), |
- NULL); |
+ request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
+ net::DEFAULT_PRIORITY, |
+ url_request_delegate_.get(), |
+ NULL); |
// Setup to create an AppCacheURLRequestJob with orders to deliver |
// a network response. |
- mock_factory_job_ = new AppCacheURLRequestJob( |
+ AppCacheURLRequestJob* mock_job = new AppCacheURLRequestJob( |
request_.get(), NULL, storage, NULL, false); |
- mock_factory_job_->DeliverErrorResponse(); |
- EXPECT_TRUE(mock_factory_job_->is_delivering_error_response()); |
- EXPECT_FALSE(mock_factory_job_->has_been_started()); |
+ job_factory_->SetJob(mock_job); |
+ mock_job->DeliverErrorResponse(); |
+ EXPECT_TRUE(mock_job->is_delivering_error_response()); |
+ EXPECT_FALSE(mock_job->has_been_started()); |
// Start the request. |
request_->Start(); |
// The job should have been picked up. |
- EXPECT_FALSE(mock_factory_job_); |
+ EXPECT_FALSE(job_factory_->has_job()); |
// Completion is async. |
} |
@@ -541,10 +582,10 @@ class AppCacheURLRequestJobTest : public testing::Test { |
void RequestAppCachedResource(bool start_after_delivery_orders) { |
AppCacheStorage* storage = service_->storage(); |
- request_ = empty_context_.CreateRequest(GURL("http://blah/"), |
- net::DEFAULT_PRIORITY, |
- url_request_delegate_.get(), |
- NULL); |
+ request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
+ net::DEFAULT_PRIORITY, |
+ url_request_delegate_.get(), |
+ NULL); |
// Setup to create an AppCacheURLRequestJob with orders to deliver |
// a network response. |
@@ -561,9 +602,9 @@ class AppCacheURLRequestJobTest : public testing::Test { |
// Start the request. |
EXPECT_FALSE(job->has_been_started()); |
- mock_factory_job_ = job.get(); |
+ job_factory_->SetJob(job.get()); |
request_->Start(); |
- EXPECT_FALSE(mock_factory_job_); |
+ EXPECT_FALSE(job_factory_->has_job()); |
EXPECT_TRUE(job->has_been_started()); |
if (!start_after_delivery_orders) { |
@@ -656,10 +697,10 @@ class AppCacheURLRequestJobTest : public testing::Test { |
void MakeRangeRequest() { |
AppCacheStorage* storage = service_->storage(); |
- request_ = empty_context_.CreateRequest(GURL("http://blah/"), |
- net::DEFAULT_PRIORITY, |
- url_request_delegate_.get(), |
- NULL); |
+ request_ = empty_context_->CreateRequest(GURL("http://blah/"), |
+ net::DEFAULT_PRIORITY, |
+ url_request_delegate_.get(), |
+ NULL); |
// Request a range, the 3 middle chars out of 'Hello' |
net::HttpRequestHeaders extra_headers; |
@@ -677,9 +718,9 @@ class AppCacheURLRequestJobTest : public testing::Test { |
// Start the request. |
EXPECT_FALSE(job->has_been_started()); |
- mock_factory_job_ = job.get(); |
+ job_factory_->SetJob(job.get()); |
request_->Start(); |
- EXPECT_FALSE(mock_factory_job_); |
+ EXPECT_FALSE(job_factory_->has_job()); |
EXPECT_TRUE(job->has_been_started()); |
// Completion is async. |
} |
@@ -776,18 +817,16 @@ class AppCacheURLRequestJobTest : public testing::Test { |
int expected_write_result_; |
int writer_deletion_count_down_; |
- net::URLRequest::ProtocolFactory* orig_http_factory_; |
- net::URLRequestContext empty_context_; |
+ scoped_ptr<MockURLRequestJobFactory> job_factory_; |
+ scoped_ptr<net::URLRequestContext> empty_context_; |
scoped_ptr<net::URLRequest> request_; |
scoped_ptr<MockURLRequestDelegate> url_request_delegate_; |
static scoped_ptr<base::Thread> io_thread_; |
- static AppCacheURLRequestJob* mock_factory_job_; |
}; |
// static |
scoped_ptr<base::Thread> AppCacheURLRequestJobTest::io_thread_; |
-AppCacheURLRequestJob* AppCacheURLRequestJobTest::mock_factory_job_ = NULL; |
TEST_F(AppCacheURLRequestJobTest, Basic) { |
RunTestOnIOThread(&AppCacheURLRequestJobTest::Basic); |
@@ -825,4 +864,6 @@ TEST_F(AppCacheURLRequestJobTest, CancelRequestWithIOPending) { |
RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequestWithIOPending); |
} |
+} // namespace |
+ |
} // namespace content |