url_request_filter_unittest.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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 38URLRequestTestJob* job_c; 39 40class TestProtocolHandler : public URLRequestJobFactory::ProtocolHandler { 41 public: 42 virtual ~TestProtocolHandler() {} 43 44 virtual URLRequestJob* MaybeCreateJob( 45 URLRequest* request, NetworkDelegate* network_delegate) const OVERRIDE { 46 job_c = new URLRequestTestJob(request, network_delegate); 47 return job_c; 48 } 49}; 50 51TEST(URLRequestFilter, BasicMatching) { 52 TestDelegate delegate; 53 TestURLRequestContext request_context; 54 55 GURL url_1("http://foo.com/"); 56 TestURLRequest request_1(url_1, &delegate, &request_context, NULL); 57 58 GURL url_2("http://bar.com/"); 59 TestURLRequest request_2(url_2, &delegate, &request_context, NULL); 60 61 // Check AddUrlHandler checks for invalid URLs. 62 EXPECT_FALSE(URLRequestFilter::GetInstance()->AddUrlHandler(GURL(), 63 &FactoryA)); 64 65 // Check URL matching. 66 URLRequestFilter::GetInstance()->ClearHandlers(); 67 EXPECT_TRUE(URLRequestFilter::GetInstance()->AddUrlHandler(url_1, 68 &FactoryA)); 69 { 70 scoped_refptr<URLRequestJob> found = URLRequestFilter::Factory( 71 &request_1, NULL, url_1.scheme()); 72 EXPECT_EQ(job_a, found); 73 EXPECT_TRUE(job_a != NULL); 74 job_a = NULL; 75 } 76 EXPECT_EQ(URLRequestFilter::GetInstance()->hit_count(), 1); 77 78 // Check we don't match other URLs. 79 EXPECT_TRUE(URLRequestFilter::Factory( 80 &request_2, NULL, url_2.scheme()) == NULL); 81 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count()); 82 83 // Check we can remove URL matching. 84 URLRequestFilter::GetInstance()->RemoveUrlHandler(url_1); 85 EXPECT_TRUE(URLRequestFilter::Factory( 86 &request_1, NULL, url_1.scheme()) == NULL); 87 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count()); 88 89 // Check hostname matching. 90 URLRequestFilter::GetInstance()->ClearHandlers(); 91 EXPECT_EQ(0, URLRequestFilter::GetInstance()->hit_count()); 92 URLRequestFilter::GetInstance()->AddHostnameHandler(url_1.scheme(), 93 url_1.host(), 94 &FactoryB); 95 { 96 scoped_refptr<URLRequestJob> found = URLRequestFilter::Factory( 97 &request_1, NULL, url_1.scheme()); 98 EXPECT_EQ(job_b, found); 99 EXPECT_TRUE(job_b != NULL); 100 job_b = NULL; 101 } 102 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count()); 103 104 // Check we don't match other hostnames. 105 EXPECT_TRUE(URLRequestFilter::Factory( 106 &request_2, NULL, url_2.scheme()) == NULL); 107 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count()); 108 109 // Check we can remove hostname matching. 110 URLRequestFilter::GetInstance()->RemoveHostnameHandler(url_1.scheme(), 111 url_1.host()); 112 EXPECT_TRUE(URLRequestFilter::Factory( 113 &request_1, NULL, url_1.scheme()) == NULL); 114 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count()); 115 116 // Check ProtocolHandler hostname matching. 117 URLRequestFilter::GetInstance()->ClearHandlers(); 118 EXPECT_EQ(0, URLRequestFilter::GetInstance()->hit_count()); 119 URLRequestFilter::GetInstance()->AddHostnameProtocolHandler( 120 url_1.scheme(), url_1.host(), 121 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>( 122 new TestProtocolHandler())); 123 { 124 scoped_refptr<URLRequestJob> found = URLRequestFilter::Factory( 125 &request_1, NULL, url_1.scheme()); 126 EXPECT_EQ(job_c, found); 127 EXPECT_TRUE(job_c != NULL); 128 job_c = NULL; 129 } 130 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count()); 131 132 // Check ProtocolHandler URL matching. 133 URLRequestFilter::GetInstance()->ClearHandlers(); 134 EXPECT_EQ(0, URLRequestFilter::GetInstance()->hit_count()); 135 URLRequestFilter::GetInstance()->AddUrlProtocolHandler( 136 url_2, 137 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>( 138 new TestProtocolHandler())); 139 { 140 scoped_refptr<URLRequestJob> found = URLRequestFilter::Factory( 141 &request_2, NULL, url_2.scheme()); 142 EXPECT_EQ(job_c, found); 143 EXPECT_TRUE(job_c != NULL); 144 job_c = NULL; 145 } 146 EXPECT_EQ(1, URLRequestFilter::GetInstance()->hit_count()); 147 148 URLRequestFilter::GetInstance()->ClearHandlers(); 149} 150 151} // namespace 152 153} // namespace net 154