| Index: content/browser/appcache/appcache_request_handler_unittest.cc
|
| diff --git a/content/browser/appcache/appcache_request_handler_unittest.cc b/content/browser/appcache/appcache_request_handler_unittest.cc
|
| index 17175cba51c2ef6a059d72470a56b8bb6ceb2037..2d2b8ab3861283c3917bab76d8efb39e27eb19d8 100644
|
| --- a/content/browser/appcache/appcache_request_handler_unittest.cc
|
| +++ b/content/browser/appcache/appcache_request_handler_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.h"
|
| #include "webkit/browser/appcache/appcache_backend_impl.h"
|
| @@ -128,48 +129,60 @@ class AppCacheRequestHandlerTest : public testing::Test {
|
| net::HttpResponseInfo response_info_;
|
| };
|
|
|
| - class MockURLRequest : public net::URLRequest {
|
| + class MockURLRequestJobFactory : public net::URLRequestJobFactory {
|
| public:
|
| - MockURLRequest(const GURL& url, net::URLRequestContext* context)
|
| - : net::URLRequest(url, net::DEFAULT_PRIORITY, NULL, context) {}
|
| + MockURLRequestJobFactory() : job_(NULL) {
|
| + }
|
|
|
| - void SimulateResponseCode(int http_response_code) {
|
| - mock_factory_job_ = new MockURLRequestJob(
|
| - this, context()->network_delegate(), http_response_code);
|
| - Start();
|
| - DCHECK(!mock_factory_job_);
|
| - // All our simulation needs to satisfy are the following two DCHECKs
|
| - DCHECK(status().is_success());
|
| - DCHECK_EQ(http_response_code, GetResponseCode());
|
| + virtual ~MockURLRequestJobFactory() {
|
| + DCHECK(!job_);
|
| }
|
|
|
| - void SimulateResponseInfo(const net::HttpResponseInfo& info) {
|
| - mock_factory_job_ =
|
| - new MockURLRequestJob(this, context()->network_delegate(), info);
|
| - set_delegate(&delegate_); // needed to get the info back out
|
| - Start();
|
| - DCHECK(!mock_factory_job_);
|
| + void SetJob(net::URLRequestJob* job) {
|
| + job_ = job;
|
| }
|
|
|
| - MockURLRequestDelegate delegate_;
|
| - };
|
| + 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 {
|
| + // Some of these tests trigger UpdateJobs which start URLRequests.
|
| + // We short circuit those be returning error jobs.
|
| + return new net::URLRequestErrorJob(request,
|
| + network_delegate,
|
| + net::ERR_INTERNET_DISCONNECTED);
|
| + }
|
| + }
|
|
|
| - 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 {
|
| - // Some of these tests trigger UpdateJobs which start URLRequests.
|
| - // We short circuit those be returning error jobs.
|
| - 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 MockURLRequest : public net::URLRequest {
|
| + public:
|
| + MockURLRequest(const GURL& url, net::URLRequestContext* context)
|
| + : net::URLRequest(url, net::DEFAULT_PRIORITY, NULL, context) {}
|
| +
|
| +
|
| + MockURLRequestDelegate delegate_;
|
| + };
|
|
|
| static void SetUpTestCase() {
|
| io_thread_.reset(new base::Thread("AppCacheRequestHandlerTest Thread"));
|
| @@ -183,7 +196,7 @@ class AppCacheRequestHandlerTest : public testing::Test {
|
|
|
| // Test harness --------------------------------------------------
|
|
|
| - AppCacheRequestHandlerTest() : host_(NULL), orig_http_factory_(NULL) {}
|
| + AppCacheRequestHandlerTest() : host_(NULL) {}
|
|
|
| template <class Method>
|
| void RunTestOnIOThread(Method method) {
|
| @@ -197,8 +210,6 @@ class AppCacheRequestHandlerTest : public testing::Test {
|
|
|
| void SetUpTest() {
|
| DCHECK(base::MessageLoop::current() == io_thread_->message_loop());
|
| - orig_http_factory_ = net::URLRequest::Deprecated::RegisterProtocolFactory(
|
| - "http", MockHttpJobFactory);
|
| mock_service_.reset(new MockAppCacheService);
|
| mock_service_->set_request_context(&empty_context_);
|
| mock_policy_.reset(new MockAppCachePolicy);
|
| @@ -210,14 +221,12 @@ class AppCacheRequestHandlerTest : public testing::Test {
|
| const int kHostId = 1;
|
| backend_impl_->RegisterHost(kHostId);
|
| host_ = backend_impl_->GetHost(kHostId);
|
| + job_factory_.reset(new MockURLRequestJobFactory());
|
| + empty_context_.set_job_factory(job_factory_.get());
|
| }
|
|
|
| void TearDownTest() {
|
| DCHECK(base::MessageLoop::current() == io_thread_->message_loop());
|
| - DCHECK(!mock_factory_job_);
|
| - net::URLRequest::Deprecated::RegisterProtocolFactory(
|
| - "http", orig_http_factory_);
|
| - orig_http_factory_ = NULL;
|
| job_ = NULL;
|
| handler_.reset();
|
| request_.reset();
|
| @@ -225,6 +234,7 @@ class AppCacheRequestHandlerTest : public testing::Test {
|
| mock_frontend_.reset();
|
| mock_service_.reset();
|
| mock_policy_.reset();
|
| + job_factory_.reset();
|
| host_ = NULL;
|
| }
|
|
|
| @@ -379,6 +389,27 @@ class AppCacheRequestHandlerTest : public testing::Test {
|
| ScheduleNextTask();
|
| }
|
|
|
| + void SimulateResponseCode(int response_code) {
|
| + job_factory_->SetJob(
|
| + new MockURLRequestJob(
|
| + request_.get(),
|
| + request_->context()->network_delegate(),
|
| + response_code));
|
| + request_->Start();
|
| + // All our simulation needs to satisfy are the following two DCHECKs
|
| + DCHECK(request_->status().is_success());
|
| + DCHECK_EQ(response_code, request_->GetResponseCode());
|
| + }
|
| +
|
| + void SimulateResponseInfo(const net::HttpResponseInfo& info) {
|
| + job_factory_->SetJob(
|
| + new MockURLRequestJob(
|
| + request_.get(),
|
| + request_->context()->network_delegate(), info));
|
| + request_->set_delegate(&request_->delegate_);
|
| + request_->Start();
|
| + }
|
| +
|
| void Verify_MainResource_Fallback() {
|
| EXPECT_FALSE(job_->is_waiting());
|
| EXPECT_TRUE(job_->is_delivering_network_response());
|
| @@ -391,7 +422,7 @@ class AppCacheRequestHandlerTest : public testing::Test {
|
| EXPECT_FALSE(job_.get());
|
|
|
| // Simulate an http error of the real network job.
|
| - request_->SimulateResponseCode(500);
|
| + SimulateResponseCode(500);
|
|
|
| job_ = handler_->MaybeLoadFallbackForResponse(
|
| request_.get(), request_->context()->network_delegate());
|
| @@ -460,7 +491,7 @@ class AppCacheRequestHandlerTest : public testing::Test {
|
| net::HttpResponseInfo info;
|
| info.headers = new net::HttpResponseHeaders(
|
| std::string(kOverrideHeaders, arraysize(kOverrideHeaders)));
|
| - request_->SimulateResponseInfo(info);
|
| + SimulateResponseInfo(info);
|
|
|
| job_ = handler_->MaybeLoadFallbackForResponse(
|
| request_.get(), request_->context()->network_delegate());
|
| @@ -635,7 +666,7 @@ class AppCacheRequestHandlerTest : public testing::Test {
|
| GURL("http://blah/redirect"));
|
| EXPECT_FALSE(fallback_job);
|
|
|
| - request_->SimulateResponseCode(200);
|
| + SimulateResponseCode(200);
|
| fallback_job = handler_->MaybeLoadFallbackForResponse(
|
| request_.get(), request_->context()->network_delegate());
|
| EXPECT_FALSE(fallback_job);
|
| @@ -772,7 +803,7 @@ class AppCacheRequestHandlerTest : public testing::Test {
|
| EXPECT_TRUE(job_->is_waiting());
|
| EXPECT_FALSE(job_->has_been_started());
|
|
|
| - mock_factory_job_ = job_.get();
|
| + job_factory_->SetJob(job_);
|
| request_->Start();
|
| EXPECT_TRUE(job_->has_been_started());
|
|
|
| @@ -895,18 +926,16 @@ class AppCacheRequestHandlerTest : public testing::Test {
|
| scoped_ptr<MockAppCachePolicy> mock_policy_;
|
| AppCacheHost* host_;
|
| net::URLRequestContext empty_context_;
|
| + scoped_ptr<MockURLRequestJobFactory> job_factory_;
|
| scoped_ptr<MockURLRequest> request_;
|
| scoped_ptr<AppCacheRequestHandler> handler_;
|
| scoped_refptr<AppCacheURLRequestJob> job_;
|
| - net::URLRequest::ProtocolFactory* orig_http_factory_;
|
|
|
| static scoped_ptr<base::Thread> io_thread_;
|
| - static net::URLRequestJob* mock_factory_job_;
|
| };
|
|
|
| // static
|
| scoped_ptr<base::Thread> AppCacheRequestHandlerTest::io_thread_;
|
| -net::URLRequestJob* AppCacheRequestHandlerTest::mock_factory_job_ = NULL;
|
|
|
| TEST_F(AppCacheRequestHandlerTest, MainResource_Miss) {
|
| RunTestOnIOThread(&AppCacheRequestHandlerTest::MainResource_Miss);
|
|
|