Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 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" |
Torne (Richard Coles) | 0f1bc08 | 2013-11-06 12:27:47 +0000 | [diff] [blame] | 8 | #include "net/base/request_priority.h" |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 9 | #include "net/url_request/url_request.h" |
| 10 | #include "net/url_request/url_request_context.h" |
Torne (Richard Coles) | 46d4c2b | 2014-06-09 12:00:27 +0100 | [diff] [blame] | 11 | #include "net/url_request/url_request_interceptor.h" |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 12 | #include "net/url_request/url_request_job.h" |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 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 | |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 39 | URLRequestTestJob* job_c; |
| 40 | |
Torne (Richard Coles) | 46d4c2b | 2014-06-09 12:00:27 +0100 | [diff] [blame] | 41 | class TestURLRequestInterceptor : public URLRequestInterceptor { |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 42 | public: |
Torne (Richard Coles) | 46d4c2b | 2014-06-09 12:00:27 +0100 | [diff] [blame] | 43 | virtual ~TestURLRequestInterceptor() {} |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 44 | |
Torne (Richard Coles) | 46d4c2b | 2014-06-09 12:00:27 +0100 | [diff] [blame] | 45 | virtual URLRequestJob* MaybeInterceptRequest( |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 46 | URLRequest* request, NetworkDelegate* network_delegate) const OVERRIDE { |
| 47 | job_c = new URLRequestTestJob(request, network_delegate); |
| 48 | return job_c; |
| 49 | } |
| 50 | }; |
| 51 | |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 52 | TEST(URLRequestFilter, BasicMatching) { |
| 53 | TestDelegate delegate; |
| 54 | TestURLRequestContext request_context; |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 55 | URLRequestFilter* filter = URLRequestFilter::GetInstance(); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 56 | |
| 57 | GURL url_1("http://foo.com/"); |
Torne (Richard Coles) | 0f1bc08 | 2013-11-06 12:27:47 +0000 | [diff] [blame] | 58 | TestURLRequest request_1( |
| 59 | url_1, DEFAULT_PRIORITY, &delegate, &request_context); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 60 | |
| 61 | GURL url_2("http://bar.com/"); |
Torne (Richard Coles) | 0f1bc08 | 2013-11-06 12:27:47 +0000 | [diff] [blame] | 62 | TestURLRequest request_2( |
| 63 | url_2, DEFAULT_PRIORITY, &delegate, &request_context); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 64 | |
| 65 | // Check AddUrlHandler checks for invalid URLs. |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 66 | EXPECT_FALSE(filter->AddUrlHandler(GURL(), &FactoryA)); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 67 | |
| 68 | // Check URL matching. |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 69 | filter->ClearHandlers(); |
| 70 | EXPECT_TRUE(filter->AddUrlHandler(url_1, &FactoryA)); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 71 | { |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 72 | scoped_refptr<URLRequestJob> found = |
| 73 | filter->MaybeInterceptRequest(&request_1, NULL); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 74 | EXPECT_EQ(job_a, found); |
| 75 | EXPECT_TRUE(job_a != NULL); |
| 76 | job_a = NULL; |
| 77 | } |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 78 | EXPECT_EQ(filter->hit_count(), 1); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 79 | |
| 80 | // Check we don't match other URLs. |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 81 | EXPECT_TRUE(filter->MaybeInterceptRequest(&request_2, NULL) == NULL); |
| 82 | EXPECT_EQ(1, filter->hit_count()); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 83 | |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 84 | // Check we can remove URL matching. |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 85 | filter->RemoveUrlHandler(url_1); |
| 86 | EXPECT_TRUE(filter->MaybeInterceptRequest(&request_1, NULL) == NULL); |
| 87 | EXPECT_EQ(1, filter->hit_count()); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 88 | |
| 89 | // Check hostname matching. |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 90 | filter->ClearHandlers(); |
| 91 | EXPECT_EQ(0, filter->hit_count()); |
| 92 | filter->AddHostnameHandler(url_1.scheme(), url_1.host(), &FactoryB); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 93 | { |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 94 | scoped_refptr<URLRequestJob> found = |
| 95 | filter->MaybeInterceptRequest(&request_1, NULL); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 96 | EXPECT_EQ(job_b, found); |
| 97 | EXPECT_TRUE(job_b != NULL); |
| 98 | job_b = NULL; |
| 99 | } |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 100 | EXPECT_EQ(1, filter->hit_count()); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 101 | |
| 102 | // Check we don't match other hostnames. |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 103 | EXPECT_TRUE(filter->MaybeInterceptRequest(&request_2, NULL) == NULL); |
| 104 | EXPECT_EQ(1, filter->hit_count()); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 105 | |
| 106 | // Check we can remove hostname matching. |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 107 | filter->RemoveHostnameHandler(url_1.scheme(), url_1.host()); |
| 108 | EXPECT_TRUE(filter->MaybeInterceptRequest(&request_1, NULL) == NULL); |
| 109 | EXPECT_EQ(1, filter->hit_count()); |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 110 | |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 111 | // Check URLRequestInterceptor hostname matching. |
| 112 | filter->ClearHandlers(); |
| 113 | EXPECT_EQ(0, filter->hit_count()); |
| 114 | filter->AddHostnameInterceptor( |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 115 | url_1.scheme(), url_1.host(), |
Torne (Richard Coles) | 46d4c2b | 2014-06-09 12:00:27 +0100 | [diff] [blame] | 116 | scoped_ptr<net::URLRequestInterceptor>(new TestURLRequestInterceptor())); |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 117 | { |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 118 | scoped_refptr<URLRequestJob> found = |
| 119 | filter->MaybeInterceptRequest(&request_1, NULL); |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 120 | EXPECT_EQ(job_c, found); |
| 121 | EXPECT_TRUE(job_c != NULL); |
| 122 | job_c = NULL; |
| 123 | } |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 124 | EXPECT_EQ(1, filter->hit_count()); |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 125 | |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 126 | // Check URLRequestInterceptor URL matching. |
| 127 | filter->ClearHandlers(); |
| 128 | EXPECT_EQ(0, filter->hit_count()); |
| 129 | filter->AddUrlInterceptor( |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 130 | url_2, |
Torne (Richard Coles) | 46d4c2b | 2014-06-09 12:00:27 +0100 | [diff] [blame] | 131 | scoped_ptr<net::URLRequestInterceptor>(new TestURLRequestInterceptor())); |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 132 | { |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 133 | scoped_refptr<URLRequestJob> found = |
| 134 | filter->MaybeInterceptRequest(&request_2, NULL); |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 135 | EXPECT_EQ(job_c, found); |
| 136 | EXPECT_TRUE(job_c != NULL); |
| 137 | job_c = NULL; |
| 138 | } |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 139 | EXPECT_EQ(1, filter->hit_count()); |
Torne (Richard Coles) | 2a99a7e | 2013-03-28 15:31:22 +0000 | [diff] [blame] | 140 | |
Torne (Richard Coles) | f8ee788 | 2014-06-20 14:52:04 +0100 | [diff] [blame] | 141 | filter->ClearHandlers(); |
Torne (Richard Coles) | 5821806 | 2012-11-14 11:43:16 +0000 | [diff] [blame] | 142 | } |
| 143 | |
| 144 | } // namespace |
| 145 | |
| 146 | } // namespace net |