- add sources.
[platform/framework/web/crosswalk.git] / src / net / url_request / url_request_filter_unittest.cc
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.
4
5 #include "net/url_request/url_request_filter.h"
6
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"
16
17 namespace net {
18
19 namespace {
20
21 URLRequestTestJob* job_a;
22
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;
28 }
29
30 URLRequestTestJob* job_b;
31
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;
37 }
38
39 URLRequestTestJob* job_c;
40
41 class TestProtocolHandler : public URLRequestJobFactory::ProtocolHandler {
42  public:
43   virtual ~TestProtocolHandler() {}
44
45   virtual URLRequestJob* MaybeCreateJob(
46       URLRequest* request, NetworkDelegate* network_delegate) const OVERRIDE {
47     job_c = new URLRequestTestJob(request, network_delegate);
48     return job_c;
49   }
50 };
51
52 TEST(URLRequestFilter, BasicMatching) {
53   TestDelegate delegate;
54   TestURLRequestContext request_context;
55
56   GURL url_1("http://foo.com/");
57   TestURLRequest request_1(
58       url_1, DEFAULT_PRIORITY, &delegate, &request_context);
59
60   GURL url_2("http://bar.com/");
61   TestURLRequest request_2(
62       url_2, DEFAULT_PRIORITY, &delegate, &request_context);
63
64   // Check AddUrlHandler checks for invalid URLs.
65   EXPECT_FALSE(URLRequestFilter::GetInstance()->AddUrlHandler(GURL(),
66                                                               &FactoryA));
67
68   // Check URL matching.
69   URLRequestFilter::GetInstance()->ClearHandlers();
70   EXPECT_TRUE(URLRequestFilter::GetInstance()->AddUrlHandler(url_1,
71                                                              &FactoryA));
72   {
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;
78   }
79   EXPECT_EQ(URLRequestFilter::GetInstance()->hit_count(), 1);
80
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());
85
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());
91
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);
98   {
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;
104   }
105   EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count());
106
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());
111
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());
118
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()));
126   {
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;
132   }
133   EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count());
134
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()));
142   {
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;
148   }
149   EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count());
150
151   URLRequestFilter::GetInstance()->ClearHandlers();
152 }
153
154 }  // namespace
155
156 }  // namespace net