Sorted include files.
[chromium-blink-merge.git] / net / url_request / url_request_filter_unittest.cc
blob2e024a285e6682c5000458c7f77684e94914655d
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "net/url_request/url_request_filter.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "net/base/request_priority.h"
9 #include "net/url_request/url_request.h"
10 #include "net/url_request/url_request_context.h"
11 #include "net/url_request/url_request_job.h"
12 #include "net/url_request/url_request_job_factory.h"
13 #include "net/url_request/url_request_test_job.h"
14 #include "net/url_request/url_request_test_util.h"
15 #include "testing/gtest/include/gtest/gtest.h"
17 namespace net {
19 namespace {
21 URLRequestTestJob* job_a;
23 URLRequestJob* FactoryA(URLRequest* request,
24 NetworkDelegate* network_delegate,
25 const std::string& scheme) {
26 job_a = new URLRequestTestJob(request, network_delegate);
27 return job_a;
30 URLRequestTestJob* job_b;
32 URLRequestJob* FactoryB(URLRequest* request,
33 NetworkDelegate* network_delegate,
34 const std::string& scheme) {
35 job_b = new URLRequestTestJob(request, network_delegate);
36 return job_b;
39 URLRequestTestJob* job_c;
41 class TestProtocolHandler : public URLRequestJobFactory::ProtocolHandler {
42 public:
43 virtual ~TestProtocolHandler() {}
45 virtual URLRequestJob* MaybeCreateJob(
46 URLRequest* request, NetworkDelegate* network_delegate) const OVERRIDE {
47 job_c = new URLRequestTestJob(request, network_delegate);
48 return job_c;
52 TEST(URLRequestFilter, BasicMatching) {
53 TestDelegate delegate;
54 TestURLRequestContext request_context;
56 GURL url_1("http://foo.com/");
57 TestURLRequest request_1(
58 url_1, DEFAULT_PRIORITY, &delegate, &request_context);
60 GURL url_2("http://bar.com/");
61 TestURLRequest request_2(
62 url_2, DEFAULT_PRIORITY, &delegate, &request_context);
64 // Check AddUrlHandler checks for invalid URLs.
65 EXPECT_FALSE(URLRequestFilter::GetInstance()->AddUrlHandler(GURL(),
66 &FactoryA));
68 // Check URL matching.
69 URLRequestFilter::GetInstance()->ClearHandlers();
70 EXPECT_TRUE(URLRequestFilter::GetInstance()->AddUrlHandler(url_1,
71 &FactoryA));
73 scoped_refptr<URLRequestJob> found = URLRequestFilter::Factory(
74 &request_1, NULL, url_1.scheme());
75 EXPECT_EQ(job_a, found);
76 EXPECT_TRUE(job_a != NULL);
77 job_a = NULL;
79 EXPECT_EQ(URLRequestFilter::GetInstance()->hit_count(), 1);
81 // Check we don't match other URLs.
82 EXPECT_TRUE(URLRequestFilter::Factory(
83 &request_2, NULL, url_2.scheme()) == NULL);
84 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count());
86 // Check we can remove URL matching.
87 URLRequestFilter::GetInstance()->RemoveUrlHandler(url_1);
88 EXPECT_TRUE(URLRequestFilter::Factory(
89 &request_1, NULL, url_1.scheme()) == NULL);
90 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count());
92 // Check hostname matching.
93 URLRequestFilter::GetInstance()->ClearHandlers();
94 EXPECT_EQ(0, URLRequestFilter::GetInstance()->hit_count());
95 URLRequestFilter::GetInstance()->AddHostnameHandler(url_1.scheme(),
96 url_1.host(),
97 &FactoryB);
99 scoped_refptr<URLRequestJob> found = URLRequestFilter::Factory(
100 &request_1, NULL, url_1.scheme());
101 EXPECT_EQ(job_b, found);
102 EXPECT_TRUE(job_b != NULL);
103 job_b = NULL;
105 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count());
107 // Check we don't match other hostnames.
108 EXPECT_TRUE(URLRequestFilter::Factory(
109 &request_2, NULL, url_2.scheme()) == NULL);
110 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count());
112 // Check we can remove hostname matching.
113 URLRequestFilter::GetInstance()->RemoveHostnameHandler(url_1.scheme(),
114 url_1.host());
115 EXPECT_TRUE(URLRequestFilter::Factory(
116 &request_1, NULL, url_1.scheme()) == NULL);
117 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count());
119 // Check ProtocolHandler hostname matching.
120 URLRequestFilter::GetInstance()->ClearHandlers();
121 EXPECT_EQ(0, URLRequestFilter::GetInstance()->hit_count());
122 URLRequestFilter::GetInstance()->AddHostnameProtocolHandler(
123 url_1.scheme(), url_1.host(),
124 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>(
125 new TestProtocolHandler()));
127 scoped_refptr<URLRequestJob> found = URLRequestFilter::Factory(
128 &request_1, NULL, url_1.scheme());
129 EXPECT_EQ(job_c, found);
130 EXPECT_TRUE(job_c != NULL);
131 job_c = NULL;
133 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count());
135 // Check ProtocolHandler URL matching.
136 URLRequestFilter::GetInstance()->ClearHandlers();
137 EXPECT_EQ(0, URLRequestFilter::GetInstance()->hit_count());
138 URLRequestFilter::GetInstance()->AddUrlProtocolHandler(
139 url_2,
140 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>(
141 new TestProtocolHandler()));
143 scoped_refptr<URLRequestJob> found = URLRequestFilter::Factory(
144 &request_2, NULL, url_2.scheme());
145 EXPECT_EQ(job_c, found);
146 EXPECT_TRUE(job_c != NULL);
147 job_c = NULL;
149 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count());
151 URLRequestFilter::GetInstance()->ClearHandlers();
154 } // namespace
156 } // namespace net