Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(587)

Unified Diff: content/browser/loader/resource_dispatcher_host_unittest.cc

Issue 305443005: Remove ProtocolFactory use from resource_dispatcher_host_unittest.cc (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/loader/resource_dispatcher_host_unittest.cc
diff --git a/content/browser/loader/resource_dispatcher_host_unittest.cc b/content/browser/loader/resource_dispatcher_host_unittest.cc
index 68869c1503cc3615be7bc4e17af45e109d3fbe7f..df02f58866853182c7226df8405cb82dfec5daf8 100644
--- a/content/browser/loader/resource_dispatcher_host_unittest.cc
+++ b/content/browser/loader/resource_dispatcher_host_unittest.cc
@@ -460,6 +460,64 @@ class URLRequestBigJob : public net::URLRequestSimpleJob {
}
};
+class TestURLRequestJobFactory : public net::URLRequestJobFactory {
+ public:
+ explicit TestURLRequestJobFactory(ResourceDispatcherHostTest* test_fixture) :
+ test_fixture_(test_fixture),
+ delay_start_(false),
+ delay_complete_(false),
+ network_start_notification_(false),
+ url_request_jobs_created_count_(0) {
+ }
+
+ void HandleScheme(const std::string& scheme) {
+ supported_schemes_.insert(scheme);
+ }
+
+ int url_request_jobs_created_count() const {
+ return url_request_jobs_created_count_;
+ }
+
+ void SetDelayedStartJobGeneration(bool delay_job_start) {
+ delay_start_ = delay_job_start;
+ }
+
+ void SetDelayedCompleteJobGeneration(bool delay_job_complete) {
+ delay_complete_ = delay_job_complete;
+ }
+
+ void SetNetworkStartNotificationJobGeneration(bool notification) {
+ network_start_notification_ = notification;
+ }
+
+ virtual net::URLRequestJob* MaybeCreateJobWithProtocolHandler(
+ const std::string& scheme,
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate) const OVERRIDE;
+
+ virtual bool IsHandledProtocol(const std::string& scheme) const OVERRIDE {
+ return supported_schemes_.count(scheme) > 0;
+ }
+
+ virtual bool IsHandledURL(const GURL& url) const OVERRIDE {
+ return supported_schemes_.count(url.scheme()) > 0;
+ }
+
+ virtual bool IsSafeRedirectTarget(const GURL& location) const OVERRIDE {
+ return false;
+ }
+
+ private:
+ ResourceDispatcherHostTest* test_fixture_;
+ bool delay_start_;
+ bool delay_complete_;
+ bool network_start_notification_;
+ mutable int url_request_jobs_created_count_;
+ std::set<std::string> supported_schemes_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestURLRequestJobFactory);
+};
+
// Associated with an URLRequest to determine if the URLRequest gets deleted.
class TestUserData : public base::SupportsUserData::Data {
public:
@@ -663,9 +721,12 @@ class ResourceDispatcherHostTest : public testing::Test,
BrowserContext::EnsureResourceContextInitialized(browser_context_.get());
base::RunLoop().RunUntilIdle();
filter_ = MakeForwardingFilter();
- ResourceContext* resource_context = browser_context_->GetResourceContext();
- resource_context->GetRequestContext()->set_network_delegate(
- &network_delegate_);
+ // TODO(cbentzel): Better way to get URLRequestContext?
+ net::URLRequestContext* request_context =
+ browser_context_->GetResourceContext()->GetRequestContext();
+ job_factory_.reset(new TestURLRequestJobFactory(this));
+ request_context->set_job_factory(job_factory_.get());
+ request_context->set_network_delegate(&network_delegate_);
}
// IPC::Sender implementation
@@ -688,33 +749,18 @@ class ResourceDispatcherHostTest : public testing::Test,
}
protected:
+ friend class TestURLRequestJobFactory;
+
// testing::Test
virtual void SetUp() OVERRIDE {
- DCHECK(!test_fixture_);
- test_fixture_ = this;
ChildProcessSecurityPolicyImpl::GetInstance()->Add(0);
- net::URLRequest::Deprecated::RegisterProtocolFactory(
- "test",
- &ResourceDispatcherHostTest::Factory);
- EnsureTestSchemeIsAllowed();
- delay_start_ = false;
- delay_complete_ = false;
- network_start_notification_ = false;
- url_request_jobs_created_count_ = 0;
+ HandleScheme("test");
}
virtual void TearDown() {
- net::URLRequest::Deprecated::RegisterProtocolFactory("test", NULL);
- if (!scheme_.empty())
- net::URLRequest::Deprecated::RegisterProtocolFactory(
- scheme_, old_factory_);
-
EXPECT_TRUE(URLRequestTestDelayedStartJob::DelayedStartQueueEmpty());
URLRequestTestDelayedStartJob::ClearQueue();
- DCHECK(test_fixture_ == this);
- test_fixture_ = NULL;
-
for (std::set<int>::iterator it = child_ids_.begin();
it != child_ids_.end(); ++it) {
host_.CancelRequestsForProcess(*it);
@@ -775,10 +821,6 @@ class ResourceDispatcherHostTest : public testing::Test,
policy->RegisterWebSafeScheme(scheme);
}
- void EnsureTestSchemeIsAllowed() {
- EnsureSchemeIsAllowed("test");
- }
-
// Sets a particular response for any request from now on. To switch back to
// the default bahavior, pass an empty |headers|. |headers| should be raw-
// formatted (NULLs instead of EOLs).
@@ -797,64 +839,10 @@ class ResourceDispatcherHostTest : public testing::Test,
// Intercepts requests for the given protocol.
void HandleScheme(const std::string& scheme) {
- DCHECK(scheme_.empty());
- DCHECK(!old_factory_);
- scheme_ = scheme;
- old_factory_ = net::URLRequest::Deprecated::RegisterProtocolFactory(
- scheme_, &ResourceDispatcherHostTest::Factory);
+ job_factory_->HandleScheme(scheme);
EnsureSchemeIsAllowed(scheme);
}
- // Our own net::URLRequestJob factory.
- static net::URLRequestJob* Factory(net::URLRequest* request,
- net::NetworkDelegate* network_delegate,
- const std::string& scheme) {
- url_request_jobs_created_count_++;
- if (test_fixture_->response_headers_.empty()) {
- if (delay_start_) {
- return new URLRequestTestDelayedStartJob(request, network_delegate);
- } else if (delay_complete_) {
- return new URLRequestTestDelayedCompletionJob(request,
- network_delegate);
- } else if (network_start_notification_) {
- return new URLRequestTestDelayedNetworkJob(request, network_delegate);
- } else if (scheme == "big-job") {
- return new URLRequestBigJob(request, network_delegate);
- } else {
- return new net::URLRequestTestJob(request, network_delegate);
- }
- } else {
- if (delay_start_) {
- return new URLRequestTestDelayedStartJob(
- request, network_delegate,
- test_fixture_->response_headers_, test_fixture_->response_data_,
- false);
- } else if (delay_complete_) {
- return new URLRequestTestDelayedCompletionJob(
- request, network_delegate,
- test_fixture_->response_headers_, test_fixture_->response_data_,
- false);
- } else {
- return new net::URLRequestTestJob(
- request, network_delegate,
- test_fixture_->response_headers_, test_fixture_->response_data_,
- false);
- }
- }
- }
-
- void SetDelayedStartJobGeneration(bool delay_job_start) {
- delay_start_ = delay_job_start;
- }
-
- void SetDelayedCompleteJobGeneration(bool delay_job_complete) {
- delay_complete_ = delay_job_complete;
- }
-
- void SetNetworkStartNotificationJobGeneration(bool notification) {
- network_start_notification_ = notification;
- }
-
void GenerateDataReceivedACK(const IPC::Message& msg) {
EXPECT_EQ(ResourceMsg_DataReceived::ID, msg.type());
@@ -886,6 +874,7 @@ class ResourceDispatcherHostTest : public testing::Test,
content::TestBrowserThreadBundle thread_bundle_;
scoped_ptr<TestBrowserContext> browser_context_;
+ scoped_ptr<TestURLRequestJobFactory> job_factory_;
scoped_refptr<ForwardingFilter> filter_;
net::TestNetworkDelegate network_delegate_;
ResourceDispatcherHostImpl host_;
@@ -897,18 +886,7 @@ class ResourceDispatcherHostTest : public testing::Test,
bool send_data_received_acks_;
std::set<int> child_ids_;
scoped_ptr<base::RunLoop> wait_for_request_complete_loop_;
- static ResourceDispatcherHostTest* test_fixture_;
- static bool delay_start_;
- static bool delay_complete_;
- static bool network_start_notification_;
- static int url_request_jobs_created_count_;
};
-// Static.
-ResourceDispatcherHostTest* ResourceDispatcherHostTest::test_fixture_ = NULL;
-bool ResourceDispatcherHostTest::delay_start_ = false;
-bool ResourceDispatcherHostTest::delay_complete_ = false;
-bool ResourceDispatcherHostTest::network_start_notification_ = false;
-int ResourceDispatcherHostTest::url_request_jobs_created_count_ = 0;
void ResourceDispatcherHostTest::MakeTestRequest(int render_view_id,
int request_id,
@@ -1369,7 +1347,7 @@ TEST_F(ResourceDispatcherHostTest, CancelInResourceThrottleWillStartRequest) {
CheckRequestCompleteErrorCode(msgs[0][0], net::ERR_ABORTED);
// Make sure URLRequest is never started.
- EXPECT_EQ(0, url_request_jobs_created_count_);
+ EXPECT_EQ(0, job_factory_->url_request_jobs_created_count());
}
TEST_F(ResourceDispatcherHostTest, PausedStartError) {
@@ -1378,7 +1356,7 @@ TEST_F(ResourceDispatcherHostTest, PausedStartError) {
delegate.set_flags(DEFER_PROCESSING_RESPONSE);
host_.SetDelegate(&delegate);
- SetDelayedStartJobGeneration(true);
+ job_factory_->SetDelayedStartJobGeneration(true);
MakeTestRequest(0, 1, net::URLRequestTestJob::test_url_error());
CompleteStartRequest(1);
@@ -1396,7 +1374,7 @@ TEST_F(ResourceDispatcherHostTest, ThrottleNetworkStart) {
delegate.set_flags(DEFER_NETWORK_START);
host_.SetDelegate(&delegate);
- SetNetworkStartNotificationJobGeneration(true);
+ job_factory_->SetNetworkStartNotificationJobGeneration(true);
MakeTestRequest(0, 1, net::URLRequestTestJob::test_url_2());
// Should have deferred for network start.
@@ -2106,7 +2084,7 @@ TEST_F(ResourceDispatcherHostTest, IgnoreCancelForDownloads) {
response_data.resize(1025, ' ');
SetResponse(raw_headers, response_data);
- SetDelayedCompleteJobGeneration(true);
+ job_factory_->SetDelayedCompleteJobGeneration(true);
HandleScheme("http");
MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id,
@@ -2141,7 +2119,7 @@ TEST_F(ResourceDispatcherHostTest, CancelRequestsForContext) {
response_data.resize(1025, ' ');
SetResponse(raw_headers, response_data);
- SetDelayedCompleteJobGeneration(true);
+ job_factory_->SetDelayedCompleteJobGeneration(true);
HandleScheme("http");
MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id,
@@ -2619,7 +2597,7 @@ TEST_F(ResourceDispatcherHostTest, DataSentBeforeDetach) {
response_data.resize(kAllocSize, ' ');
SetResponse(raw_headers, response_data);
- SetDelayedCompleteJobGeneration(true);
+ job_factory_->SetDelayedCompleteJobGeneration(true);
HandleScheme("http");
MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id,
@@ -2908,4 +2886,42 @@ TEST_F(ResourceDispatcherHostTest, DownloadToFile) {
filter_->child_id(), response_head.download_file_path));
}
+net::URLRequestJob* TestURLRequestJobFactory::MaybeCreateJobWithProtocolHandler(
+ const std::string& scheme,
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate) const {
+ url_request_jobs_created_count_++;
+ if (test_fixture_->response_headers_.empty()) {
+ if (delay_start_) {
+ return new URLRequestTestDelayedStartJob(request, network_delegate);
+ } else if (delay_complete_) {
+ return new URLRequestTestDelayedCompletionJob(request,
+ network_delegate);
+ } else if (network_start_notification_) {
+ return new URLRequestTestDelayedNetworkJob(request, network_delegate);
+ } else if (scheme == "big-job") {
+ return new URLRequestBigJob(request, network_delegate);
+ } else {
+ return new net::URLRequestTestJob(request, network_delegate);
+ }
+ } else {
+ if (delay_start_) {
+ return new URLRequestTestDelayedStartJob(
+ request, network_delegate,
+ test_fixture_->response_headers_, test_fixture_->response_data_,
+ false);
+ } else if (delay_complete_) {
+ return new URLRequestTestDelayedCompletionJob(
+ request, network_delegate,
+ test_fixture_->response_headers_, test_fixture_->response_data_,
+ false);
+ } else {
+ return new net::URLRequestTestJob(
+ request, network_delegate,
+ test_fixture_->response_headers_, test_fixture_->response_data_,
+ false);
+ }
+ }
+}
+
} // namespace content
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698