| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/proxy/proxy_service.h" | 5 #include "net/proxy/proxy_service.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/string_util.h" | 11 #include "base/string_util.h" |
| 12 #include "googleurl/src/gurl.h" | 12 #include "googleurl/src/gurl.h" |
| 13 #include "net/base/load_log.h" | 13 #include "net/base/load_log.h" |
| 14 #include "net/base/load_log_unittest.h" | 14 #include "net/base/load_log_unittest.h" |
| 15 #include "net/base/mock_network_change_notifier.h" |
| 15 #include "net/base/net_errors.h" | 16 #include "net/base/net_errors.h" |
| 16 #include "net/base/test_completion_callback.h" | 17 #include "net/base/test_completion_callback.h" |
| 17 #include "net/proxy/mock_proxy_resolver.h" | 18 #include "net/proxy/mock_proxy_resolver.h" |
| 18 #include "net/proxy/proxy_config_service.h" | 19 #include "net/proxy/proxy_config_service.h" |
| 19 #include "net/proxy/proxy_resolver.h" | 20 #include "net/proxy/proxy_resolver.h" |
| 20 #include "net/proxy/proxy_script_fetcher.h" | 21 #include "net/proxy/proxy_script_fetcher.h" |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 22 | 23 |
| 23 // TODO(eroman): Write a test which exercises | 24 // TODO(eroman): Write a test which exercises |
| 24 // ProxyService::SuspendAllPendingRequests(). | 25 // ProxyService::SuspendAllPendingRequests(). |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 | 85 |
| 85 private: | 86 private: |
| 86 GURL pending_request_url_; | 87 GURL pending_request_url_; |
| 87 CompletionCallback* pending_request_callback_; | 88 CompletionCallback* pending_request_callback_; |
| 88 std::string* pending_request_bytes_; | 89 std::string* pending_request_bytes_; |
| 89 }; | 90 }; |
| 90 | 91 |
| 91 TEST(ProxyServiceTest, Direct) { | 92 TEST(ProxyServiceTest, Direct) { |
| 92 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 93 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 93 scoped_refptr<ProxyService> service( | 94 scoped_refptr<ProxyService> service( |
| 94 new ProxyService(new MockProxyConfigService, resolver)); | 95 new ProxyService(new MockProxyConfigService, resolver, NULL)); |
| 95 | 96 |
| 96 GURL url("http://www.google.com/"); | 97 GURL url("http://www.google.com/"); |
| 97 | 98 |
| 98 ProxyInfo info; | 99 ProxyInfo info; |
| 99 TestCompletionCallback callback; | 100 TestCompletionCallback callback; |
| 100 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); | 101 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); |
| 101 int rv = service->ResolveProxy(url, &info, &callback, NULL, log); | 102 int rv = service->ResolveProxy(url, &info, &callback, NULL, log); |
| 102 EXPECT_EQ(OK, rv); | 103 EXPECT_EQ(OK, rv); |
| 103 EXPECT_TRUE(resolver->pending_requests().empty()); | 104 EXPECT_TRUE(resolver->pending_requests().empty()); |
| 104 EXPECT_TRUE(NULL == service->init_proxy_resolver_log()); | 105 EXPECT_TRUE(NULL == service->init_proxy_resolver_log()); |
| 105 | 106 |
| 106 EXPECT_TRUE(info.is_direct()); | 107 EXPECT_TRUE(info.is_direct()); |
| 107 | 108 |
| 108 // Check the LoadLog was filled correctly. | 109 // Check the LoadLog was filled correctly. |
| 109 EXPECT_EQ(5u, log->entries().size()); | 110 EXPECT_EQ(5u, log->entries().size()); |
| 110 ExpectLogContains(log, 0, LoadLog::TYPE_PROXY_SERVICE, LoadLog::PHASE_BEGIN); | 111 ExpectLogContains(log, 0, LoadLog::TYPE_PROXY_SERVICE, LoadLog::PHASE_BEGIN); |
| 111 ExpectLogContains(log, 4, LoadLog::TYPE_PROXY_SERVICE, LoadLog::PHASE_END); | 112 ExpectLogContains(log, 4, LoadLog::TYPE_PROXY_SERVICE, LoadLog::PHASE_END); |
| 112 } | 113 } |
| 113 | 114 |
| 114 TEST(ProxyServiceTest, PAC) { | 115 TEST(ProxyServiceTest, PAC) { |
| 115 MockProxyConfigService* config_service = | 116 MockProxyConfigService* config_service = |
| 116 new MockProxyConfigService("http://foopy/proxy.pac"); | 117 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 117 | 118 |
| 118 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 119 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 119 | 120 |
| 120 scoped_refptr<ProxyService> service( | 121 scoped_refptr<ProxyService> service( |
| 121 new ProxyService(config_service, resolver)); | 122 new ProxyService(config_service, resolver, NULL)); |
| 122 | 123 |
| 123 GURL url("http://www.google.com/"); | 124 GURL url("http://www.google.com/"); |
| 124 | 125 |
| 125 ProxyInfo info; | 126 ProxyInfo info; |
| 126 TestCompletionCallback callback; | 127 TestCompletionCallback callback; |
| 127 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); | 128 scoped_refptr<LoadLog> log(new LoadLog(LoadLog::kUnbounded)); |
| 128 int rv = service->ResolveProxy(url, &info, &callback, NULL, log); | 129 int rv = service->ResolveProxy(url, &info, &callback, NULL, log); |
| 129 EXPECT_EQ(ERR_IO_PENDING, rv); | 130 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 130 | 131 |
| 131 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 132 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| (...skipping 24 matching lines...) Expand all Loading... |
| 156 | 157 |
| 157 // Test that the proxy resolver does not see the URL's username/password | 158 // Test that the proxy resolver does not see the URL's username/password |
| 158 // or its reference section. | 159 // or its reference section. |
| 159 TEST(ProxyServiceTest, PAC_NoIdentityOrHash) { | 160 TEST(ProxyServiceTest, PAC_NoIdentityOrHash) { |
| 160 MockProxyConfigService* config_service = | 161 MockProxyConfigService* config_service = |
| 161 new MockProxyConfigService("http://foopy/proxy.pac"); | 162 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 162 | 163 |
| 163 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 164 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 164 | 165 |
| 165 scoped_refptr<ProxyService> service( | 166 scoped_refptr<ProxyService> service( |
| 166 new ProxyService(config_service, resolver)); | 167 new ProxyService(config_service, resolver, NULL)); |
| 167 | 168 |
| 168 GURL url("http://username:password@www.google.com/?ref#hash#hash"); | 169 GURL url("http://username:password@www.google.com/?ref#hash#hash"); |
| 169 | 170 |
| 170 ProxyInfo info; | 171 ProxyInfo info; |
| 171 TestCompletionCallback callback; | 172 TestCompletionCallback callback; |
| 172 int rv = service->ResolveProxy(url, &info, &callback, NULL, NULL); | 173 int rv = service->ResolveProxy(url, &info, &callback, NULL, NULL); |
| 173 EXPECT_EQ(ERR_IO_PENDING, rv); | 174 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 174 | 175 |
| 175 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 176 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 176 resolver->pending_set_pac_script_request()->pac_url()); | 177 resolver->pending_set_pac_script_request()->pac_url()); |
| 177 resolver->pending_set_pac_script_request()->CompleteNow(OK); | 178 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 178 | 179 |
| 179 ASSERT_EQ(1u, resolver->pending_requests().size()); | 180 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 180 // The URL should have been simplified, stripping the username/password/hash. | 181 // The URL should have been simplified, stripping the username/password/hash. |
| 181 EXPECT_EQ(GURL("http://www.google.com/?ref"), | 182 EXPECT_EQ(GURL("http://www.google.com/?ref"), |
| 182 resolver->pending_requests()[0]->url()); | 183 resolver->pending_requests()[0]->url()); |
| 183 | 184 |
| 184 // We end here without ever completing the request -- destruction of | 185 // We end here without ever completing the request -- destruction of |
| 185 // ProxyService will cancel the outstanding request. | 186 // ProxyService will cancel the outstanding request. |
| 186 } | 187 } |
| 187 | 188 |
| 188 TEST(ProxyServiceTest, PAC_FailoverWithoutDirect) { | 189 TEST(ProxyServiceTest, PAC_FailoverWithoutDirect) { |
| 189 MockProxyConfigService* config_service = | 190 MockProxyConfigService* config_service = |
| 190 new MockProxyConfigService("http://foopy/proxy.pac"); | 191 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 191 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 192 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 192 | 193 |
| 193 scoped_refptr<ProxyService> service( | 194 scoped_refptr<ProxyService> service( |
| 194 new ProxyService(config_service, resolver)); | 195 new ProxyService(config_service, resolver, NULL)); |
| 195 | 196 |
| 196 GURL url("http://www.google.com/"); | 197 GURL url("http://www.google.com/"); |
| 197 | 198 |
| 198 ProxyInfo info; | 199 ProxyInfo info; |
| 199 TestCompletionCallback callback1; | 200 TestCompletionCallback callback1; |
| 200 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 201 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); |
| 201 EXPECT_EQ(ERR_IO_PENDING, rv); | 202 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 202 | 203 |
| 203 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 204 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 204 resolver->pending_set_pac_script_request()->pac_url()); | 205 resolver->pending_set_pac_script_request()->pac_url()); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 // then foobar:20, and then give up and error. | 242 // then foobar:20, and then give up and error. |
| 242 // | 243 // |
| 243 // The important check of this test is to make sure that DIRECT is not somehow | 244 // The important check of this test is to make sure that DIRECT is not somehow |
| 244 // cached as being a bad proxy. | 245 // cached as being a bad proxy. |
| 245 TEST(ProxyServiceTest, PAC_FailoverAfterDirect) { | 246 TEST(ProxyServiceTest, PAC_FailoverAfterDirect) { |
| 246 MockProxyConfigService* config_service = | 247 MockProxyConfigService* config_service = |
| 247 new MockProxyConfigService("http://foopy/proxy.pac"); | 248 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 248 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 249 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 249 | 250 |
| 250 scoped_refptr<ProxyService> service( | 251 scoped_refptr<ProxyService> service( |
| 251 new ProxyService(config_service, resolver)); | 252 new ProxyService(config_service, resolver, NULL)); |
| 252 | 253 |
| 253 GURL url("http://www.google.com/"); | 254 GURL url("http://www.google.com/"); |
| 254 | 255 |
| 255 ProxyInfo info; | 256 ProxyInfo info; |
| 256 TestCompletionCallback callback1; | 257 TestCompletionCallback callback1; |
| 257 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 258 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); |
| 258 EXPECT_EQ(ERR_IO_PENDING, rv); | 259 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 259 | 260 |
| 260 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 261 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 261 resolver->pending_set_pac_script_request()->pac_url()); | 262 resolver->pending_set_pac_script_request()->pac_url()); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 // Test what happens when the ProxyResolver fails. The download and setting | 304 // Test what happens when the ProxyResolver fails. The download and setting |
| 304 // of the PAC script have already succeeded, so this corresponds with a | 305 // of the PAC script have already succeeded, so this corresponds with a |
| 305 // javascript runtime error while calling FindProxyForURL(). | 306 // javascript runtime error while calling FindProxyForURL(). |
| 306 | 307 |
| 307 MockProxyConfigService* config_service = | 308 MockProxyConfigService* config_service = |
| 308 new MockProxyConfigService("http://foopy/proxy.pac"); | 309 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 309 | 310 |
| 310 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 311 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 311 | 312 |
| 312 scoped_refptr<ProxyService> service( | 313 scoped_refptr<ProxyService> service( |
| 313 new ProxyService(config_service, resolver)); | 314 new ProxyService(config_service, resolver, NULL)); |
| 314 | 315 |
| 315 // Start first resolve request. | 316 // Start first resolve request. |
| 316 GURL url("http://www.google.com/"); | 317 GURL url("http://www.google.com/"); |
| 317 ProxyInfo info; | 318 ProxyInfo info; |
| 318 TestCompletionCallback callback1; | 319 TestCompletionCallback callback1; |
| 319 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 320 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); |
| 320 EXPECT_EQ(ERR_IO_PENDING, rv); | 321 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 321 | 322 |
| 322 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 323 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 323 resolver->pending_set_pac_script_request()->pac_url()); | 324 resolver->pending_set_pac_script_request()->pac_url()); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 353 TEST(ProxyServiceTest, ProxyFallback) { | 354 TEST(ProxyServiceTest, ProxyFallback) { |
| 354 // Test what happens when we specify multiple proxy servers and some of them | 355 // Test what happens when we specify multiple proxy servers and some of them |
| 355 // are bad. | 356 // are bad. |
| 356 | 357 |
| 357 MockProxyConfigService* config_service = | 358 MockProxyConfigService* config_service = |
| 358 new MockProxyConfigService("http://foopy/proxy.pac"); | 359 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 359 | 360 |
| 360 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 361 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 361 | 362 |
| 362 scoped_refptr<ProxyService> service( | 363 scoped_refptr<ProxyService> service( |
| 363 new ProxyService(config_service, resolver)); | 364 new ProxyService(config_service, resolver, NULL)); |
| 364 | 365 |
| 365 GURL url("http://www.google.com/"); | 366 GURL url("http://www.google.com/"); |
| 366 | 367 |
| 367 // Get the proxy information. | 368 // Get the proxy information. |
| 368 ProxyInfo info; | 369 ProxyInfo info; |
| 369 TestCompletionCallback callback1; | 370 TestCompletionCallback callback1; |
| 370 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 371 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); |
| 371 EXPECT_EQ(ERR_IO_PENDING, rv); | 372 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 372 | 373 |
| 373 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 374 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 | 432 |
| 432 // This test is similar to ProxyFallback, but this time we have an explicit | 433 // This test is similar to ProxyFallback, but this time we have an explicit |
| 433 // fallback choice to DIRECT. | 434 // fallback choice to DIRECT. |
| 434 TEST(ProxyServiceTest, ProxyFallbackToDirect) { | 435 TEST(ProxyServiceTest, ProxyFallbackToDirect) { |
| 435 MockProxyConfigService* config_service = | 436 MockProxyConfigService* config_service = |
| 436 new MockProxyConfigService("http://foopy/proxy.pac"); | 437 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 437 | 438 |
| 438 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 439 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 439 | 440 |
| 440 scoped_refptr<ProxyService> service( | 441 scoped_refptr<ProxyService> service( |
| 441 new ProxyService(config_service, resolver)); | 442 new ProxyService(config_service, resolver, NULL)); |
| 442 | 443 |
| 443 GURL url("http://www.google.com/"); | 444 GURL url("http://www.google.com/"); |
| 444 | 445 |
| 445 // Get the proxy information. | 446 // Get the proxy information. |
| 446 ProxyInfo info; | 447 ProxyInfo info; |
| 447 TestCompletionCallback callback1; | 448 TestCompletionCallback callback1; |
| 448 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 449 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); |
| 449 EXPECT_EQ(ERR_IO_PENDING, rv); | 450 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 450 | 451 |
| 451 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 452 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 | 492 |
| 492 TEST(ProxyServiceTest, ProxyFallback_NewSettings) { | 493 TEST(ProxyServiceTest, ProxyFallback_NewSettings) { |
| 493 // Test proxy failover when new settings are available. | 494 // Test proxy failover when new settings are available. |
| 494 | 495 |
| 495 MockProxyConfigService* config_service = | 496 MockProxyConfigService* config_service = |
| 496 new MockProxyConfigService("http://foopy/proxy.pac"); | 497 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 497 | 498 |
| 498 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 499 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 499 | 500 |
| 500 scoped_refptr<ProxyService> service( | 501 scoped_refptr<ProxyService> service( |
| 501 new ProxyService(config_service, resolver)); | 502 new ProxyService(config_service, resolver, NULL)); |
| 502 | 503 |
| 503 GURL url("http://www.google.com/"); | 504 GURL url("http://www.google.com/"); |
| 504 | 505 |
| 505 // Get the proxy information. | 506 // Get the proxy information. |
| 506 ProxyInfo info; | 507 ProxyInfo info; |
| 507 TestCompletionCallback callback1; | 508 TestCompletionCallback callback1; |
| 508 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 509 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); |
| 509 EXPECT_EQ(ERR_IO_PENDING, rv); | 510 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 510 | 511 |
| 511 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 512 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 580 | 581 |
| 581 TEST(ProxyServiceTest, ProxyFallback_BadConfig) { | 582 TEST(ProxyServiceTest, ProxyFallback_BadConfig) { |
| 582 // Test proxy failover when the configuration is bad. | 583 // Test proxy failover when the configuration is bad. |
| 583 | 584 |
| 584 MockProxyConfigService* config_service = | 585 MockProxyConfigService* config_service = |
| 585 new MockProxyConfigService("http://foopy/proxy.pac"); | 586 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 586 | 587 |
| 587 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 588 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 588 | 589 |
| 589 scoped_refptr<ProxyService> service( | 590 scoped_refptr<ProxyService> service( |
| 590 new ProxyService(config_service, resolver)); | 591 new ProxyService(config_service, resolver, NULL)); |
| 591 | 592 |
| 592 GURL url("http://www.google.com/"); | 593 GURL url("http://www.google.com/"); |
| 593 | 594 |
| 594 // Get the proxy information. | 595 // Get the proxy information. |
| 595 ProxyInfo info; | 596 ProxyInfo info; |
| 596 TestCompletionCallback callback1; | 597 TestCompletionCallback callback1; |
| 597 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); | 598 int rv = service->ResolveProxy(url, &info, &callback1, NULL, NULL); |
| 598 EXPECT_EQ(ERR_IO_PENDING, rv); | 599 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 599 | 600 |
| 600 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 601 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 664 // Test what happens when a proxy bypass list is specified. | 665 // Test what happens when a proxy bypass list is specified. |
| 665 | 666 |
| 666 ProxyInfo info; | 667 ProxyInfo info; |
| 667 ProxyConfig config; | 668 ProxyConfig config; |
| 668 config.proxy_rules.ParseFromString("foopy1:8080;foopy2:9090"); | 669 config.proxy_rules.ParseFromString("foopy1:8080;foopy2:9090"); |
| 669 config.auto_detect = false; | 670 config.auto_detect = false; |
| 670 config.proxy_bypass_local_names = true; | 671 config.proxy_bypass_local_names = true; |
| 671 | 672 |
| 672 { | 673 { |
| 673 scoped_refptr<ProxyService> service(new ProxyService( | 674 scoped_refptr<ProxyService> service(new ProxyService( |
| 674 new MockProxyConfigService(config), new MockAsyncProxyResolver())); | 675 new MockProxyConfigService(config), |
| 676 new MockAsyncProxyResolver(), |
| 677 NULL)); |
| 675 GURL url("http://www.google.com/"); | 678 GURL url("http://www.google.com/"); |
| 676 // Get the proxy information. | 679 // Get the proxy information. |
| 677 TestCompletionCallback callback; | 680 TestCompletionCallback callback; |
| 678 int rv = service->ResolveProxy(url, &info, &callback, NULL, NULL); | 681 int rv = service->ResolveProxy(url, &info, &callback, NULL, NULL); |
| 679 EXPECT_EQ(OK, rv); | 682 EXPECT_EQ(OK, rv); |
| 680 EXPECT_FALSE(info.is_direct()); | 683 EXPECT_FALSE(info.is_direct()); |
| 681 } | 684 } |
| 682 | 685 |
| 683 { | 686 { |
| 684 scoped_refptr<ProxyService> service(new ProxyService( | 687 scoped_refptr<ProxyService> service(new ProxyService( |
| 685 new MockProxyConfigService(config), new MockAsyncProxyResolver())); | 688 new MockProxyConfigService(config), |
| 689 new MockAsyncProxyResolver(), |
| 690 NULL)); |
| 686 GURL test_url("http://local"); | 691 GURL test_url("http://local"); |
| 687 TestCompletionCallback callback; | 692 TestCompletionCallback callback; |
| 688 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 693 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 689 EXPECT_EQ(OK, rv); | 694 EXPECT_EQ(OK, rv); |
| 690 EXPECT_TRUE(info.is_direct()); | 695 EXPECT_TRUE(info.is_direct()); |
| 691 } | 696 } |
| 692 | 697 |
| 693 config.proxy_bypass.clear(); | 698 config.proxy_bypass.clear(); |
| 694 config.proxy_bypass.push_back("*.org"); | 699 config.proxy_bypass.push_back("*.org"); |
| 695 config.proxy_bypass_local_names = true; | 700 config.proxy_bypass_local_names = true; |
| 696 { | 701 { |
| 697 scoped_refptr<ProxyService> service(new ProxyService( | 702 scoped_refptr<ProxyService> service(new ProxyService( |
| 698 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 703 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 699 GURL test_url("http://www.webkit.org"); | 704 GURL test_url("http://www.webkit.org"); |
| 700 TestCompletionCallback callback; | 705 TestCompletionCallback callback; |
| 701 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 706 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 702 EXPECT_EQ(OK, rv); | 707 EXPECT_EQ(OK, rv); |
| 703 EXPECT_TRUE(info.is_direct()); | 708 EXPECT_TRUE(info.is_direct()); |
| 704 } | 709 } |
| 705 | 710 |
| 706 config.proxy_bypass.clear(); | 711 config.proxy_bypass.clear(); |
| 707 config.proxy_bypass.push_back("*.org"); | 712 config.proxy_bypass.push_back("*.org"); |
| 708 config.proxy_bypass.push_back("7*"); | 713 config.proxy_bypass.push_back("7*"); |
| 709 config.proxy_bypass_local_names = true; | 714 config.proxy_bypass_local_names = true; |
| 710 { | 715 { |
| 711 scoped_refptr<ProxyService> service(new ProxyService( | 716 scoped_refptr<ProxyService> service(new ProxyService( |
| 712 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 717 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 713 GURL test_url("http://74.125.19.147"); | 718 GURL test_url("http://74.125.19.147"); |
| 714 TestCompletionCallback callback; | 719 TestCompletionCallback callback; |
| 715 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 720 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 716 EXPECT_EQ(OK, rv); | 721 EXPECT_EQ(OK, rv); |
| 717 EXPECT_TRUE(info.is_direct()); | 722 EXPECT_TRUE(info.is_direct()); |
| 718 } | 723 } |
| 719 | 724 |
| 720 config.proxy_bypass.clear(); | 725 config.proxy_bypass.clear(); |
| 721 config.proxy_bypass.push_back("*.org"); | 726 config.proxy_bypass.push_back("*.org"); |
| 722 config.proxy_bypass_local_names = true; | 727 config.proxy_bypass_local_names = true; |
| 723 { | 728 { |
| 724 scoped_refptr<ProxyService> service(new ProxyService( | 729 scoped_refptr<ProxyService> service(new ProxyService( |
| 725 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 730 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 726 GURL test_url("http://www.msn.com"); | 731 GURL test_url("http://www.msn.com"); |
| 727 TestCompletionCallback callback; | 732 TestCompletionCallback callback; |
| 728 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 733 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 729 EXPECT_EQ(OK, rv); | 734 EXPECT_EQ(OK, rv); |
| 730 EXPECT_FALSE(info.is_direct()); | 735 EXPECT_FALSE(info.is_direct()); |
| 731 } | 736 } |
| 732 | 737 |
| 733 config.proxy_bypass.clear(); | 738 config.proxy_bypass.clear(); |
| 734 config.proxy_bypass.push_back("*.MSN.COM"); | 739 config.proxy_bypass.push_back("*.MSN.COM"); |
| 735 config.proxy_bypass_local_names = true; | 740 config.proxy_bypass_local_names = true; |
| 736 { | 741 { |
| 737 scoped_refptr<ProxyService> service(new ProxyService( | 742 scoped_refptr<ProxyService> service(new ProxyService( |
| 738 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 743 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 739 GURL test_url("http://www.msnbc.msn.com"); | 744 GURL test_url("http://www.msnbc.msn.com"); |
| 740 TestCompletionCallback callback; | 745 TestCompletionCallback callback; |
| 741 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 746 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 742 EXPECT_EQ(OK, rv); | 747 EXPECT_EQ(OK, rv); |
| 743 EXPECT_TRUE(info.is_direct()); | 748 EXPECT_TRUE(info.is_direct()); |
| 744 } | 749 } |
| 745 | 750 |
| 746 config.proxy_bypass.clear(); | 751 config.proxy_bypass.clear(); |
| 747 config.proxy_bypass.push_back("*.msn.com"); | 752 config.proxy_bypass.push_back("*.msn.com"); |
| 748 config.proxy_bypass_local_names = true; | 753 config.proxy_bypass_local_names = true; |
| 749 { | 754 { |
| 750 scoped_refptr<ProxyService> service(new ProxyService( | 755 scoped_refptr<ProxyService> service(new ProxyService( |
| 751 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 756 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 752 GURL test_url("HTTP://WWW.MSNBC.MSN.COM"); | 757 GURL test_url("HTTP://WWW.MSNBC.MSN.COM"); |
| 753 TestCompletionCallback callback; | 758 TestCompletionCallback callback; |
| 754 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 759 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 755 EXPECT_EQ(OK, rv); | 760 EXPECT_EQ(OK, rv); |
| 756 EXPECT_TRUE(info.is_direct()); | 761 EXPECT_TRUE(info.is_direct()); |
| 757 } | 762 } |
| 758 } | 763 } |
| 759 | 764 |
| 760 TEST(ProxyServiceTest, ProxyBypassListWithPorts) { | 765 TEST(ProxyServiceTest, ProxyBypassListWithPorts) { |
| 761 // Test port specification in bypass list entries. | 766 // Test port specification in bypass list entries. |
| 762 ProxyInfo info; | 767 ProxyInfo info; |
| 763 ProxyConfig config; | 768 ProxyConfig config; |
| 764 config.proxy_rules.ParseFromString("foopy1:8080;foopy2:9090"); | 769 config.proxy_rules.ParseFromString("foopy1:8080;foopy2:9090"); |
| 765 config.auto_detect = false; | 770 config.auto_detect = false; |
| 766 config.proxy_bypass_local_names = false; | 771 config.proxy_bypass_local_names = false; |
| 767 | 772 |
| 768 config.proxy_bypass.clear(); | 773 config.proxy_bypass.clear(); |
| 769 config.proxy_bypass.push_back("*.example.com:99"); | 774 config.proxy_bypass.push_back("*.example.com:99"); |
| 770 { | 775 { |
| 771 scoped_refptr<ProxyService> service(new ProxyService( | 776 scoped_refptr<ProxyService> service(new ProxyService( |
| 772 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 777 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 773 { | 778 { |
| 774 GURL test_url("http://www.example.com:99"); | 779 GURL test_url("http://www.example.com:99"); |
| 775 TestCompletionCallback callback; | 780 TestCompletionCallback callback; |
| 776 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 781 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 777 EXPECT_EQ(OK, rv); | 782 EXPECT_EQ(OK, rv); |
| 778 EXPECT_TRUE(info.is_direct()); | 783 EXPECT_TRUE(info.is_direct()); |
| 779 } | 784 } |
| 780 { | 785 { |
| 781 GURL test_url("http://www.example.com:100"); | 786 GURL test_url("http://www.example.com:100"); |
| 782 TestCompletionCallback callback; | 787 TestCompletionCallback callback; |
| 783 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 788 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 784 EXPECT_EQ(OK, rv); | 789 EXPECT_EQ(OK, rv); |
| 785 EXPECT_FALSE(info.is_direct()); | 790 EXPECT_FALSE(info.is_direct()); |
| 786 } | 791 } |
| 787 { | 792 { |
| 788 GURL test_url("http://www.example.com"); | 793 GURL test_url("http://www.example.com"); |
| 789 TestCompletionCallback callback; | 794 TestCompletionCallback callback; |
| 790 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 795 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 791 EXPECT_EQ(OK, rv); | 796 EXPECT_EQ(OK, rv); |
| 792 EXPECT_FALSE(info.is_direct()); | 797 EXPECT_FALSE(info.is_direct()); |
| 793 } | 798 } |
| 794 } | 799 } |
| 795 | 800 |
| 796 config.proxy_bypass.clear(); | 801 config.proxy_bypass.clear(); |
| 797 config.proxy_bypass.push_back("*.example.com:80"); | 802 config.proxy_bypass.push_back("*.example.com:80"); |
| 798 { | 803 { |
| 799 scoped_refptr<ProxyService> service(new ProxyService( | 804 scoped_refptr<ProxyService> service(new ProxyService( |
| 800 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 805 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 801 GURL test_url("http://www.example.com"); | 806 GURL test_url("http://www.example.com"); |
| 802 TestCompletionCallback callback; | 807 TestCompletionCallback callback; |
| 803 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 808 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 804 EXPECT_EQ(OK, rv); | 809 EXPECT_EQ(OK, rv); |
| 805 EXPECT_TRUE(info.is_direct()); | 810 EXPECT_TRUE(info.is_direct()); |
| 806 } | 811 } |
| 807 | 812 |
| 808 config.proxy_bypass.clear(); | 813 config.proxy_bypass.clear(); |
| 809 config.proxy_bypass.push_back("*.example.com"); | 814 config.proxy_bypass.push_back("*.example.com"); |
| 810 { | 815 { |
| 811 scoped_refptr<ProxyService> service(new ProxyService( | 816 scoped_refptr<ProxyService> service(new ProxyService( |
| 812 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 817 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 813 GURL test_url("http://www.example.com:99"); | 818 GURL test_url("http://www.example.com:99"); |
| 814 TestCompletionCallback callback; | 819 TestCompletionCallback callback; |
| 815 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 820 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 816 EXPECT_EQ(OK, rv); | 821 EXPECT_EQ(OK, rv); |
| 817 EXPECT_TRUE(info.is_direct()); | 822 EXPECT_TRUE(info.is_direct()); |
| 818 } | 823 } |
| 819 | 824 |
| 820 // IPv6 with port. | 825 // IPv6 with port. |
| 821 config.proxy_bypass.clear(); | 826 config.proxy_bypass.clear(); |
| 822 config.proxy_bypass.push_back("[3ffe:2a00:100:7031::1]:99"); | 827 config.proxy_bypass.push_back("[3ffe:2a00:100:7031::1]:99"); |
| 823 { | 828 { |
| 824 scoped_refptr<ProxyService> service(new ProxyService( | 829 scoped_refptr<ProxyService> service(new ProxyService( |
| 825 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 830 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 826 { | 831 { |
| 827 GURL test_url("http://[3ffe:2a00:100:7031::1]:99/"); | 832 GURL test_url("http://[3ffe:2a00:100:7031::1]:99/"); |
| 828 TestCompletionCallback callback; | 833 TestCompletionCallback callback; |
| 829 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 834 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 830 EXPECT_EQ(OK, rv); | 835 EXPECT_EQ(OK, rv); |
| 831 EXPECT_TRUE(info.is_direct()); | 836 EXPECT_TRUE(info.is_direct()); |
| 832 } | 837 } |
| 833 { | 838 { |
| 834 GURL test_url("http://[3ffe:2a00:100:7031::1]/"); | 839 GURL test_url("http://[3ffe:2a00:100:7031::1]/"); |
| 835 TestCompletionCallback callback; | 840 TestCompletionCallback callback; |
| 836 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 841 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 837 EXPECT_EQ(OK, rv); | 842 EXPECT_EQ(OK, rv); |
| 838 EXPECT_FALSE(info.is_direct()); | 843 EXPECT_FALSE(info.is_direct()); |
| 839 } | 844 } |
| 840 } | 845 } |
| 841 | 846 |
| 842 // IPv6 without port. The bypass entry ought to work without the | 847 // IPv6 without port. The bypass entry ought to work without the |
| 843 // brackets, but the bypass matching logic in ProxyService is | 848 // brackets, but the bypass matching logic in ProxyService is |
| 844 // currently limited. | 849 // currently limited. |
| 845 config.proxy_bypass.clear(); | 850 config.proxy_bypass.clear(); |
| 846 config.proxy_bypass.push_back("[3ffe:2a00:100:7031::1]"); | 851 config.proxy_bypass.push_back("[3ffe:2a00:100:7031::1]"); |
| 847 { | 852 { |
| 848 scoped_refptr<ProxyService> service(new ProxyService( | 853 scoped_refptr<ProxyService> service(new ProxyService( |
| 849 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 854 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 850 { | 855 { |
| 851 GURL test_url("http://[3ffe:2a00:100:7031::1]:99/"); | 856 GURL test_url("http://[3ffe:2a00:100:7031::1]:99/"); |
| 852 TestCompletionCallback callback; | 857 TestCompletionCallback callback; |
| 853 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 858 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 854 EXPECT_EQ(OK, rv); | 859 EXPECT_EQ(OK, rv); |
| 855 EXPECT_TRUE(info.is_direct()); | 860 EXPECT_TRUE(info.is_direct()); |
| 856 } | 861 } |
| 857 { | 862 { |
| 858 GURL test_url("http://[3ffe:2a00:100:7031::1]/"); | 863 GURL test_url("http://[3ffe:2a00:100:7031::1]/"); |
| 859 TestCompletionCallback callback; | 864 TestCompletionCallback callback; |
| 860 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 865 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 861 EXPECT_EQ(OK, rv); | 866 EXPECT_EQ(OK, rv); |
| 862 EXPECT_TRUE(info.is_direct()); | 867 EXPECT_TRUE(info.is_direct()); |
| 863 } | 868 } |
| 864 } | 869 } |
| 865 } | 870 } |
| 866 | 871 |
| 867 TEST(ProxyServiceTest, PerProtocolProxyTests) { | 872 TEST(ProxyServiceTest, PerProtocolProxyTests) { |
| 868 ProxyConfig config; | 873 ProxyConfig config; |
| 869 config.proxy_rules.ParseFromString("http=foopy1:8080;https=foopy2:8080"); | 874 config.proxy_rules.ParseFromString("http=foopy1:8080;https=foopy2:8080"); |
| 870 config.auto_detect = false; | 875 config.auto_detect = false; |
| 871 { | 876 { |
| 872 scoped_refptr<ProxyService> service(new ProxyService( | 877 scoped_refptr<ProxyService> service(new ProxyService( |
| 873 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 878 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 874 GURL test_url("http://www.msn.com"); | 879 GURL test_url("http://www.msn.com"); |
| 875 ProxyInfo info; | 880 ProxyInfo info; |
| 876 TestCompletionCallback callback; | 881 TestCompletionCallback callback; |
| 877 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 882 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 878 EXPECT_EQ(OK, rv); | 883 EXPECT_EQ(OK, rv); |
| 879 EXPECT_FALSE(info.is_direct()); | 884 EXPECT_FALSE(info.is_direct()); |
| 880 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 885 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 881 } | 886 } |
| 882 { | 887 { |
| 883 scoped_refptr<ProxyService> service(new ProxyService( | 888 scoped_refptr<ProxyService> service(new ProxyService( |
| 884 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 889 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 885 GURL test_url("ftp://ftp.google.com"); | 890 GURL test_url("ftp://ftp.google.com"); |
| 886 ProxyInfo info; | 891 ProxyInfo info; |
| 887 TestCompletionCallback callback; | 892 TestCompletionCallback callback; |
| 888 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 893 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 889 EXPECT_EQ(OK, rv); | 894 EXPECT_EQ(OK, rv); |
| 890 EXPECT_TRUE(info.is_direct()); | 895 EXPECT_TRUE(info.is_direct()); |
| 891 EXPECT_EQ("direct://", info.proxy_server().ToURI()); | 896 EXPECT_EQ("direct://", info.proxy_server().ToURI()); |
| 892 } | 897 } |
| 893 { | 898 { |
| 894 scoped_refptr<ProxyService> service(new ProxyService( | 899 scoped_refptr<ProxyService> service(new ProxyService( |
| 895 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 900 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 896 GURL test_url("https://webbranch.techcu.com"); | 901 GURL test_url("https://webbranch.techcu.com"); |
| 897 ProxyInfo info; | 902 ProxyInfo info; |
| 898 TestCompletionCallback callback; | 903 TestCompletionCallback callback; |
| 899 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 904 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 900 EXPECT_EQ(OK, rv); | 905 EXPECT_EQ(OK, rv); |
| 901 EXPECT_FALSE(info.is_direct()); | 906 EXPECT_FALSE(info.is_direct()); |
| 902 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); | 907 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); |
| 903 } | 908 } |
| 904 { | 909 { |
| 905 config.proxy_rules.ParseFromString("foopy1:8080"); | 910 config.proxy_rules.ParseFromString("foopy1:8080"); |
| 906 scoped_refptr<ProxyService> service(new ProxyService( | 911 scoped_refptr<ProxyService> service(new ProxyService( |
| 907 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 912 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 908 GURL test_url("http://www.microsoft.com"); | 913 GURL test_url("http://www.microsoft.com"); |
| 909 ProxyInfo info; | 914 ProxyInfo info; |
| 910 TestCompletionCallback callback; | 915 TestCompletionCallback callback; |
| 911 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 916 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 912 EXPECT_EQ(OK, rv); | 917 EXPECT_EQ(OK, rv); |
| 913 EXPECT_FALSE(info.is_direct()); | 918 EXPECT_FALSE(info.is_direct()); |
| 914 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 919 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 915 } | 920 } |
| 916 } | 921 } |
| 917 | 922 |
| 918 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries | 923 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries |
| 919 // fall back to the SOCKS proxy. | 924 // fall back to the SOCKS proxy. |
| 920 TEST(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { | 925 TEST(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { |
| 921 ProxyConfig config; | 926 ProxyConfig config; |
| 922 config.proxy_rules.ParseFromString("http=foopy1:8080;socks=foopy2:1080"); | 927 config.proxy_rules.ParseFromString("http=foopy1:8080;socks=foopy2:1080"); |
| 923 config.auto_detect = false; | 928 config.auto_detect = false; |
| 924 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 929 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 925 config.proxy_rules.type); | 930 config.proxy_rules.type); |
| 926 | 931 |
| 927 { | 932 { |
| 928 scoped_refptr<ProxyService> service(new ProxyService( | 933 scoped_refptr<ProxyService> service(new ProxyService( |
| 929 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 934 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 930 GURL test_url("http://www.msn.com"); | 935 GURL test_url("http://www.msn.com"); |
| 931 ProxyInfo info; | 936 ProxyInfo info; |
| 932 TestCompletionCallback callback; | 937 TestCompletionCallback callback; |
| 933 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 938 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 934 EXPECT_EQ(OK, rv); | 939 EXPECT_EQ(OK, rv); |
| 935 EXPECT_FALSE(info.is_direct()); | 940 EXPECT_FALSE(info.is_direct()); |
| 936 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 941 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 937 } | 942 } |
| 938 { | 943 { |
| 939 scoped_refptr<ProxyService> service(new ProxyService( | 944 scoped_refptr<ProxyService> service(new ProxyService( |
| 940 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 945 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 941 GURL test_url("ftp://ftp.google.com"); | 946 GURL test_url("ftp://ftp.google.com"); |
| 942 ProxyInfo info; | 947 ProxyInfo info; |
| 943 TestCompletionCallback callback; | 948 TestCompletionCallback callback; |
| 944 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 949 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 945 EXPECT_EQ(OK, rv); | 950 EXPECT_EQ(OK, rv); |
| 946 EXPECT_FALSE(info.is_direct()); | 951 EXPECT_FALSE(info.is_direct()); |
| 947 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); | 952 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
| 948 } | 953 } |
| 949 { | 954 { |
| 950 scoped_refptr<ProxyService> service(new ProxyService( | 955 scoped_refptr<ProxyService> service(new ProxyService( |
| 951 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 956 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 952 GURL test_url("https://webbranch.techcu.com"); | 957 GURL test_url("https://webbranch.techcu.com"); |
| 953 ProxyInfo info; | 958 ProxyInfo info; |
| 954 TestCompletionCallback callback; | 959 TestCompletionCallback callback; |
| 955 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 960 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 956 EXPECT_EQ(OK, rv); | 961 EXPECT_EQ(OK, rv); |
| 957 EXPECT_FALSE(info.is_direct()); | 962 EXPECT_FALSE(info.is_direct()); |
| 958 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); | 963 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
| 959 } | 964 } |
| 960 { | 965 { |
| 961 scoped_refptr<ProxyService> service(new ProxyService( | 966 scoped_refptr<ProxyService> service(new ProxyService( |
| 962 new MockProxyConfigService(config), new MockAsyncProxyResolver)); | 967 new MockProxyConfigService(config), new MockAsyncProxyResolver, NULL)); |
| 963 GURL test_url("unknown://www.microsoft.com"); | 968 GURL test_url("unknown://www.microsoft.com"); |
| 964 ProxyInfo info; | 969 ProxyInfo info; |
| 965 TestCompletionCallback callback; | 970 TestCompletionCallback callback; |
| 966 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); | 971 int rv = service->ResolveProxy(test_url, &info, &callback, NULL, NULL); |
| 967 EXPECT_EQ(OK, rv); | 972 EXPECT_EQ(OK, rv); |
| 968 EXPECT_FALSE(info.is_direct()); | 973 EXPECT_FALSE(info.is_direct()); |
| 969 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); | 974 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
| 970 } | 975 } |
| 971 } | 976 } |
| 972 | 977 |
| 973 // Test cancellation of an in-progress request. | 978 // Test cancellation of an in-progress request. |
| 974 TEST(ProxyServiceTest, CancelInProgressRequest) { | 979 TEST(ProxyServiceTest, CancelInProgressRequest) { |
| 975 MockProxyConfigService* config_service = | 980 MockProxyConfigService* config_service = |
| 976 new MockProxyConfigService("http://foopy/proxy.pac"); | 981 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 977 | 982 |
| 978 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 983 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 979 | 984 |
| 980 scoped_refptr<ProxyService> service( | 985 scoped_refptr<ProxyService> service( |
| 981 new ProxyService(config_service, resolver)); | 986 new ProxyService(config_service, resolver, NULL)); |
| 982 | 987 |
| 983 // Start 3 requests. | 988 // Start 3 requests. |
| 984 | 989 |
| 985 ProxyInfo info1; | 990 ProxyInfo info1; |
| 986 TestCompletionCallback callback1; | 991 TestCompletionCallback callback1; |
| 987 int rv = service->ResolveProxy( | 992 int rv = service->ResolveProxy( |
| 988 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 993 GURL("http://request1"), &info1, &callback1, NULL, NULL); |
| 989 EXPECT_EQ(ERR_IO_PENDING, rv); | 994 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 990 | 995 |
| 991 // Nothing has been sent to the proxy resolver yet, since the proxy | 996 // Nothing has been sent to the proxy resolver yet, since the proxy |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1046 | 1051 |
| 1047 // Test the initial PAC download for resolver that expects bytes. | 1052 // Test the initial PAC download for resolver that expects bytes. |
| 1048 TEST(ProxyServiceTest, InitialPACScriptDownload) { | 1053 TEST(ProxyServiceTest, InitialPACScriptDownload) { |
| 1049 MockProxyConfigService* config_service = | 1054 MockProxyConfigService* config_service = |
| 1050 new MockProxyConfigService("http://foopy/proxy.pac"); | 1055 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1051 | 1056 |
| 1052 MockAsyncProxyResolverExpectsBytes* resolver = | 1057 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1053 new MockAsyncProxyResolverExpectsBytes; | 1058 new MockAsyncProxyResolverExpectsBytes; |
| 1054 | 1059 |
| 1055 scoped_refptr<ProxyService> service( | 1060 scoped_refptr<ProxyService> service( |
| 1056 new ProxyService(config_service, resolver)); | 1061 new ProxyService(config_service, resolver, NULL)); |
| 1057 | 1062 |
| 1058 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1063 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1059 service->SetProxyScriptFetcher(fetcher); | 1064 service->SetProxyScriptFetcher(fetcher); |
| 1060 | 1065 |
| 1061 // Start 3 requests. | 1066 // Start 3 requests. |
| 1062 | 1067 |
| 1063 ProxyInfo info1; | 1068 ProxyInfo info1; |
| 1064 TestCompletionCallback callback1; | 1069 TestCompletionCallback callback1; |
| 1065 int rv = service->ResolveProxy( | 1070 int rv = service->ResolveProxy( |
| 1066 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1071 GURL("http://request1"), &info1, &callback1, NULL, NULL); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1125 | 1130 |
| 1126 // Test changing the ProxyScriptFetcher while PAC download is in progress. | 1131 // Test changing the ProxyScriptFetcher while PAC download is in progress. |
| 1127 TEST(ProxyServiceTest, ChangeScriptFetcherWhilePACDownloadInProgress) { | 1132 TEST(ProxyServiceTest, ChangeScriptFetcherWhilePACDownloadInProgress) { |
| 1128 MockProxyConfigService* config_service = | 1133 MockProxyConfigService* config_service = |
| 1129 new MockProxyConfigService("http://foopy/proxy.pac"); | 1134 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1130 | 1135 |
| 1131 MockAsyncProxyResolverExpectsBytes* resolver = | 1136 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1132 new MockAsyncProxyResolverExpectsBytes; | 1137 new MockAsyncProxyResolverExpectsBytes; |
| 1133 | 1138 |
| 1134 scoped_refptr<ProxyService> service( | 1139 scoped_refptr<ProxyService> service( |
| 1135 new ProxyService(config_service, resolver)); | 1140 new ProxyService(config_service, resolver, NULL)); |
| 1136 | 1141 |
| 1137 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1142 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1138 service->SetProxyScriptFetcher(fetcher); | 1143 service->SetProxyScriptFetcher(fetcher); |
| 1139 | 1144 |
| 1140 // Start 2 requests. | 1145 // Start 2 requests. |
| 1141 | 1146 |
| 1142 ProxyInfo info1; | 1147 ProxyInfo info1; |
| 1143 TestCompletionCallback callback1; | 1148 TestCompletionCallback callback1; |
| 1144 int rv = service->ResolveProxy( | 1149 int rv = service->ResolveProxy( |
| 1145 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1150 GURL("http://request1"), &info1, &callback1, NULL, NULL); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1182 | 1187 |
| 1183 // Test cancellation of a request, while the PAC script is being fetched. | 1188 // Test cancellation of a request, while the PAC script is being fetched. |
| 1184 TEST(ProxyServiceTest, CancelWhilePACFetching) { | 1189 TEST(ProxyServiceTest, CancelWhilePACFetching) { |
| 1185 MockProxyConfigService* config_service = | 1190 MockProxyConfigService* config_service = |
| 1186 new MockProxyConfigService("http://foopy/proxy.pac"); | 1191 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1187 | 1192 |
| 1188 MockAsyncProxyResolverExpectsBytes* resolver = | 1193 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1189 new MockAsyncProxyResolverExpectsBytes; | 1194 new MockAsyncProxyResolverExpectsBytes; |
| 1190 | 1195 |
| 1191 scoped_refptr<ProxyService> service( | 1196 scoped_refptr<ProxyService> service( |
| 1192 new ProxyService(config_service, resolver)); | 1197 new ProxyService(config_service, resolver, NULL)); |
| 1193 | 1198 |
| 1194 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1199 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1195 service->SetProxyScriptFetcher(fetcher); | 1200 service->SetProxyScriptFetcher(fetcher); |
| 1196 | 1201 |
| 1197 // Start 3 requests. | 1202 // Start 3 requests. |
| 1198 ProxyInfo info1; | 1203 ProxyInfo info1; |
| 1199 TestCompletionCallback callback1; | 1204 TestCompletionCallback callback1; |
| 1200 ProxyService::PacRequest* request1; | 1205 ProxyService::PacRequest* request1; |
| 1201 scoped_refptr<LoadLog> log1(new LoadLog(LoadLog::kUnbounded)); | 1206 scoped_refptr<LoadLog> log1(new LoadLog(LoadLog::kUnbounded)); |
| 1202 int rv = service->ResolveProxy( | 1207 int rv = service->ResolveProxy( |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1267 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac) { | 1272 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac) { |
| 1268 ProxyConfig config; | 1273 ProxyConfig config; |
| 1269 config.auto_detect = true; | 1274 config.auto_detect = true; |
| 1270 config.pac_url = GURL("http://foopy/proxy.pac"); | 1275 config.pac_url = GURL("http://foopy/proxy.pac"); |
| 1271 config.proxy_rules.ParseFromString("http=foopy:80"); // Won't be used. | 1276 config.proxy_rules.ParseFromString("http=foopy:80"); // Won't be used. |
| 1272 | 1277 |
| 1273 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1278 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1274 MockAsyncProxyResolverExpectsBytes* resolver = | 1279 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1275 new MockAsyncProxyResolverExpectsBytes; | 1280 new MockAsyncProxyResolverExpectsBytes; |
| 1276 scoped_refptr<ProxyService> service( | 1281 scoped_refptr<ProxyService> service( |
| 1277 new ProxyService(config_service, resolver)); | 1282 new ProxyService(config_service, resolver, NULL)); |
| 1278 | 1283 |
| 1279 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1284 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1280 service->SetProxyScriptFetcher(fetcher); | 1285 service->SetProxyScriptFetcher(fetcher); |
| 1281 | 1286 |
| 1282 // Start 2 requests. | 1287 // Start 2 requests. |
| 1283 | 1288 |
| 1284 ProxyInfo info1; | 1289 ProxyInfo info1; |
| 1285 TestCompletionCallback callback1; | 1290 TestCompletionCallback callback1; |
| 1286 int rv = service->ResolveProxy( | 1291 int rv = service->ResolveProxy( |
| 1287 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1292 GURL("http://request1"), &info1, &callback1, NULL, NULL); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1338 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac2) { | 1343 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomPac2) { |
| 1339 ProxyConfig config; | 1344 ProxyConfig config; |
| 1340 config.auto_detect = true; | 1345 config.auto_detect = true; |
| 1341 config.pac_url = GURL("http://foopy/proxy.pac"); | 1346 config.pac_url = GURL("http://foopy/proxy.pac"); |
| 1342 config.proxy_rules.ParseFromString("http=foopy:80"); // Won't be used. | 1347 config.proxy_rules.ParseFromString("http=foopy:80"); // Won't be used. |
| 1343 | 1348 |
| 1344 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1349 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1345 MockAsyncProxyResolverExpectsBytes* resolver = | 1350 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1346 new MockAsyncProxyResolverExpectsBytes; | 1351 new MockAsyncProxyResolverExpectsBytes; |
| 1347 scoped_refptr<ProxyService> service( | 1352 scoped_refptr<ProxyService> service( |
| 1348 new ProxyService(config_service, resolver)); | 1353 new ProxyService(config_service, resolver, NULL)); |
| 1349 | 1354 |
| 1350 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1355 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1351 service->SetProxyScriptFetcher(fetcher); | 1356 service->SetProxyScriptFetcher(fetcher); |
| 1352 | 1357 |
| 1353 // Start 2 requests. | 1358 // Start 2 requests. |
| 1354 | 1359 |
| 1355 ProxyInfo info1; | 1360 ProxyInfo info1; |
| 1356 TestCompletionCallback callback1; | 1361 TestCompletionCallback callback1; |
| 1357 int rv = service->ResolveProxy( | 1362 int rv = service->ResolveProxy( |
| 1358 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1363 GURL("http://request1"), &info1, &callback1, NULL, NULL); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1414 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) { | 1419 TEST(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) { |
| 1415 ProxyConfig config; | 1420 ProxyConfig config; |
| 1416 config.auto_detect = true; | 1421 config.auto_detect = true; |
| 1417 config.pac_url = GURL("http://foopy/proxy.pac"); | 1422 config.pac_url = GURL("http://foopy/proxy.pac"); |
| 1418 config.proxy_rules.ParseFromString("http=foopy:80"); | 1423 config.proxy_rules.ParseFromString("http=foopy:80"); |
| 1419 | 1424 |
| 1420 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1425 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1421 MockAsyncProxyResolverExpectsBytes* resolver = | 1426 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1422 new MockAsyncProxyResolverExpectsBytes; | 1427 new MockAsyncProxyResolverExpectsBytes; |
| 1423 scoped_refptr<ProxyService> service( | 1428 scoped_refptr<ProxyService> service( |
| 1424 new ProxyService(config_service, resolver)); | 1429 new ProxyService(config_service, resolver, NULL)); |
| 1425 | 1430 |
| 1426 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1431 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1427 service->SetProxyScriptFetcher(fetcher); | 1432 service->SetProxyScriptFetcher(fetcher); |
| 1428 | 1433 |
| 1429 // Start 2 requests. | 1434 // Start 2 requests. |
| 1430 | 1435 |
| 1431 ProxyInfo info1; | 1436 ProxyInfo info1; |
| 1432 TestCompletionCallback callback1; | 1437 TestCompletionCallback callback1; |
| 1433 int rv = service->ResolveProxy( | 1438 int rv = service->ResolveProxy( |
| 1434 GURL("http://request1"), &info1, &callback1, NULL, NULL); | 1439 GURL("http://request1"), &info1, &callback1, NULL, NULL); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1472 ProxyConfig config; | 1477 ProxyConfig config; |
| 1473 config.auto_detect = true; | 1478 config.auto_detect = true; |
| 1474 config.pac_url = GURL("http://foopy/proxy.pac"); | 1479 config.pac_url = GURL("http://foopy/proxy.pac"); |
| 1475 config.proxy_rules.ParseFromString("http=foopy:80"); // Not used. | 1480 config.proxy_rules.ParseFromString("http=foopy:80"); // Not used. |
| 1476 config.proxy_bypass.push_back("www.google.com"); | 1481 config.proxy_bypass.push_back("www.google.com"); |
| 1477 | 1482 |
| 1478 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1483 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1479 MockAsyncProxyResolverExpectsBytes* resolver = | 1484 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1480 new MockAsyncProxyResolverExpectsBytes; | 1485 new MockAsyncProxyResolverExpectsBytes; |
| 1481 scoped_refptr<ProxyService> service( | 1486 scoped_refptr<ProxyService> service( |
| 1482 new ProxyService(config_service, resolver)); | 1487 new ProxyService(config_service, resolver, NULL)); |
| 1483 | 1488 |
| 1484 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1489 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1485 service->SetProxyScriptFetcher(fetcher); | 1490 service->SetProxyScriptFetcher(fetcher); |
| 1486 | 1491 |
| 1487 // Start 1 requests. | 1492 // Start 1 requests. |
| 1488 | 1493 |
| 1489 ProxyInfo info1; | 1494 ProxyInfo info1; |
| 1490 TestCompletionCallback callback1; | 1495 TestCompletionCallback callback1; |
| 1491 int rv = service->ResolveProxy( | 1496 int rv = service->ResolveProxy( |
| 1492 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); | 1497 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1540 // have any memory errors (used to be that the ProxyScriptFetcher was | 1545 // have any memory errors (used to be that the ProxyScriptFetcher was |
| 1541 // being deleted prior to the InitProxyResolver). | 1546 // being deleted prior to the InitProxyResolver). |
| 1542 TEST(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { | 1547 TEST(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { |
| 1543 ProxyConfig config; | 1548 ProxyConfig config; |
| 1544 config.pac_url = GURL("http://foopy/proxy.pac"); | 1549 config.pac_url = GURL("http://foopy/proxy.pac"); |
| 1545 | 1550 |
| 1546 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1551 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1547 MockAsyncProxyResolverExpectsBytes* resolver = | 1552 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1548 new MockAsyncProxyResolverExpectsBytes; | 1553 new MockAsyncProxyResolverExpectsBytes; |
| 1549 scoped_refptr<ProxyService> service( | 1554 scoped_refptr<ProxyService> service( |
| 1550 new ProxyService(config_service, resolver)); | 1555 new ProxyService(config_service, resolver, NULL)); |
| 1551 | 1556 |
| 1552 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1557 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1553 service->SetProxyScriptFetcher(fetcher); | 1558 service->SetProxyScriptFetcher(fetcher); |
| 1554 | 1559 |
| 1555 // Start 1 request. | 1560 // Start 1 request. |
| 1556 | 1561 |
| 1557 ProxyInfo info1; | 1562 ProxyInfo info1; |
| 1558 TestCompletionCallback callback1; | 1563 TestCompletionCallback callback1; |
| 1559 int rv = service->ResolveProxy( | 1564 int rv = service->ResolveProxy( |
| 1560 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); | 1565 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1576 // request to the proxy resolver. When run under valgrind, should not | 1581 // request to the proxy resolver. When run under valgrind, should not |
| 1577 // have any memory errors (used to be that the ProxyResolver was | 1582 // have any memory errors (used to be that the ProxyResolver was |
| 1578 // being deleted prior to the InitProxyResolver). | 1583 // being deleted prior to the InitProxyResolver). |
| 1579 TEST(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingSet) { | 1584 TEST(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingSet) { |
| 1580 MockProxyConfigService* config_service = | 1585 MockProxyConfigService* config_service = |
| 1581 new MockProxyConfigService("http://foopy/proxy.pac"); | 1586 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1582 | 1587 |
| 1583 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 1588 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 1584 | 1589 |
| 1585 scoped_refptr<ProxyService> service( | 1590 scoped_refptr<ProxyService> service( |
| 1586 new ProxyService(config_service, resolver)); | 1591 new ProxyService(config_service, resolver, NULL)); |
| 1587 | 1592 |
| 1588 GURL url("http://www.google.com/"); | 1593 GURL url("http://www.google.com/"); |
| 1589 | 1594 |
| 1590 ProxyInfo info; | 1595 ProxyInfo info; |
| 1591 TestCompletionCallback callback; | 1596 TestCompletionCallback callback; |
| 1592 int rv = service->ResolveProxy(url, &info, &callback, NULL, NULL); | 1597 int rv = service->ResolveProxy(url, &info, &callback, NULL, NULL); |
| 1593 EXPECT_EQ(ERR_IO_PENDING, rv); | 1598 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1594 | 1599 |
| 1595 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1600 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1596 resolver->pending_set_pac_script_request()->pac_url()); | 1601 resolver->pending_set_pac_script_request()->pac_url()); |
| 1597 | 1602 |
| 1598 // Delete the ProxyService. | 1603 // Delete the ProxyService. |
| 1599 service = NULL; | 1604 service = NULL; |
| 1600 } | 1605 } |
| 1601 | 1606 |
| 1602 TEST(ProxyServiceTest, ResetProxyConfigService) { | 1607 TEST(ProxyServiceTest, ResetProxyConfigService) { |
| 1603 ProxyConfig config1; | 1608 ProxyConfig config1; |
| 1604 config1.proxy_rules.ParseFromString("foopy1:8080"); | 1609 config1.proxy_rules.ParseFromString("foopy1:8080"); |
| 1605 config1.auto_detect = false; | 1610 config1.auto_detect = false; |
| 1606 scoped_refptr<ProxyService> service(new ProxyService( | 1611 scoped_refptr<ProxyService> service(new ProxyService( |
| 1607 new MockProxyConfigService(config1), new MockAsyncProxyResolverExpectsByte
s)); | 1612 new MockProxyConfigService(config1), |
| 1613 new MockAsyncProxyResolverExpectsBytes, |
| 1614 NULL)); |
| 1608 | 1615 |
| 1609 ProxyInfo info; | 1616 ProxyInfo info; |
| 1610 TestCompletionCallback callback1; | 1617 TestCompletionCallback callback1; |
| 1611 int rv = service->ResolveProxy( | 1618 int rv = service->ResolveProxy( |
| 1612 GURL("http://request1"), &info, &callback1, NULL, NULL); | 1619 GURL("http://request1"), &info, &callback1, NULL, NULL); |
| 1613 EXPECT_EQ(OK, rv); | 1620 EXPECT_EQ(OK, rv); |
| 1614 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1621 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1615 | 1622 |
| 1616 ProxyConfig config2; | 1623 ProxyConfig config2; |
| 1617 config2.proxy_rules.ParseFromString("foopy2:8080"); | 1624 config2.proxy_rules.ParseFromString("foopy2:8080"); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1670 // Regression test for http://crbug.com/18526 -- the configuration was being | 1677 // Regression test for http://crbug.com/18526 -- the configuration was being |
| 1671 // mutated to cancel out the automatic settings, which meant UpdateConfig() | 1678 // mutated to cancel out the automatic settings, which meant UpdateConfig() |
| 1672 // thought it had received a new configuration. | 1679 // thought it had received a new configuration. |
| 1673 TEST(ProxyServiceTest, UpdateConfigAfterFailedAutodetect) { | 1680 TEST(ProxyServiceTest, UpdateConfigAfterFailedAutodetect) { |
| 1674 ProxyConfig config; | 1681 ProxyConfig config; |
| 1675 config.auto_detect = true; | 1682 config.auto_detect = true; |
| 1676 | 1683 |
| 1677 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1684 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1678 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 1685 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 1679 scoped_refptr<ProxyService> service( | 1686 scoped_refptr<ProxyService> service( |
| 1680 new ProxyService(config_service, resolver)); | 1687 new ProxyService(config_service, resolver, NULL)); |
| 1681 | 1688 |
| 1682 // Start 1 requests. | 1689 // Start 1 requests. |
| 1683 | 1690 |
| 1684 ProxyInfo info1; | 1691 ProxyInfo info1; |
| 1685 TestCompletionCallback callback1; | 1692 TestCompletionCallback callback1; |
| 1686 int rv = service->ResolveProxy( | 1693 int rv = service->ResolveProxy( |
| 1687 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); | 1694 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); |
| 1688 EXPECT_EQ(ERR_IO_PENDING, rv); | 1695 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1689 | 1696 |
| 1690 // Check that nothing has been sent to the proxy resolver yet. | 1697 // Check that nothing has been sent to the proxy resolver yet. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1716 | 1723 |
| 1717 // Test that when going from a configuration that required PAC to one | 1724 // Test that when going from a configuration that required PAC to one |
| 1718 // that does NOT, we unset the variable |should_use_proxy_resolver_|. | 1725 // that does NOT, we unset the variable |should_use_proxy_resolver_|. |
| 1719 TEST(ProxyServiceTest, UpdateConfigFromPACToDirect) { | 1726 TEST(ProxyServiceTest, UpdateConfigFromPACToDirect) { |
| 1720 ProxyConfig config; | 1727 ProxyConfig config; |
| 1721 config.auto_detect = true; | 1728 config.auto_detect = true; |
| 1722 | 1729 |
| 1723 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1730 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1724 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; | 1731 MockAsyncProxyResolver* resolver = new MockAsyncProxyResolver; |
| 1725 scoped_refptr<ProxyService> service( | 1732 scoped_refptr<ProxyService> service( |
| 1726 new ProxyService(config_service, resolver)); | 1733 new ProxyService(config_service, resolver, NULL)); |
| 1727 | 1734 |
| 1728 // Start 1 request. | 1735 // Start 1 request. |
| 1729 | 1736 |
| 1730 ProxyInfo info1; | 1737 ProxyInfo info1; |
| 1731 TestCompletionCallback callback1; | 1738 TestCompletionCallback callback1; |
| 1732 int rv = service->ResolveProxy( | 1739 int rv = service->ResolveProxy( |
| 1733 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); | 1740 GURL("http://www.google.com"), &info1, &callback1, NULL, NULL); |
| 1734 EXPECT_EQ(ERR_IO_PENDING, rv); | 1741 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1735 | 1742 |
| 1736 // Check that nothing has been sent to the proxy resolver yet. | 1743 // Check that nothing has been sent to the proxy resolver yet. |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1761 // Start another request -- the effective configuration has changed. | 1768 // Start another request -- the effective configuration has changed. |
| 1762 ProxyInfo info2; | 1769 ProxyInfo info2; |
| 1763 TestCompletionCallback callback2; | 1770 TestCompletionCallback callback2; |
| 1764 rv = service->ResolveProxy( | 1771 rv = service->ResolveProxy( |
| 1765 GURL("http://www.google.com"), &info2, &callback2, NULL, NULL); | 1772 GURL("http://www.google.com"), &info2, &callback2, NULL, NULL); |
| 1766 EXPECT_EQ(OK, rv); | 1773 EXPECT_EQ(OK, rv); |
| 1767 | 1774 |
| 1768 EXPECT_TRUE(info2.is_direct()); | 1775 EXPECT_TRUE(info2.is_direct()); |
| 1769 } | 1776 } |
| 1770 | 1777 |
| 1778 TEST(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { |
| 1779 MockProxyConfigService* config_service = |
| 1780 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1781 |
| 1782 MockAsyncProxyResolverExpectsBytes* resolver = |
| 1783 new MockAsyncProxyResolverExpectsBytes; |
| 1784 |
| 1785 scoped_refptr<MockNetworkChangeNotifier> network_change_notifier( |
| 1786 new MockNetworkChangeNotifier()); |
| 1787 |
| 1788 scoped_refptr<ProxyService> service( |
| 1789 new ProxyService(config_service, resolver, network_change_notifier)); |
| 1790 |
| 1791 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1792 service->SetProxyScriptFetcher(fetcher); |
| 1793 |
| 1794 // Start 1 request. |
| 1795 |
| 1796 ProxyInfo info1; |
| 1797 TestCompletionCallback callback1; |
| 1798 int rv = service->ResolveProxy( |
| 1799 GURL("http://request1"), &info1, &callback1, NULL, NULL); |
| 1800 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1801 |
| 1802 // The first request should have triggered initial download of PAC script. |
| 1803 EXPECT_TRUE(fetcher->has_pending_request()); |
| 1804 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 1805 |
| 1806 // Nothing has been sent to the resolver yet. |
| 1807 EXPECT_TRUE(resolver->pending_requests().empty()); |
| 1808 |
| 1809 // At this point the ProxyService should be waiting for the |
| 1810 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| 1811 // PAC script download completion. |
| 1812 fetcher->NotifyFetchCompletion(OK, "pac-v1"); |
| 1813 |
| 1814 // Now that the PAC script is downloaded, the request will have been sent to |
| 1815 // the proxy resolver. |
| 1816 EXPECT_EQ("pac-v1", resolver->pending_set_pac_script_request()->pac_bytes()); |
| 1817 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 1818 |
| 1819 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 1820 EXPECT_EQ(GURL("http://request1"), resolver->pending_requests()[0]->url()); |
| 1821 |
| 1822 // Complete the pending request. |
| 1823 resolver->pending_requests()[0]->results()->UseNamedProxy("request1:80"); |
| 1824 resolver->pending_requests()[0]->CompleteNow(OK); |
| 1825 |
| 1826 // Wait for completion callback, and verify that the request ran as expected. |
| 1827 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1828 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); |
| 1829 |
| 1830 // Now simluate a change in the network. The ProxyConfigService is still |
| 1831 // going to return the same PAC URL as before, but this URL needs to be |
| 1832 // refetched on the new network. |
| 1833 |
| 1834 network_change_notifier->NotifyIPAddressChange(); |
| 1835 |
| 1836 // Start a second request. |
| 1837 ProxyInfo info2; |
| 1838 TestCompletionCallback callback2; |
| 1839 rv = service->ResolveProxy( |
| 1840 GURL("http://request2"), &info2, &callback2, NULL, NULL); |
| 1841 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1842 |
| 1843 // This second request should have triggered the re-download of the PAC |
| 1844 // script (since we marked the network as having changed). |
| 1845 EXPECT_TRUE(fetcher->has_pending_request()); |
| 1846 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 1847 |
| 1848 // Nothing has been sent to the resolver yet. |
| 1849 EXPECT_TRUE(resolver->pending_requests().empty()); |
| 1850 |
| 1851 // Simulate the PAC script fetch as having completed (this time with |
| 1852 // different data). |
| 1853 fetcher->NotifyFetchCompletion(OK, "pac-v2"); |
| 1854 |
| 1855 // Now that the PAC script is downloaded, the second request will have been |
| 1856 // sent to the proxy resolver. |
| 1857 EXPECT_EQ("pac-v2", resolver->pending_set_pac_script_request()->pac_bytes()); |
| 1858 resolver->pending_set_pac_script_request()->CompleteNow(OK); |
| 1859 |
| 1860 ASSERT_EQ(1u, resolver->pending_requests().size()); |
| 1861 EXPECT_EQ(GURL("http://request2"), resolver->pending_requests()[0]->url()); |
| 1862 |
| 1863 // Complete the pending second request. |
| 1864 resolver->pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| 1865 resolver->pending_requests()[0]->CompleteNow(OK); |
| 1866 |
| 1867 // Wait for completion callback, and verify that the request ran as expected. |
| 1868 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 1869 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); |
| 1870 } |
| 1871 |
| 1771 } // namespace net | 1872 } // namespace net |
| OLD | NEW |