url_request_filter_unittest.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_filter.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 80f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "net/base/request_priority.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "net/url_request/url_request_interceptor.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_job.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_test_job.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_test_util.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)URLRequestTestJob* job_a; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)URLRequestJob* FactoryA(URLRequest* request, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkDelegate* network_delegate, 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& scheme) { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job_a = new URLRequestTestJob(request, network_delegate); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return job_a; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)URLRequestTestJob* job_b; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)URLRequestJob* FactoryB(URLRequest* request, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkDelegate* network_delegate, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& scheme) { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job_b = new URLRequestTestJob(request, network_delegate); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return job_b; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)URLRequestTestJob* job_c; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class TestURLRequestInterceptor : public URLRequestInterceptor { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~TestURLRequestInterceptor() {} 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual URLRequestJob* MaybeInterceptRequest( 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) URLRequest* request, NetworkDelegate* network_delegate) const OVERRIDE { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) job_c = new URLRequestTestJob(request, network_delegate); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return job_c; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(URLRequestFilter, BasicMatching) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestDelegate delegate; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestURLRequestContext request_context; 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) URLRequestFilter* filter = URLRequestFilter::GetInstance(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_1("http://foo.com/"); 580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) TestURLRequest request_1( 590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) url_1, DEFAULT_PRIORITY, &delegate, &request_context); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url_2("http://bar.com/"); 620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) TestURLRequest request_2( 630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) url_2, DEFAULT_PRIORITY, &delegate, &request_context); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check AddUrlHandler checks for invalid URLs. 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(filter->AddUrlHandler(GURL(), &FactoryA)); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check URL matching. 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->ClearHandlers(); 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(filter->AddUrlHandler(url_1, &FactoryA)); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<URLRequestJob> found = 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->MaybeInterceptRequest(&request_1, NULL); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(job_a, found); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(job_a != NULL); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job_a = NULL; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(filter->hit_count(), 1); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check we don't match other URLs. 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(filter->MaybeInterceptRequest(&request_2, NULL) == NULL); 82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1, filter->hit_count()); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check we can remove URL matching. 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->RemoveUrlHandler(url_1); 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(filter->MaybeInterceptRequest(&request_1, NULL) == NULL); 87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1, filter->hit_count()); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check hostname matching. 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->ClearHandlers(); 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(0, filter->hit_count()); 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->AddHostnameHandler(url_1.scheme(), url_1.host(), &FactoryB); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<URLRequestJob> found = 95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->MaybeInterceptRequest(&request_1, NULL); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(job_b, found); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(job_b != NULL); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job_b = NULL; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1, filter->hit_count()); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check we don't match other hostnames. 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(filter->MaybeInterceptRequest(&request_2, NULL) == NULL); 104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1, filter->hit_count()); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check we can remove hostname matching. 107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->RemoveHostnameHandler(url_1.scheme(), url_1.host()); 108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(filter->MaybeInterceptRequest(&request_1, NULL) == NULL); 109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1, filter->hit_count()); 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Check URLRequestInterceptor hostname matching. 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->ClearHandlers(); 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(0, filter->hit_count()); 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->AddHostnameInterceptor( 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url_1.scheme(), url_1.host(), 11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<net::URLRequestInterceptor>(new TestURLRequestInterceptor())); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<URLRequestJob> found = 119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->MaybeInterceptRequest(&request_1, NULL); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(job_c, found); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(job_c != NULL); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) job_c = NULL; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1, filter->hit_count()); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Check URLRequestInterceptor URL matching. 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->ClearHandlers(); 128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(0, filter->hit_count()); 129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->AddUrlInterceptor( 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url_2, 13146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<net::URLRequestInterceptor>(new TestURLRequestInterceptor())); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<URLRequestJob> found = 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->MaybeInterceptRequest(&request_2, NULL); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(job_c, found); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(job_c != NULL); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) job_c = NULL; 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1, filter->hit_count()); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) filter->ClearHandlers(); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 147