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