url_request_filter_unittest.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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/url_request/url_request.h"
9#include "net/url_request/url_request_context.h"
10#include "net/url_request/url_request_job.h"
11#include "net/url_request/url_request_job_factory.h"
12#include "net/url_request/url_request_test_job.h"
13#include "net/url_request/url_request_test_util.h"
14#include "testing/gtest/include/gtest/gtest.h"
15
16namespace net {
17
18namespace {
19
20URLRequestTestJob* job_a;
21
22URLRequestJob* FactoryA(URLRequest* request,
23                        NetworkDelegate* network_delegate,
24                        const std::string& scheme) {
25  job_a = new URLRequestTestJob(request, network_delegate);
26  return job_a;
27}
28
29URLRequestTestJob* job_b;
30
31URLRequestJob* FactoryB(URLRequest* request,
32                        NetworkDelegate* network_delegate,
33                        const std::string& scheme) {
34  job_b = new URLRequestTestJob(request, network_delegate);
35  return job_b;
36}
37
38TEST(URLRequestFilter, BasicMatching) {
39  TestDelegate delegate;
40  TestURLRequestContext request_context;
41
42  GURL url_1("http://foo.com/");
43  TestURLRequest request_1(url_1, &delegate, &request_context);
44
45  GURL url_2("http://bar.com/");
46  TestURLRequest request_2(url_2, &delegate, &request_context);
47
48  // Check AddUrlHandler checks for invalid URLs.
49  EXPECT_FALSE(URLRequestFilter::GetInstance()->AddUrlHandler(GURL(),
50                                                              &FactoryA));
51
52  // Check URL matching.
53  URLRequestFilter::GetInstance()->ClearHandlers();
54  EXPECT_TRUE(URLRequestFilter::GetInstance()->AddUrlHandler(url_1,
55                                                             &FactoryA));
56  {
57    scoped_refptr<URLRequestJob> found = URLRequestFilter::Factory(
58        &request_1, request_context.network_delegate(), url_1.scheme());
59    EXPECT_EQ(job_a, found);
60    EXPECT_TRUE(job_a != NULL);
61    job_a = NULL;
62  }
63  EXPECT_EQ(URLRequestFilter::GetInstance()->hit_count(), 1);
64
65  // Check we don't match other URLs.
66  EXPECT_TRUE(URLRequestFilter::Factory(
67      &request_2, request_context.network_delegate(), url_2.scheme()) == NULL);
68  EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count());
69
70  // Check we can overwrite URL handler.
71  EXPECT_TRUE(URLRequestFilter::GetInstance()->AddUrlHandler(url_1,
72                                                             &FactoryB));
73  {
74    scoped_refptr<URLRequestJob> found = URLRequestFilter::Factory(
75        &request_1, request_context.network_delegate(), url_1.scheme());
76    EXPECT_EQ(job_b, found);
77    EXPECT_TRUE(job_b != NULL);
78    job_b = NULL;
79  }
80  EXPECT_EQ(2, URLRequestFilter::GetInstance()->hit_count());
81
82  // Check we can remove URL matching.
83  URLRequestFilter::GetInstance()->RemoveUrlHandler(url_1);
84  EXPECT_TRUE(URLRequestFilter::Factory(
85      &request_1, request_context.network_delegate(), url_1.scheme()) == NULL);
86  EXPECT_EQ(URLRequestFilter::GetInstance()->hit_count(), 2);
87
88  // Check hostname matching.
89  URLRequestFilter::GetInstance()->ClearHandlers();
90  EXPECT_EQ(0, URLRequestFilter::GetInstance()->hit_count());
91  URLRequestFilter::GetInstance()->AddHostnameHandler(url_1.scheme(),
92                                                      url_1.host(),
93                                                      &FactoryB);
94  {
95    scoped_refptr<URLRequestJob> found = URLRequestFilter::Factory(
96        &request_1, request_context.network_delegate(), url_1.scheme());
97    EXPECT_EQ(job_b, found);
98    EXPECT_TRUE(job_b != NULL);
99    job_b = NULL;
100  }
101  EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count());
102
103  // Check we don't match other hostnames.
104  EXPECT_TRUE(URLRequestFilter::Factory(
105      &request_2, request_context.network_delegate(), url_2.scheme()) == NULL);
106  EXPECT_EQ(URLRequestFilter::GetInstance()->hit_count(), 1);
107
108  // Check we can overwrite hostname handler.
109  URLRequestFilter::GetInstance()->AddHostnameHandler(url_1.scheme(),
110                                                      url_1.host(),
111                                                      &FactoryA);
112  {
113    scoped_refptr<URLRequestJob> found = URLRequestFilter::Factory(
114        &request_1, request_context.network_delegate(), url_1.scheme());
115    EXPECT_EQ(job_a, found);
116    EXPECT_TRUE(job_a != NULL);
117    job_a = NULL;
118  }
119  EXPECT_EQ(2, URLRequestFilter::GetInstance()->hit_count());
120
121  // Check we can remove hostname matching.
122  URLRequestFilter::GetInstance()->RemoveHostnameHandler(url_1.scheme(),
123                                                         url_1.host());
124  EXPECT_TRUE(URLRequestFilter::Factory(
125      &request_1, request_context.network_delegate(), url_1.scheme()) == NULL);
126  EXPECT_EQ(2, URLRequestFilter::GetInstance()->hit_count());
127}
128
129}  // namespace
130
131}  // namespace net
132