Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 <cstdarg> | 7 #include <cstdarg> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/format_macros.h" | 10 #include "base/format_macros.h" |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 166 public: | 166 public: |
| 167 TestResolveProxyDelegate() | 167 TestResolveProxyDelegate() |
| 168 : on_resolve_proxy_called_(false), | 168 : on_resolve_proxy_called_(false), |
| 169 add_proxy_(false), | 169 add_proxy_(false), |
| 170 remove_proxy_(false), | 170 remove_proxy_(false), |
| 171 proxy_service_(nullptr) {} | 171 proxy_service_(nullptr) {} |
| 172 | 172 |
| 173 void OnResolveProxy(const GURL& url, | 173 void OnResolveProxy(const GURL& url, |
| 174 int load_flags, | 174 int load_flags, |
| 175 const ProxyService& proxy_service, | 175 const ProxyService& proxy_service, |
| 176 const std::string& method, | |
|
bengr
2016/02/16 20:00:14
Move the method to just after the url.
RyanSturm
2016/02/17 21:46:12
Done.
| |
| 176 ProxyInfo* result) override { | 177 ProxyInfo* result) override { |
| 177 on_resolve_proxy_called_ = true; | 178 on_resolve_proxy_called_ = true; |
| 178 proxy_service_ = &proxy_service; | 179 proxy_service_ = &proxy_service; |
| 179 DCHECK(!add_proxy_ || !remove_proxy_); | 180 DCHECK(!add_proxy_ || !remove_proxy_); |
| 180 if (add_proxy_) { | 181 if (add_proxy_) { |
| 181 result->UseNamedProxy("delegate_proxy.com"); | 182 result->UseNamedProxy("delegate_proxy.com"); |
| 182 } else if (remove_proxy_) { | 183 } else if (remove_proxy_) { |
| 183 result->UseDirect(); | 184 result->UseDirect(); |
| 184 } | 185 } |
| 185 } | 186 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 226 | 227 |
| 227 // A test network delegate that exercises the OnProxyFallback callback. | 228 // A test network delegate that exercises the OnProxyFallback callback. |
| 228 class TestProxyFallbackProxyDelegate : public ProxyDelegate { | 229 class TestProxyFallbackProxyDelegate : public ProxyDelegate { |
| 229 public: | 230 public: |
| 230 TestProxyFallbackProxyDelegate() | 231 TestProxyFallbackProxyDelegate() |
| 231 : on_proxy_fallback_called_(false), proxy_fallback_net_error_(OK) {} | 232 : on_proxy_fallback_called_(false), proxy_fallback_net_error_(OK) {} |
| 232 // ProxyDelegate implementation: | 233 // ProxyDelegate implementation: |
| 233 void OnResolveProxy(const GURL& url, | 234 void OnResolveProxy(const GURL& url, |
| 234 int load_flags, | 235 int load_flags, |
| 235 const ProxyService& proxy_service, | 236 const ProxyService& proxy_service, |
| 237 const std::string& method, | |
|
bengr
2016/02/16 20:00:14
Move the method to just after the url.
RyanSturm
2016/02/17 21:46:12
Done.
| |
| 236 ProxyInfo* result) override {} | 238 ProxyInfo* result) override {} |
| 237 void OnTunnelConnectCompleted(const HostPortPair& endpoint, | 239 void OnTunnelConnectCompleted(const HostPortPair& endpoint, |
| 238 const HostPortPair& proxy_server, | 240 const HostPortPair& proxy_server, |
| 239 int net_error) override {} | 241 int net_error) override {} |
| 240 void OnFallback(const ProxyServer& bad_proxy, int net_error) override { | 242 void OnFallback(const ProxyServer& bad_proxy, int net_error) override { |
| 241 proxy_server_ = bad_proxy; | 243 proxy_server_ = bad_proxy; |
| 242 proxy_fallback_net_error_ = net_error; | 244 proxy_fallback_net_error_ = net_error; |
| 243 on_proxy_fallback_called_ = true; | 245 on_proxy_fallback_called_ = true; |
| 244 } | 246 } |
| 245 void OnBeforeSendHeaders(URLRequest* request, | 247 void OnBeforeSendHeaders(URLRequest* request, |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 339 return GetRequestsForURLs(resolver.cancelled_requests(), urls); | 341 return GetRequestsForURLs(resolver.cancelled_requests(), urls); |
| 340 } | 342 } |
| 341 | 343 |
| 342 } // namespace | 344 } // namespace |
| 343 | 345 |
| 344 TEST_F(ProxyServiceTest, Direct) { | 346 TEST_F(ProxyServiceTest, Direct) { |
| 345 MockAsyncProxyResolverFactory* factory = | 347 MockAsyncProxyResolverFactory* factory = |
| 346 new MockAsyncProxyResolverFactory(false); | 348 new MockAsyncProxyResolverFactory(false); |
| 347 ProxyService service( | 349 ProxyService service( |
| 348 make_scoped_ptr(new MockProxyConfigService(ProxyConfig::CreateDirect())), | 350 make_scoped_ptr(new MockProxyConfigService(ProxyConfig::CreateDirect())), |
| 349 make_scoped_ptr(factory), NULL); | 351 make_scoped_ptr(factory), nullptr); |
| 350 | 352 |
| 351 GURL url("http://www.google.com/"); | 353 GURL url("http://www.google.com/"); |
| 352 | 354 |
| 353 ProxyInfo info; | 355 ProxyInfo info; |
| 354 TestCompletionCallback callback; | 356 TestCompletionCallback callback; |
| 355 BoundTestNetLog log; | 357 BoundTestNetLog log; |
| 356 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), | 358 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| 357 NULL, NULL, log.bound()); | 359 nullptr, nullptr, "", log.bound()); |
|
bengr
2016/02/16 20:00:14
Use std::string() here and below.
RyanSturm
2016/02/17 21:46:12
Done.
| |
| 358 EXPECT_EQ(OK, rv); | 360 EXPECT_EQ(OK, rv); |
| 359 EXPECT_TRUE(factory->pending_requests().empty()); | 361 EXPECT_TRUE(factory->pending_requests().empty()); |
| 360 | 362 |
| 361 EXPECT_TRUE(info.is_direct()); | 363 EXPECT_TRUE(info.is_direct()); |
| 362 EXPECT_TRUE(info.proxy_resolve_start_time().is_null()); | 364 EXPECT_TRUE(info.proxy_resolve_start_time().is_null()); |
| 363 EXPECT_TRUE(info.proxy_resolve_end_time().is_null()); | 365 EXPECT_TRUE(info.proxy_resolve_end_time().is_null()); |
| 364 | 366 |
| 365 // Check the NetLog was filled correctly. | 367 // Check the NetLog was filled correctly. |
| 366 TestNetLogEntry::List entries; | 368 TestNetLogEntry::List entries; |
| 367 log.GetEntries(&entries); | 369 log.GetEntries(&entries); |
| 368 | 370 |
| 369 EXPECT_EQ(3u, entries.size()); | 371 EXPECT_EQ(3u, entries.size()); |
| 370 EXPECT_TRUE(LogContainsBeginEvent( | 372 EXPECT_TRUE(LogContainsBeginEvent( |
| 371 entries, 0, NetLog::TYPE_PROXY_SERVICE)); | 373 entries, 0, NetLog::TYPE_PROXY_SERVICE)); |
| 372 EXPECT_TRUE(LogContainsEvent( | 374 EXPECT_TRUE(LogContainsEvent( |
| 373 entries, 1, NetLog::TYPE_PROXY_SERVICE_RESOLVED_PROXY_LIST, | 375 entries, 1, NetLog::TYPE_PROXY_SERVICE_RESOLVED_PROXY_LIST, |
| 374 NetLog::PHASE_NONE)); | 376 NetLog::PHASE_NONE)); |
| 375 EXPECT_TRUE(LogContainsEndEvent( | 377 EXPECT_TRUE(LogContainsEndEvent( |
| 376 entries, 2, NetLog::TYPE_PROXY_SERVICE)); | 378 entries, 2, NetLog::TYPE_PROXY_SERVICE)); |
| 377 } | 379 } |
| 378 | 380 |
| 379 TEST_F(ProxyServiceTest, OnResolveProxyCallbackAddProxy) { | 381 TEST_F(ProxyServiceTest, OnResolveProxyCallbackAddProxy) { |
| 380 ProxyConfig config; | 382 ProxyConfig config; |
| 381 config.proxy_rules().ParseFromString("foopy1:8080"); | 383 config.proxy_rules().ParseFromString("foopy1:8080"); |
| 382 config.set_auto_detect(false); | 384 config.set_auto_detect(false); |
| 383 config.proxy_rules().bypass_rules.ParseFromString("*.org"); | 385 config.proxy_rules().bypass_rules.ParseFromString("*.org"); |
| 384 | 386 |
| 385 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 387 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 386 nullptr, NULL); | 388 nullptr, nullptr); |
| 387 | 389 |
| 388 GURL url("http://www.google.com/"); | 390 GURL url("http://www.google.com/"); |
| 389 GURL bypass_url("http://internet.org"); | 391 GURL bypass_url("http://internet.org"); |
| 390 | 392 |
| 391 ProxyInfo info; | 393 ProxyInfo info; |
| 392 TestCompletionCallback callback; | 394 TestCompletionCallback callback; |
| 393 BoundTestNetLog log; | 395 BoundTestNetLog log; |
| 394 | 396 |
| 395 // First, warm up the ProxyService. | 397 // First, warm up the ProxyService. |
| 396 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), | 398 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| 397 NULL, NULL, log.bound()); | 399 nullptr, nullptr, "", log.bound()); |
| 398 EXPECT_EQ(OK, rv); | 400 EXPECT_EQ(OK, rv); |
| 399 | 401 |
| 400 // Verify that network delegate is invoked. | 402 // Verify that network delegate is invoked. |
| 401 TestResolveProxyDelegate delegate; | 403 TestResolveProxyDelegate delegate; |
| 402 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL, | 404 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| 403 &delegate, log.bound()); | 405 nullptr, &delegate, "GET", log.bound()); |
| 404 EXPECT_TRUE(delegate.on_resolve_proxy_called()); | 406 EXPECT_TRUE(delegate.on_resolve_proxy_called()); |
| 405 EXPECT_EQ(&service, delegate.proxy_service()); | 407 EXPECT_EQ(&service, delegate.proxy_service()); |
| 406 | 408 |
| 407 // Verify that the ProxyDelegate's behavior is stateless across | 409 // Verify that the ProxyDelegate's behavior is stateless across |
| 408 // invocations of ResolveProxy. Start by having the callback add a proxy | 410 // invocations of ResolveProxy. Start by having the callback add a proxy |
| 409 // and checking that subsequent requests are not affected. | 411 // and checking that subsequent requests are not affected. |
| 410 delegate.set_add_proxy(true); | 412 delegate.set_add_proxy(true); |
| 411 | 413 |
| 412 // Callback should interpose: | 414 // Callback should interpose: |
| 413 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL, | 415 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| 414 &delegate, log.bound()); | 416 nullptr, &delegate, "GET", log.bound()); |
| 415 EXPECT_FALSE(info.is_direct()); | 417 EXPECT_FALSE(info.is_direct()); |
| 416 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "delegate_proxy.com"); | 418 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "delegate_proxy.com"); |
| 417 delegate.set_add_proxy(false); | 419 delegate.set_add_proxy(false); |
| 418 | 420 |
| 419 // Check non-bypassed URL: | 421 // Check non-bypassed URL: |
| 420 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL, | 422 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| 421 &delegate, log.bound()); | 423 nullptr, &delegate, "GET", log.bound()); |
| 422 EXPECT_FALSE(info.is_direct()); | 424 EXPECT_FALSE(info.is_direct()); |
| 423 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "foopy1"); | 425 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "foopy1"); |
| 424 | 426 |
| 425 // Check bypassed URL: | 427 // Check bypassed URL: |
| 426 rv = service.ResolveProxy(bypass_url, LOAD_NORMAL, &info, callback.callback(), | 428 rv = service.ResolveProxy(bypass_url, LOAD_NORMAL, &info, callback.callback(), |
| 427 NULL, &delegate, log.bound()); | 429 nullptr, &delegate, "GET", log.bound()); |
| 428 EXPECT_TRUE(info.is_direct()); | 430 EXPECT_TRUE(info.is_direct()); |
| 429 } | 431 } |
| 430 | 432 |
| 431 TEST_F(ProxyServiceTest, OnResolveProxyCallbackRemoveProxy) { | 433 TEST_F(ProxyServiceTest, OnResolveProxyCallbackRemoveProxy) { |
| 432 // Same as OnResolveProxyCallbackAddProxy, but verify that the | 434 // Same as OnResolveProxyCallbackAddProxy, but verify that the |
| 433 // ProxyDelegate's behavior is stateless across invocations after it | 435 // ProxyDelegate's behavior is stateless across invocations after it |
| 434 // *removes* a proxy. | 436 // *removes* a proxy. |
| 435 ProxyConfig config; | 437 ProxyConfig config; |
| 436 config.proxy_rules().ParseFromString("foopy1:8080"); | 438 config.proxy_rules().ParseFromString("foopy1:8080"); |
| 437 config.set_auto_detect(false); | 439 config.set_auto_detect(false); |
| 438 config.proxy_rules().bypass_rules.ParseFromString("*.org"); | 440 config.proxy_rules().bypass_rules.ParseFromString("*.org"); |
| 439 | 441 |
| 440 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 442 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 441 nullptr, NULL); | 443 nullptr, nullptr); |
| 442 | 444 |
| 443 GURL url("http://www.google.com/"); | 445 GURL url("http://www.google.com/"); |
| 444 GURL bypass_url("http://internet.org"); | 446 GURL bypass_url("http://internet.org"); |
| 445 | 447 |
| 446 ProxyInfo info; | 448 ProxyInfo info; |
| 447 TestCompletionCallback callback; | 449 TestCompletionCallback callback; |
| 448 BoundTestNetLog log; | 450 BoundTestNetLog log; |
| 449 | 451 |
| 450 // First, warm up the ProxyService. | 452 // First, warm up the ProxyService. |
| 451 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), | 453 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| 452 NULL, NULL, log.bound()); | 454 nullptr, nullptr, "", log.bound()); |
| 453 EXPECT_EQ(OK, rv); | 455 EXPECT_EQ(OK, rv); |
| 454 | 456 |
| 455 TestResolveProxyDelegate delegate; | 457 TestResolveProxyDelegate delegate; |
| 456 delegate.set_remove_proxy(true); | 458 delegate.set_remove_proxy(true); |
| 457 | 459 |
| 458 // Callback should interpose: | 460 // Callback should interpose: |
| 459 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL, | 461 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| 460 &delegate, log.bound()); | 462 nullptr, &delegate, "GET", log.bound()); |
| 461 EXPECT_TRUE(info.is_direct()); | 463 EXPECT_TRUE(info.is_direct()); |
| 462 delegate.set_remove_proxy(false); | 464 delegate.set_remove_proxy(false); |
| 463 | 465 |
| 464 // Check non-bypassed URL: | 466 // Check non-bypassed URL: |
| 465 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL, | 467 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| 466 &delegate, log.bound()); | 468 nullptr, &delegate, "GET", log.bound()); |
| 467 EXPECT_FALSE(info.is_direct()); | 469 EXPECT_FALSE(info.is_direct()); |
| 468 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "foopy1"); | 470 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "foopy1"); |
| 469 | 471 |
| 470 // Check bypassed URL: | 472 // Check bypassed URL: |
| 471 rv = service.ResolveProxy(bypass_url, LOAD_NORMAL, &info, callback.callback(), | 473 rv = service.ResolveProxy(bypass_url, LOAD_NORMAL, &info, callback.callback(), |
| 472 NULL, &delegate, log.bound()); | 474 nullptr, &delegate, "GET", log.bound()); |
| 473 EXPECT_TRUE(info.is_direct()); | 475 EXPECT_TRUE(info.is_direct()); |
| 474 } | 476 } |
| 475 | 477 |
| 476 TEST_F(ProxyServiceTest, PAC) { | 478 TEST_F(ProxyServiceTest, PAC) { |
| 477 MockProxyConfigService* config_service = | 479 MockProxyConfigService* config_service = |
| 478 new MockProxyConfigService("http://foopy/proxy.pac"); | 480 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 479 | 481 |
| 480 MockAsyncProxyResolver resolver; | 482 MockAsyncProxyResolver resolver; |
| 481 MockAsyncProxyResolverFactory* factory = | 483 MockAsyncProxyResolverFactory* factory = |
| 482 new MockAsyncProxyResolverFactory(false); | 484 new MockAsyncProxyResolverFactory(false); |
| 483 | 485 |
| 484 ProxyService service(make_scoped_ptr(config_service), | 486 ProxyService service(make_scoped_ptr(config_service), |
| 485 make_scoped_ptr(factory), NULL); | 487 make_scoped_ptr(factory), nullptr); |
| 486 | 488 |
| 487 GURL url("http://www.google.com/"); | 489 GURL url("http://www.google.com/"); |
| 488 | 490 |
| 489 ProxyInfo info; | 491 ProxyInfo info; |
| 490 TestCompletionCallback callback; | 492 TestCompletionCallback callback; |
| 491 ProxyService::PacRequest* request; | 493 ProxyService::PacRequest* request; |
| 492 BoundTestNetLog log; | 494 BoundTestNetLog log; |
| 493 | 495 |
| 494 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), | 496 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| 495 &request, NULL, log.bound()); | 497 &request, nullptr, "", log.bound()); |
| 496 EXPECT_EQ(ERR_IO_PENDING, rv); | 498 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 497 | 499 |
| 498 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request)); | 500 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request)); |
| 499 | 501 |
| 500 ASSERT_EQ(1u, factory->pending_requests().size()); | 502 ASSERT_EQ(1u, factory->pending_requests().size()); |
| 501 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 503 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 502 factory->pending_requests()[0]->script_data()->url()); | 504 factory->pending_requests()[0]->script_data()->url()); |
| 503 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 505 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 504 | 506 |
| 505 ASSERT_EQ(1u, resolver.pending_requests().size()); | 507 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 537 // or its reference section. | 539 // or its reference section. |
| 538 TEST_F(ProxyServiceTest, PAC_NoIdentityOrHash) { | 540 TEST_F(ProxyServiceTest, PAC_NoIdentityOrHash) { |
| 539 MockProxyConfigService* config_service = | 541 MockProxyConfigService* config_service = |
| 540 new MockProxyConfigService("http://foopy/proxy.pac"); | 542 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 541 | 543 |
| 542 MockAsyncProxyResolver resolver; | 544 MockAsyncProxyResolver resolver; |
| 543 MockAsyncProxyResolverFactory* factory = | 545 MockAsyncProxyResolverFactory* factory = |
| 544 new MockAsyncProxyResolverFactory(false); | 546 new MockAsyncProxyResolverFactory(false); |
| 545 | 547 |
| 546 ProxyService service(make_scoped_ptr(config_service), | 548 ProxyService service(make_scoped_ptr(config_service), |
| 547 make_scoped_ptr(factory), NULL); | 549 make_scoped_ptr(factory), nullptr); |
| 548 | 550 |
| 549 GURL url("http://username:password@www.google.com/?ref#hash#hash"); | 551 GURL url("http://username:password@www.google.com/?ref#hash#hash"); |
| 550 | 552 |
| 551 ProxyInfo info; | 553 ProxyInfo info; |
| 552 TestCompletionCallback callback; | 554 TestCompletionCallback callback; |
| 553 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), | 555 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| 554 NULL, NULL, BoundNetLog()); | 556 nullptr, nullptr, "", BoundNetLog()); |
| 555 EXPECT_EQ(ERR_IO_PENDING, rv); | 557 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 556 | 558 |
| 557 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 559 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 558 factory->pending_requests()[0]->script_data()->url()); | 560 factory->pending_requests()[0]->script_data()->url()); |
| 559 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 561 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 560 | 562 |
| 561 ASSERT_EQ(1u, resolver.pending_requests().size()); | 563 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 562 // The URL should have been simplified, stripping the username/password/hash. | 564 // The URL should have been simplified, stripping the username/password/hash. |
| 563 EXPECT_EQ(GURL("http://www.google.com/?ref"), | 565 EXPECT_EQ(GURL("http://www.google.com/?ref"), |
| 564 resolver.pending_requests()[0]->url()); | 566 resolver.pending_requests()[0]->url()); |
| 565 | 567 |
| 566 // We end here without ever completing the request -- destruction of | 568 // We end here without ever completing the request -- destruction of |
| 567 // ProxyService will cancel the outstanding request. | 569 // ProxyService will cancel the outstanding request. |
| 568 } | 570 } |
| 569 | 571 |
| 570 TEST_F(ProxyServiceTest, PAC_FailoverWithoutDirect) { | 572 TEST_F(ProxyServiceTest, PAC_FailoverWithoutDirect) { |
| 571 MockProxyConfigService* config_service = | 573 MockProxyConfigService* config_service = |
| 572 new MockProxyConfigService("http://foopy/proxy.pac"); | 574 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 573 MockAsyncProxyResolver resolver; | 575 MockAsyncProxyResolver resolver; |
| 574 MockAsyncProxyResolverFactory* factory = | 576 MockAsyncProxyResolverFactory* factory = |
| 575 new MockAsyncProxyResolverFactory(false); | 577 new MockAsyncProxyResolverFactory(false); |
| 576 | 578 |
| 577 ProxyService service(make_scoped_ptr(config_service), | 579 ProxyService service(make_scoped_ptr(config_service), |
| 578 make_scoped_ptr(factory), NULL); | 580 make_scoped_ptr(factory), nullptr); |
| 579 | 581 |
| 580 GURL url("http://www.google.com/"); | 582 GURL url("http://www.google.com/"); |
| 581 | 583 |
| 582 ProxyInfo info; | 584 ProxyInfo info; |
| 583 TestCompletionCallback callback1; | 585 TestCompletionCallback callback1; |
| 584 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), | 586 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| 585 NULL, NULL, BoundNetLog()); | 587 nullptr, nullptr, "", BoundNetLog()); |
| 586 EXPECT_EQ(ERR_IO_PENDING, rv); | 588 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 587 | 589 |
| 588 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 590 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 589 factory->pending_requests()[0]->script_data()->url()); | 591 factory->pending_requests()[0]->script_data()->url()); |
| 590 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 592 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 591 | 593 |
| 592 ASSERT_EQ(1u, resolver.pending_requests().size()); | 594 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 593 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 595 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 594 | 596 |
| 595 // Set the result in proxy resolver. | 597 // Set the result in proxy resolver. |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 606 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); | 608 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| 607 | 609 |
| 608 // Now, imagine that connecting to foopy:8080 fails: there is nothing | 610 // Now, imagine that connecting to foopy:8080 fails: there is nothing |
| 609 // left to fallback to, since our proxy list was NOT terminated by | 611 // left to fallback to, since our proxy list was NOT terminated by |
| 610 // DIRECT. | 612 // DIRECT. |
| 611 TestResolveProxyDelegate proxy_delegate; | 613 TestResolveProxyDelegate proxy_delegate; |
| 612 TestCompletionCallback callback2; | 614 TestCompletionCallback callback2; |
| 613 ProxyServer expected_proxy_server = info.proxy_server(); | 615 ProxyServer expected_proxy_server = info.proxy_server(); |
| 614 rv = service.ReconsiderProxyAfterError( | 616 rv = service.ReconsiderProxyAfterError( |
| 615 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 617 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 616 callback2.callback(), NULL, &proxy_delegate, BoundNetLog()); | 618 callback2.callback(), nullptr, &proxy_delegate, "GET", BoundNetLog()); |
| 617 // ReconsiderProxyAfterError returns error indicating nothing left. | 619 // ReconsiderProxyAfterError returns error indicating nothing left. |
| 618 EXPECT_EQ(ERR_FAILED, rv); | 620 EXPECT_EQ(ERR_FAILED, rv); |
| 619 EXPECT_TRUE(info.is_empty()); | 621 EXPECT_TRUE(info.is_empty()); |
| 620 } | 622 } |
| 621 | 623 |
| 622 // Test that if the execution of the PAC script fails (i.e. javascript runtime | 624 // Test that if the execution of the PAC script fails (i.e. javascript runtime |
| 623 // error), and the PAC settings are non-mandatory, that we fall-back to direct. | 625 // error), and the PAC settings are non-mandatory, that we fall-back to direct. |
| 624 TEST_F(ProxyServiceTest, PAC_RuntimeError) { | 626 TEST_F(ProxyServiceTest, PAC_RuntimeError) { |
| 625 MockProxyConfigService* config_service = | 627 MockProxyConfigService* config_service = |
| 626 new MockProxyConfigService("http://foopy/proxy.pac"); | 628 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 627 MockAsyncProxyResolver resolver; | 629 MockAsyncProxyResolver resolver; |
| 628 MockAsyncProxyResolverFactory* factory = | 630 MockAsyncProxyResolverFactory* factory = |
| 629 new MockAsyncProxyResolverFactory(false); | 631 new MockAsyncProxyResolverFactory(false); |
| 630 | 632 |
| 631 ProxyService service(make_scoped_ptr(config_service), | 633 ProxyService service(make_scoped_ptr(config_service), |
| 632 make_scoped_ptr(factory), NULL); | 634 make_scoped_ptr(factory), nullptr); |
| 633 | 635 |
| 634 GURL url("http://this-causes-js-error/"); | 636 GURL url("http://this-causes-js-error/"); |
| 635 | 637 |
| 636 ProxyInfo info; | 638 ProxyInfo info; |
| 637 TestCompletionCallback callback1; | 639 TestCompletionCallback callback1; |
| 638 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), | 640 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| 639 NULL, NULL, BoundNetLog()); | 641 nullptr, nullptr, "", BoundNetLog()); |
| 640 EXPECT_EQ(ERR_IO_PENDING, rv); | 642 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 641 | 643 |
| 642 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 644 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 643 factory->pending_requests()[0]->script_data()->url()); | 645 factory->pending_requests()[0]->script_data()->url()); |
| 644 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 646 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 645 | 647 |
| 646 ASSERT_EQ(1u, resolver.pending_requests().size()); | 648 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 647 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 649 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 648 | 650 |
| 649 // Simulate a failure in the PAC executor. | 651 // Simulate a failure in the PAC executor. |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 680 // The important check of this test is to make sure that DIRECT is not somehow | 682 // The important check of this test is to make sure that DIRECT is not somehow |
| 681 // cached as being a bad proxy. | 683 // cached as being a bad proxy. |
| 682 TEST_F(ProxyServiceTest, PAC_FailoverAfterDirect) { | 684 TEST_F(ProxyServiceTest, PAC_FailoverAfterDirect) { |
| 683 MockProxyConfigService* config_service = | 685 MockProxyConfigService* config_service = |
| 684 new MockProxyConfigService("http://foopy/proxy.pac"); | 686 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 685 MockAsyncProxyResolver resolver; | 687 MockAsyncProxyResolver resolver; |
| 686 MockAsyncProxyResolverFactory* factory = | 688 MockAsyncProxyResolverFactory* factory = |
| 687 new MockAsyncProxyResolverFactory(false); | 689 new MockAsyncProxyResolverFactory(false); |
| 688 | 690 |
| 689 ProxyService service(make_scoped_ptr(config_service), | 691 ProxyService service(make_scoped_ptr(config_service), |
| 690 make_scoped_ptr(factory), NULL); | 692 make_scoped_ptr(factory), nullptr); |
| 691 | 693 |
| 692 GURL url("http://www.google.com/"); | 694 GURL url("http://www.google.com/"); |
| 693 | 695 |
| 694 ProxyInfo info; | 696 ProxyInfo info; |
| 695 TestCompletionCallback callback1; | 697 TestCompletionCallback callback1; |
| 696 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), | 698 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| 697 NULL, NULL, BoundNetLog()); | 699 nullptr, nullptr, "", BoundNetLog()); |
| 698 EXPECT_EQ(ERR_IO_PENDING, rv); | 700 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 699 | 701 |
| 700 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 702 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 701 factory->pending_requests()[0]->script_data()->url()); | 703 factory->pending_requests()[0]->script_data()->url()); |
| 702 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 704 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 703 | 705 |
| 704 ASSERT_EQ(1u, resolver.pending_requests().size()); | 706 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 705 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 707 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 706 | 708 |
| 707 // Set the result in proxy resolver. | 709 // Set the result in proxy resolver. |
| 708 resolver.pending_requests()[0]->results()->UsePacString( | 710 resolver.pending_requests()[0]->results()->UsePacString( |
| 709 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); | 711 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); |
| 710 resolver.pending_requests()[0]->CompleteNow(OK); | 712 resolver.pending_requests()[0]->CompleteNow(OK); |
| 711 | 713 |
| 712 EXPECT_EQ(OK, callback1.WaitForResult()); | 714 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 713 EXPECT_TRUE(info.is_direct()); | 715 EXPECT_TRUE(info.is_direct()); |
| 714 | 716 |
| 715 // Fallback 1. | 717 // Fallback 1. |
| 716 TestCompletionCallback callback2; | 718 TestCompletionCallback callback2; |
| 717 rv = service.ReconsiderProxyAfterError( | 719 rv = service.ReconsiderProxyAfterError( |
| 718 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 720 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 719 callback2.callback(), NULL, NULL, BoundNetLog()); | 721 callback2.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 720 EXPECT_EQ(OK, rv); | 722 EXPECT_EQ(OK, rv); |
| 721 EXPECT_FALSE(info.is_direct()); | 723 EXPECT_FALSE(info.is_direct()); |
| 722 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); | 724 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); |
| 723 | 725 |
| 724 // Fallback 2. | 726 // Fallback 2. |
| 725 TestResolveProxyDelegate proxy_delegate; | 727 TestResolveProxyDelegate proxy_delegate; |
| 726 ProxyServer expected_proxy_server3 = info.proxy_server(); | 728 ProxyServer expected_proxy_server3 = info.proxy_server(); |
| 727 TestCompletionCallback callback3; | 729 TestCompletionCallback callback3; |
| 728 rv = service.ReconsiderProxyAfterError( | 730 rv = service.ReconsiderProxyAfterError( |
| 729 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 731 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 730 callback3.callback(), NULL, &proxy_delegate, BoundNetLog()); | 732 callback3.callback(), nullptr, &proxy_delegate, "GET", BoundNetLog()); |
| 731 EXPECT_EQ(OK, rv); | 733 EXPECT_EQ(OK, rv); |
| 732 EXPECT_TRUE(info.is_direct()); | 734 EXPECT_TRUE(info.is_direct()); |
| 733 | 735 |
| 734 // Fallback 3. | 736 // Fallback 3. |
| 735 ProxyServer expected_proxy_server4 = info.proxy_server(); | 737 ProxyServer expected_proxy_server4 = info.proxy_server(); |
| 736 TestCompletionCallback callback4; | 738 TestCompletionCallback callback4; |
| 737 rv = service.ReconsiderProxyAfterError( | 739 rv = service.ReconsiderProxyAfterError( |
| 738 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 740 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 739 callback4.callback(), NULL, &proxy_delegate, BoundNetLog()); | 741 callback4.callback(), nullptr, &proxy_delegate, "GET", BoundNetLog()); |
| 740 EXPECT_EQ(OK, rv); | 742 EXPECT_EQ(OK, rv); |
| 741 EXPECT_FALSE(info.is_direct()); | 743 EXPECT_FALSE(info.is_direct()); |
| 742 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); | 744 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); |
| 743 | 745 |
| 744 // Fallback 4 -- Nothing to fall back to! | 746 // Fallback 4 -- Nothing to fall back to! |
| 745 ProxyServer expected_proxy_server5 = info.proxy_server(); | 747 ProxyServer expected_proxy_server5 = info.proxy_server(); |
| 746 TestCompletionCallback callback5; | 748 TestCompletionCallback callback5; |
| 747 rv = service.ReconsiderProxyAfterError( | 749 rv = service.ReconsiderProxyAfterError( |
| 748 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 750 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 749 callback5.callback(), NULL, &proxy_delegate, BoundNetLog()); | 751 callback5.callback(), nullptr, &proxy_delegate, "GET", BoundNetLog()); |
| 750 EXPECT_EQ(ERR_FAILED, rv); | 752 EXPECT_EQ(ERR_FAILED, rv); |
| 751 EXPECT_TRUE(info.is_empty()); | 753 EXPECT_TRUE(info.is_empty()); |
| 752 } | 754 } |
| 753 | 755 |
| 754 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { | 756 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { |
| 755 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied | 757 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied |
| 756 // to ProxyInfo after the proxy is resolved via a PAC script. | 758 // to ProxyInfo after the proxy is resolved via a PAC script. |
| 757 ProxyConfig config = | 759 ProxyConfig config = |
| 758 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); | 760 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); |
| 759 config.set_source(PROXY_CONFIG_SOURCE_TEST); | 761 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| 760 | 762 |
| 761 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 763 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 762 MockAsyncProxyResolver resolver; | 764 MockAsyncProxyResolver resolver; |
| 763 MockAsyncProxyResolverFactory* factory = | 765 MockAsyncProxyResolverFactory* factory = |
| 764 new MockAsyncProxyResolverFactory(false); | 766 new MockAsyncProxyResolverFactory(false); |
| 765 ProxyService service(make_scoped_ptr(config_service), | 767 ProxyService service(make_scoped_ptr(config_service), |
| 766 make_scoped_ptr(factory), NULL); | 768 make_scoped_ptr(factory), nullptr); |
| 767 | 769 |
| 768 // Resolve something. | 770 // Resolve something. |
| 769 GURL url("http://www.google.com/"); | 771 GURL url("http://www.google.com/"); |
| 770 ProxyInfo info; | 772 ProxyInfo info; |
| 771 TestCompletionCallback callback; | 773 TestCompletionCallback callback; |
| 772 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), | 774 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| 773 NULL, NULL, BoundNetLog()); | 775 nullptr, nullptr, "", BoundNetLog()); |
| 774 ASSERT_EQ(ERR_IO_PENDING, rv); | 776 ASSERT_EQ(ERR_IO_PENDING, rv); |
| 775 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 777 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 776 ASSERT_EQ(1u, resolver.pending_requests().size()); | 778 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 777 | 779 |
| 778 // Set the result in proxy resolver. | 780 // Set the result in proxy resolver. |
| 779 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy"); | 781 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy"); |
| 780 resolver.pending_requests()[0]->CompleteNow(OK); | 782 resolver.pending_requests()[0]->CompleteNow(OK); |
| 781 | 783 |
| 782 EXPECT_EQ(OK, callback.WaitForResult()); | 784 EXPECT_EQ(OK, callback.WaitForResult()); |
| 783 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); | 785 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 794 // javascript runtime error while calling FindProxyForURL(). | 796 // javascript runtime error while calling FindProxyForURL(). |
| 795 | 797 |
| 796 MockProxyConfigService* config_service = | 798 MockProxyConfigService* config_service = |
| 797 new MockProxyConfigService("http://foopy/proxy.pac"); | 799 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 798 | 800 |
| 799 MockAsyncProxyResolver resolver; | 801 MockAsyncProxyResolver resolver; |
| 800 MockAsyncProxyResolverFactory* factory = | 802 MockAsyncProxyResolverFactory* factory = |
| 801 new MockAsyncProxyResolverFactory(false); | 803 new MockAsyncProxyResolverFactory(false); |
| 802 | 804 |
| 803 ProxyService service(make_scoped_ptr(config_service), | 805 ProxyService service(make_scoped_ptr(config_service), |
| 804 make_scoped_ptr(factory), NULL); | 806 make_scoped_ptr(factory), nullptr); |
| 805 | 807 |
| 806 // Start first resolve request. | 808 // Start first resolve request. |
| 807 GURL url("http://www.google.com/"); | 809 GURL url("http://www.google.com/"); |
| 808 ProxyInfo info; | 810 ProxyInfo info; |
| 809 TestCompletionCallback callback1; | 811 TestCompletionCallback callback1; |
| 810 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), | 812 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| 811 NULL, NULL, BoundNetLog()); | 813 nullptr, nullptr, "", BoundNetLog()); |
| 812 EXPECT_EQ(ERR_IO_PENDING, rv); | 814 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 813 | 815 |
| 814 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 816 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 815 factory->pending_requests()[0]->script_data()->url()); | 817 factory->pending_requests()[0]->script_data()->url()); |
| 816 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 818 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 817 | 819 |
| 818 ASSERT_EQ(1u, resolver.pending_requests().size()); | 820 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 819 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 821 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 820 | 822 |
| 821 // Fail the first resolve request in MockAsyncProxyResolver. | 823 // Fail the first resolve request in MockAsyncProxyResolver. |
| 822 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); | 824 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); |
| 823 | 825 |
| 824 // Although the proxy resolver failed the request, ProxyService implicitly | 826 // Although the proxy resolver failed the request, ProxyService implicitly |
| 825 // falls-back to DIRECT. | 827 // falls-back to DIRECT. |
| 826 EXPECT_EQ(OK, callback1.WaitForResult()); | 828 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 827 EXPECT_TRUE(info.is_direct()); | 829 EXPECT_TRUE(info.is_direct()); |
| 828 | 830 |
| 829 // Failed PAC executions still have proxy resolution times. | 831 // Failed PAC executions still have proxy resolution times. |
| 830 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); | 832 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| 831 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); | 833 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| 832 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); | 834 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| 833 | 835 |
| 834 // The second resolve request will try to run through the proxy resolver, | 836 // The second resolve request will try to run through the proxy resolver, |
| 835 // regardless of whether the first request failed in it. | 837 // regardless of whether the first request failed in it. |
| 836 TestCompletionCallback callback2; | 838 TestCompletionCallback callback2; |
| 837 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback2.callback(), NULL, | 839 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback2.callback(), |
| 838 NULL, BoundNetLog()); | 840 nullptr, nullptr, "", BoundNetLog()); |
| 839 EXPECT_EQ(ERR_IO_PENDING, rv); | 841 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 840 | 842 |
| 841 ASSERT_EQ(1u, resolver.pending_requests().size()); | 843 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 842 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 844 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 843 | 845 |
| 844 // This time we will have the resolver succeed (perhaps the PAC script has | 846 // This time we will have the resolver succeed (perhaps the PAC script has |
| 845 // a dependency on the current time). | 847 // a dependency on the current time). |
| 846 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); | 848 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); |
| 847 resolver.pending_requests()[0]->CompleteNow(OK); | 849 resolver.pending_requests()[0]->CompleteNow(OK); |
| 848 | 850 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 864 | 866 |
| 865 ProxyService service(make_scoped_ptr(config_service), | 867 ProxyService service(make_scoped_ptr(config_service), |
| 866 make_scoped_ptr(factory), nullptr); | 868 make_scoped_ptr(factory), nullptr); |
| 867 | 869 |
| 868 // Start first resolve request. | 870 // Start first resolve request. |
| 869 GURL url("http://www.google.com/"); | 871 GURL url("http://www.google.com/"); |
| 870 ProxyInfo info; | 872 ProxyInfo info; |
| 871 TestCompletionCallback callback1; | 873 TestCompletionCallback callback1; |
| 872 int rv = | 874 int rv = |
| 873 service.ResolveProxy(url, net::LOAD_NORMAL, &info, callback1.callback(), | 875 service.ResolveProxy(url, net::LOAD_NORMAL, &info, callback1.callback(), |
| 874 nullptr, nullptr, BoundNetLog()); | 876 nullptr, nullptr, "", BoundNetLog()); |
| 875 EXPECT_EQ(ERR_IO_PENDING, rv); | 877 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 876 | 878 |
| 877 ASSERT_EQ(1u, factory->pending_requests().size()); | 879 ASSERT_EQ(1u, factory->pending_requests().size()); |
| 878 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 880 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 879 factory->pending_requests()[0]->script_data()->url()); | 881 factory->pending_requests()[0]->script_data()->url()); |
| 880 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 882 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 881 | 883 |
| 882 ASSERT_EQ(1u, resolver.pending_requests().size()); | 884 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 883 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 885 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 884 | 886 |
| 885 // Fail the first resolve request in MockAsyncProxyResolver. | 887 // Fail the first resolve request in MockAsyncProxyResolver. |
| 886 resolver.pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_TERMINATED); | 888 resolver.pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_TERMINATED); |
| 887 | 889 |
| 888 // Although the proxy resolver failed the request, ProxyService implicitly | 890 // Although the proxy resolver failed the request, ProxyService implicitly |
| 889 // falls-back to DIRECT. | 891 // falls-back to DIRECT. |
| 890 EXPECT_EQ(OK, callback1.WaitForResult()); | 892 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 891 EXPECT_TRUE(info.is_direct()); | 893 EXPECT_TRUE(info.is_direct()); |
| 892 | 894 |
| 893 // Failed PAC executions still have proxy resolution times. | 895 // Failed PAC executions still have proxy resolution times. |
| 894 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); | 896 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| 895 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); | 897 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| 896 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); | 898 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| 897 | 899 |
| 898 // With no other requests, the ProxyService waits for a new request before | 900 // With no other requests, the ProxyService waits for a new request before |
| 899 // initializing a new ProxyResolver. | 901 // initializing a new ProxyResolver. |
| 900 EXPECT_TRUE(factory->pending_requests().empty()); | 902 EXPECT_TRUE(factory->pending_requests().empty()); |
| 901 | 903 |
| 902 TestCompletionCallback callback2; | 904 TestCompletionCallback callback2; |
| 903 rv = service.ResolveProxy(url, net::LOAD_NORMAL, &info, callback2.callback(), | 905 rv = service.ResolveProxy(url, net::LOAD_NORMAL, &info, callback2.callback(), |
| 904 nullptr, nullptr, BoundNetLog()); | 906 nullptr, nullptr, "", BoundNetLog()); |
| 905 EXPECT_EQ(ERR_IO_PENDING, rv); | 907 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 906 | 908 |
| 907 ASSERT_EQ(1u, factory->pending_requests().size()); | 909 ASSERT_EQ(1u, factory->pending_requests().size()); |
| 908 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 910 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 909 factory->pending_requests()[0]->script_data()->url()); | 911 factory->pending_requests()[0]->script_data()->url()); |
| 910 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 912 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 911 | 913 |
| 912 ASSERT_EQ(1u, resolver.pending_requests().size()); | 914 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 913 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 915 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 914 | 916 |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 936 ProxyService service(make_scoped_ptr(config_service), | 938 ProxyService service(make_scoped_ptr(config_service), |
| 937 make_scoped_ptr(factory), nullptr); | 939 make_scoped_ptr(factory), nullptr); |
| 938 | 940 |
| 939 // Start two resolve requests. | 941 // Start two resolve requests. |
| 940 GURL url1("http://www.google.com/"); | 942 GURL url1("http://www.google.com/"); |
| 941 GURL url2("https://www.google.com/"); | 943 GURL url2("https://www.google.com/"); |
| 942 ProxyInfo info; | 944 ProxyInfo info; |
| 943 TestCompletionCallback callback1; | 945 TestCompletionCallback callback1; |
| 944 int rv = | 946 int rv = |
| 945 service.ResolveProxy(url1, net::LOAD_NORMAL, &info, callback1.callback(), | 947 service.ResolveProxy(url1, net::LOAD_NORMAL, &info, callback1.callback(), |
| 946 nullptr, nullptr, BoundNetLog()); | 948 nullptr, nullptr, "", BoundNetLog()); |
| 947 EXPECT_EQ(ERR_IO_PENDING, rv); | 949 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 948 TestCompletionCallback callback2; | 950 TestCompletionCallback callback2; |
| 949 rv = service.ResolveProxy(url2, net::LOAD_NORMAL, &info, callback2.callback(), | 951 rv = service.ResolveProxy(url2, net::LOAD_NORMAL, &info, callback2.callback(), |
| 950 nullptr, nullptr, BoundNetLog()); | 952 nullptr, nullptr, "", BoundNetLog()); |
| 951 EXPECT_EQ(ERR_IO_PENDING, rv); | 953 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 952 | 954 |
| 953 ASSERT_EQ(1u, factory->pending_requests().size()); | 955 ASSERT_EQ(1u, factory->pending_requests().size()); |
| 954 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 956 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 955 factory->pending_requests()[0]->script_data()->url()); | 957 factory->pending_requests()[0]->script_data()->url()); |
| 956 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 958 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 957 | 959 |
| 958 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2); | 960 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2); |
| 959 | 961 |
| 960 // Fail the first resolve request in MockAsyncProxyResolver. | 962 // Fail the first resolve request in MockAsyncProxyResolver. |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 998 ProxyConfig config( | 1000 ProxyConfig config( |
| 999 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); | 1001 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); |
| 1000 config.set_pac_mandatory(true); | 1002 config.set_pac_mandatory(true); |
| 1001 | 1003 |
| 1002 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1004 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1003 | 1005 |
| 1004 MockAsyncProxyResolverFactory* factory = | 1006 MockAsyncProxyResolverFactory* factory = |
| 1005 new MockAsyncProxyResolverFactory(false); | 1007 new MockAsyncProxyResolverFactory(false); |
| 1006 | 1008 |
| 1007 ProxyService service(make_scoped_ptr(config_service), | 1009 ProxyService service(make_scoped_ptr(config_service), |
| 1008 make_scoped_ptr(factory), NULL); | 1010 make_scoped_ptr(factory), nullptr); |
| 1009 | 1011 |
| 1010 // Start first resolve request. | 1012 // Start first resolve request. |
| 1011 GURL url("http://www.google.com/"); | 1013 GURL url("http://www.google.com/"); |
| 1012 ProxyInfo info; | 1014 ProxyInfo info; |
| 1013 TestCompletionCallback callback1; | 1015 TestCompletionCallback callback1; |
| 1014 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), | 1016 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| 1015 NULL, NULL, BoundNetLog()); | 1017 nullptr, nullptr, "", BoundNetLog()); |
| 1016 EXPECT_EQ(ERR_IO_PENDING, rv); | 1018 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1017 | 1019 |
| 1018 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1020 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1019 factory->pending_requests()[0]->script_data()->url()); | 1021 factory->pending_requests()[0]->script_data()->url()); |
| 1020 factory->pending_requests()[0]->CompleteNow(ERR_FAILED, nullptr); | 1022 factory->pending_requests()[0]->CompleteNow(ERR_FAILED, nullptr); |
| 1021 | 1023 |
| 1022 ASSERT_EQ(0u, factory->pending_requests().size()); | 1024 ASSERT_EQ(0u, factory->pending_requests().size()); |
| 1023 // As the proxy resolver factory failed the request and is configured for a | 1025 // As the proxy resolver factory failed the request and is configured for a |
| 1024 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT. | 1026 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT. |
| 1025 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, | 1027 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, |
| 1026 callback1.WaitForResult()); | 1028 callback1.WaitForResult()); |
| 1027 EXPECT_FALSE(info.is_direct()); | 1029 EXPECT_FALSE(info.is_direct()); |
| 1028 | 1030 |
| 1029 // As the proxy resolver factory failed the request and is configured for a | 1031 // As the proxy resolver factory failed the request and is configured for a |
| 1030 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT. | 1032 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT. |
| 1031 TestCompletionCallback callback2; | 1033 TestCompletionCallback callback2; |
| 1032 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback2.callback(), NULL, | 1034 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback2.callback(), |
| 1033 NULL, BoundNetLog()); | 1035 nullptr, nullptr, "", BoundNetLog()); |
| 1034 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, rv); | 1036 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, rv); |
| 1035 EXPECT_FALSE(info.is_direct()); | 1037 EXPECT_FALSE(info.is_direct()); |
| 1036 } | 1038 } |
| 1037 | 1039 |
| 1038 TEST_F(ProxyServiceTest, ProxyResolverFailsParsingJavaScriptMandatoryPac) { | 1040 TEST_F(ProxyServiceTest, ProxyResolverFailsParsingJavaScriptMandatoryPac) { |
| 1039 // Test what happens when the ProxyResolver fails that is configured to use a | 1041 // Test what happens when the ProxyResolver fails that is configured to use a |
| 1040 // mandatory PAC script. The download of the PAC script has already | 1042 // mandatory PAC script. The download of the PAC script has already |
| 1041 // succeeded but the PAC script contains no valid javascript. | 1043 // succeeded but the PAC script contains no valid javascript. |
| 1042 | 1044 |
| 1043 ProxyConfig config( | 1045 ProxyConfig config( |
| 1044 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); | 1046 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); |
| 1045 config.set_pac_mandatory(true); | 1047 config.set_pac_mandatory(true); |
| 1046 | 1048 |
| 1047 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1049 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1048 | 1050 |
| 1049 MockAsyncProxyResolverFactory* factory = | 1051 MockAsyncProxyResolverFactory* factory = |
| 1050 new MockAsyncProxyResolverFactory(true); | 1052 new MockAsyncProxyResolverFactory(true); |
| 1051 | 1053 |
| 1052 ProxyService service(make_scoped_ptr(config_service), | 1054 ProxyService service(make_scoped_ptr(config_service), |
| 1053 make_scoped_ptr(factory), NULL); | 1055 make_scoped_ptr(factory), nullptr); |
| 1054 | 1056 |
| 1055 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1057 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1056 service.SetProxyScriptFetchers( | 1058 service.SetProxyScriptFetchers( |
| 1057 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 1059 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 1058 | 1060 |
| 1059 // Start resolve request. | 1061 // Start resolve request. |
| 1060 GURL url("http://www.google.com/"); | 1062 GURL url("http://www.google.com/"); |
| 1061 ProxyInfo info; | 1063 ProxyInfo info; |
| 1062 TestCompletionCallback callback; | 1064 TestCompletionCallback callback; |
| 1063 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), | 1065 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| 1064 NULL, NULL, BoundNetLog()); | 1066 nullptr, nullptr, "", BoundNetLog()); |
| 1065 EXPECT_EQ(ERR_IO_PENDING, rv); | 1067 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1066 | 1068 |
| 1067 // Check that nothing has been sent to the proxy resolver factory yet. | 1069 // Check that nothing has been sent to the proxy resolver factory yet. |
| 1068 ASSERT_EQ(0u, factory->pending_requests().size()); | 1070 ASSERT_EQ(0u, factory->pending_requests().size()); |
| 1069 | 1071 |
| 1070 // Downloading the PAC script succeeds. | 1072 // Downloading the PAC script succeeds. |
| 1071 EXPECT_TRUE(fetcher->has_pending_request()); | 1073 EXPECT_TRUE(fetcher->has_pending_request()); |
| 1072 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 1074 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 1073 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); | 1075 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); |
| 1074 | 1076 |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 1093 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); | 1095 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); |
| 1094 config.set_pac_mandatory(true); | 1096 config.set_pac_mandatory(true); |
| 1095 | 1097 |
| 1096 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1098 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1097 | 1099 |
| 1098 MockAsyncProxyResolver resolver; | 1100 MockAsyncProxyResolver resolver; |
| 1099 MockAsyncProxyResolverFactory* factory = | 1101 MockAsyncProxyResolverFactory* factory = |
| 1100 new MockAsyncProxyResolverFactory(false); | 1102 new MockAsyncProxyResolverFactory(false); |
| 1101 | 1103 |
| 1102 ProxyService service(make_scoped_ptr(config_service), | 1104 ProxyService service(make_scoped_ptr(config_service), |
| 1103 make_scoped_ptr(factory), NULL); | 1105 make_scoped_ptr(factory), nullptr); |
| 1104 | 1106 |
| 1105 // Start first resolve request. | 1107 // Start first resolve request. |
| 1106 GURL url("http://www.google.com/"); | 1108 GURL url("http://www.google.com/"); |
| 1107 ProxyInfo info; | 1109 ProxyInfo info; |
| 1108 TestCompletionCallback callback1; | 1110 TestCompletionCallback callback1; |
| 1109 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), | 1111 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| 1110 NULL, NULL, BoundNetLog()); | 1112 nullptr, nullptr, "", BoundNetLog()); |
| 1111 EXPECT_EQ(ERR_IO_PENDING, rv); | 1113 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1112 | 1114 |
| 1113 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1115 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1114 factory->pending_requests()[0]->script_data()->url()); | 1116 factory->pending_requests()[0]->script_data()->url()); |
| 1115 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 1117 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1116 | 1118 |
| 1117 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1119 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1118 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1120 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1119 | 1121 |
| 1120 // Fail the first resolve request in MockAsyncProxyResolver. | 1122 // Fail the first resolve request in MockAsyncProxyResolver. |
| 1121 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); | 1123 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); |
| 1122 | 1124 |
| 1123 // As the proxy resolver failed the request and is configured for a mandatory | 1125 // As the proxy resolver failed the request and is configured for a mandatory |
| 1124 // PAC script, ProxyService must not implicitly fall-back to DIRECT. | 1126 // PAC script, ProxyService must not implicitly fall-back to DIRECT. |
| 1125 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, | 1127 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, |
| 1126 callback1.WaitForResult()); | 1128 callback1.WaitForResult()); |
| 1127 EXPECT_FALSE(info.is_direct()); | 1129 EXPECT_FALSE(info.is_direct()); |
| 1128 | 1130 |
| 1129 // The second resolve request will try to run through the proxy resolver, | 1131 // The second resolve request will try to run through the proxy resolver, |
| 1130 // regardless of whether the first request failed in it. | 1132 // regardless of whether the first request failed in it. |
| 1131 TestCompletionCallback callback2; | 1133 TestCompletionCallback callback2; |
| 1132 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback2.callback(), NULL, | 1134 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback2.callback(), |
| 1133 NULL, BoundNetLog()); | 1135 nullptr, nullptr, "", BoundNetLog()); |
| 1134 EXPECT_EQ(ERR_IO_PENDING, rv); | 1136 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1135 | 1137 |
| 1136 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1138 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1137 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1139 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1138 | 1140 |
| 1139 // This time we will have the resolver succeed (perhaps the PAC script has | 1141 // This time we will have the resolver succeed (perhaps the PAC script has |
| 1140 // a dependency on the current time). | 1142 // a dependency on the current time). |
| 1141 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); | 1143 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); |
| 1142 resolver.pending_requests()[0]->CompleteNow(OK); | 1144 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1143 | 1145 |
| 1144 EXPECT_EQ(OK, callback2.WaitForResult()); | 1146 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 1145 EXPECT_FALSE(info.is_direct()); | 1147 EXPECT_FALSE(info.is_direct()); |
| 1146 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); | 1148 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); |
| 1147 } | 1149 } |
| 1148 | 1150 |
| 1149 TEST_F(ProxyServiceTest, ProxyFallback) { | 1151 TEST_F(ProxyServiceTest, ProxyFallback) { |
| 1150 // Test what happens when we specify multiple proxy servers and some of them | 1152 // Test what happens when we specify multiple proxy servers and some of them |
| 1151 // are bad. | 1153 // are bad. |
| 1152 | 1154 |
| 1153 MockProxyConfigService* config_service = | 1155 MockProxyConfigService* config_service = |
| 1154 new MockProxyConfigService("http://foopy/proxy.pac"); | 1156 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1155 | 1157 |
| 1156 MockAsyncProxyResolver resolver; | 1158 MockAsyncProxyResolver resolver; |
| 1157 MockAsyncProxyResolverFactory* factory = | 1159 MockAsyncProxyResolverFactory* factory = |
| 1158 new MockAsyncProxyResolverFactory(false); | 1160 new MockAsyncProxyResolverFactory(false); |
| 1159 | 1161 |
| 1160 ProxyService service(make_scoped_ptr(config_service), | 1162 ProxyService service(make_scoped_ptr(config_service), |
| 1161 make_scoped_ptr(factory), NULL); | 1163 make_scoped_ptr(factory), nullptr); |
| 1162 | 1164 |
| 1163 GURL url("http://www.google.com/"); | 1165 GURL url("http://www.google.com/"); |
| 1164 | 1166 |
| 1165 // Get the proxy information. | 1167 // Get the proxy information. |
| 1166 ProxyInfo info; | 1168 ProxyInfo info; |
| 1167 TestCompletionCallback callback1; | 1169 TestCompletionCallback callback1; |
| 1168 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), | 1170 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| 1169 NULL, NULL, BoundNetLog()); | 1171 nullptr, nullptr, "", BoundNetLog()); |
| 1170 EXPECT_EQ(ERR_IO_PENDING, rv); | 1172 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1171 | 1173 |
| 1172 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1174 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1173 factory->pending_requests()[0]->script_data()->url()); | 1175 factory->pending_requests()[0]->script_data()->url()); |
| 1174 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 1176 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1175 | 1177 |
| 1176 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1178 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1177 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1179 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1178 | 1180 |
| 1179 // Set the result in proxy resolver. | 1181 // Set the result in proxy resolver. |
| 1180 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1182 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1181 "foopy1:8080;foopy2:9090"); | 1183 "foopy1:8080;foopy2:9090"); |
| 1182 resolver.pending_requests()[0]->CompleteNow(OK); | 1184 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1183 | 1185 |
| 1184 // The first item is valid. | 1186 // The first item is valid. |
| 1185 EXPECT_EQ(OK, callback1.WaitForResult()); | 1187 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1186 EXPECT_FALSE(info.is_direct()); | 1188 EXPECT_FALSE(info.is_direct()); |
| 1187 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1189 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1188 | 1190 |
| 1189 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); | 1191 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| 1190 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); | 1192 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| 1191 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); | 1193 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| 1192 base::TimeTicks proxy_resolve_start_time = info.proxy_resolve_start_time(); | 1194 base::TimeTicks proxy_resolve_start_time = info.proxy_resolve_start_time(); |
| 1193 base::TimeTicks proxy_resolve_end_time = info.proxy_resolve_end_time(); | 1195 base::TimeTicks proxy_resolve_end_time = info.proxy_resolve_end_time(); |
| 1194 | 1196 |
| 1195 // Fake an error on the proxy. | 1197 // Fake an error on the proxy. |
| 1196 TestCompletionCallback callback2; | 1198 TestCompletionCallback callback2; |
| 1197 rv = service.ReconsiderProxyAfterError( | 1199 rv = service.ReconsiderProxyAfterError( |
| 1198 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 1200 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 1199 callback2.callback(), NULL, NULL, BoundNetLog()); | 1201 callback2.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1200 EXPECT_EQ(OK, rv); | 1202 EXPECT_EQ(OK, rv); |
| 1201 | 1203 |
| 1202 // Proxy times should not have been modified by fallback. | 1204 // Proxy times should not have been modified by fallback. |
| 1203 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); | 1205 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); |
| 1204 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); | 1206 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); |
| 1205 | 1207 |
| 1206 // The second proxy should be specified. | 1208 // The second proxy should be specified. |
| 1207 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 1209 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 1208 // Report back that the second proxy worked. This will globally mark the | 1210 // Report back that the second proxy worked. This will globally mark the |
| 1209 // first proxy as bad. | 1211 // first proxy as bad. |
| 1210 TestProxyFallbackProxyDelegate test_delegate; | 1212 TestProxyFallbackProxyDelegate test_delegate; |
| 1211 service.ReportSuccess(info, &test_delegate); | 1213 service.ReportSuccess(info, &test_delegate); |
| 1212 EXPECT_EQ("foopy1:8080", test_delegate.proxy_server().ToURI()); | 1214 EXPECT_EQ("foopy1:8080", test_delegate.proxy_server().ToURI()); |
| 1213 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, | 1215 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, |
| 1214 test_delegate.proxy_fallback_net_error()); | 1216 test_delegate.proxy_fallback_net_error()); |
| 1215 | 1217 |
| 1216 TestCompletionCallback callback3; | 1218 TestCompletionCallback callback3; |
| 1217 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback3.callback(), NULL, | 1219 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback3.callback(), |
| 1218 NULL, BoundNetLog()); | 1220 nullptr, nullptr, "", BoundNetLog()); |
| 1219 EXPECT_EQ(ERR_IO_PENDING, rv); | 1221 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1220 | 1222 |
| 1221 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1223 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1222 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1224 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1223 | 1225 |
| 1224 // Set the result in proxy resolver -- the second result is already known | 1226 // Set the result in proxy resolver -- the second result is already known |
| 1225 // to be bad, so we will not try to use it initially. | 1227 // to be bad, so we will not try to use it initially. |
| 1226 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1228 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1227 "foopy3:7070;foopy1:8080;foopy2:9090"); | 1229 "foopy3:7070;foopy1:8080;foopy2:9090"); |
| 1228 resolver.pending_requests()[0]->CompleteNow(OK); | 1230 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1229 | 1231 |
| 1230 EXPECT_EQ(OK, callback3.WaitForResult()); | 1232 EXPECT_EQ(OK, callback3.WaitForResult()); |
| 1231 EXPECT_FALSE(info.is_direct()); | 1233 EXPECT_FALSE(info.is_direct()); |
| 1232 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); | 1234 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); |
| 1233 | 1235 |
| 1234 // Proxy times should have been updated, so get them again. | 1236 // Proxy times should have been updated, so get them again. |
| 1235 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time()); | 1237 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time()); |
| 1236 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); | 1238 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| 1237 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); | 1239 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| 1238 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); | 1240 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| 1239 proxy_resolve_start_time = info.proxy_resolve_start_time(); | 1241 proxy_resolve_start_time = info.proxy_resolve_start_time(); |
| 1240 proxy_resolve_end_time = info.proxy_resolve_end_time(); | 1242 proxy_resolve_end_time = info.proxy_resolve_end_time(); |
| 1241 | 1243 |
| 1242 // We fake another error. It should now try the third one. | 1244 // We fake another error. It should now try the third one. |
| 1243 TestCompletionCallback callback4; | 1245 TestCompletionCallback callback4; |
| 1244 rv = service.ReconsiderProxyAfterError( | 1246 rv = service.ReconsiderProxyAfterError( |
| 1245 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 1247 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 1246 callback4.callback(), NULL, NULL, BoundNetLog()); | 1248 callback4.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1247 EXPECT_EQ(OK, rv); | 1249 EXPECT_EQ(OK, rv); |
| 1248 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 1250 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 1249 | 1251 |
| 1250 // We fake another error. At this point we have tried all of the | 1252 // We fake another error. At this point we have tried all of the |
| 1251 // proxy servers we thought were valid; next we try the proxy server | 1253 // proxy servers we thought were valid; next we try the proxy server |
| 1252 // that was in our bad proxies map (foopy1:8080). | 1254 // that was in our bad proxies map (foopy1:8080). |
| 1253 TestCompletionCallback callback5; | 1255 TestCompletionCallback callback5; |
| 1254 rv = service.ReconsiderProxyAfterError( | 1256 rv = service.ReconsiderProxyAfterError( |
| 1255 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 1257 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 1256 callback5.callback(), NULL, NULL, BoundNetLog()); | 1258 callback5.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1257 EXPECT_EQ(OK, rv); | 1259 EXPECT_EQ(OK, rv); |
| 1258 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1260 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1259 | 1261 |
| 1260 // Fake another error, the last proxy is gone, the list should now be empty, | 1262 // Fake another error, the last proxy is gone, the list should now be empty, |
| 1261 // so there is nothing left to try. | 1263 // so there is nothing left to try. |
| 1262 TestCompletionCallback callback6; | 1264 TestCompletionCallback callback6; |
| 1263 rv = service.ReconsiderProxyAfterError( | 1265 rv = service.ReconsiderProxyAfterError( |
| 1264 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 1266 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 1265 callback6.callback(), NULL, NULL, BoundNetLog()); | 1267 callback6.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1266 EXPECT_EQ(ERR_FAILED, rv); | 1268 EXPECT_EQ(ERR_FAILED, rv); |
| 1267 EXPECT_FALSE(info.is_direct()); | 1269 EXPECT_FALSE(info.is_direct()); |
| 1268 EXPECT_TRUE(info.is_empty()); | 1270 EXPECT_TRUE(info.is_empty()); |
| 1269 | 1271 |
| 1270 // Proxy times should not have been modified by fallback. | 1272 // Proxy times should not have been modified by fallback. |
| 1271 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); | 1273 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); |
| 1272 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); | 1274 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); |
| 1273 | 1275 |
| 1274 // Look up proxies again | 1276 // Look up proxies again |
| 1275 TestCompletionCallback callback7; | 1277 TestCompletionCallback callback7; |
| 1276 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback7.callback(), NULL, | 1278 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback7.callback(), |
| 1277 NULL, BoundNetLog()); | 1279 nullptr, nullptr, "", BoundNetLog()); |
| 1278 EXPECT_EQ(ERR_IO_PENDING, rv); | 1280 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1279 | 1281 |
| 1280 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1282 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1281 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1283 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1282 | 1284 |
| 1283 // This time, the first 3 results have been found to be bad, but only the | 1285 // This time, the first 3 results have been found to be bad, but only the |
| 1284 // first proxy has been confirmed ... | 1286 // first proxy has been confirmed ... |
| 1285 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1287 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1286 "foopy1:8080;foopy3:7070;foopy2:9090;foopy4:9091"); | 1288 "foopy1:8080;foopy3:7070;foopy2:9090;foopy4:9091"); |
| 1287 resolver.pending_requests()[0]->CompleteNow(OK); | 1289 resolver.pending_requests()[0]->CompleteNow(OK); |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 1301 // fallback choice to DIRECT. | 1303 // fallback choice to DIRECT. |
| 1302 TEST_F(ProxyServiceTest, ProxyFallbackToDirect) { | 1304 TEST_F(ProxyServiceTest, ProxyFallbackToDirect) { |
| 1303 MockProxyConfigService* config_service = | 1305 MockProxyConfigService* config_service = |
| 1304 new MockProxyConfigService("http://foopy/proxy.pac"); | 1306 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1305 | 1307 |
| 1306 MockAsyncProxyResolver resolver; | 1308 MockAsyncProxyResolver resolver; |
| 1307 MockAsyncProxyResolverFactory* factory = | 1309 MockAsyncProxyResolverFactory* factory = |
| 1308 new MockAsyncProxyResolverFactory(false); | 1310 new MockAsyncProxyResolverFactory(false); |
| 1309 | 1311 |
| 1310 ProxyService service(make_scoped_ptr(config_service), | 1312 ProxyService service(make_scoped_ptr(config_service), |
| 1311 make_scoped_ptr(factory), NULL); | 1313 make_scoped_ptr(factory), nullptr); |
| 1312 | 1314 |
| 1313 GURL url("http://www.google.com/"); | 1315 GURL url("http://www.google.com/"); |
| 1314 | 1316 |
| 1315 // Get the proxy information. | 1317 // Get the proxy information. |
| 1316 ProxyInfo info; | 1318 ProxyInfo info; |
| 1317 TestCompletionCallback callback1; | 1319 TestCompletionCallback callback1; |
| 1318 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), | 1320 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| 1319 NULL, NULL, BoundNetLog()); | 1321 nullptr, nullptr, "", BoundNetLog()); |
| 1320 EXPECT_EQ(ERR_IO_PENDING, rv); | 1322 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1321 | 1323 |
| 1322 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1324 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1323 factory->pending_requests()[0]->script_data()->url()); | 1325 factory->pending_requests()[0]->script_data()->url()); |
| 1324 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 1326 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1325 | 1327 |
| 1326 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1328 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1327 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1329 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1328 | 1330 |
| 1329 // Set the result in proxy resolver. | 1331 // Set the result in proxy resolver. |
| 1330 resolver.pending_requests()[0]->results()->UsePacString( | 1332 resolver.pending_requests()[0]->results()->UsePacString( |
| 1331 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); | 1333 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); |
| 1332 resolver.pending_requests()[0]->CompleteNow(OK); | 1334 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1333 | 1335 |
| 1334 // Get the first result. | 1336 // Get the first result. |
| 1335 EXPECT_EQ(OK, callback1.WaitForResult()); | 1337 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1336 EXPECT_FALSE(info.is_direct()); | 1338 EXPECT_FALSE(info.is_direct()); |
| 1337 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1339 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1338 | 1340 |
| 1339 // Fake an error on the proxy. | 1341 // Fake an error on the proxy. |
| 1340 TestCompletionCallback callback2; | 1342 TestCompletionCallback callback2; |
| 1341 rv = service.ReconsiderProxyAfterError( | 1343 rv = service.ReconsiderProxyAfterError( |
| 1342 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 1344 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 1343 callback2.callback(), NULL, NULL, BoundNetLog()); | 1345 callback2.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1344 EXPECT_EQ(OK, rv); | 1346 EXPECT_EQ(OK, rv); |
| 1345 | 1347 |
| 1346 // Now we get back the second proxy. | 1348 // Now we get back the second proxy. |
| 1347 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 1349 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 1348 | 1350 |
| 1349 // Fake an error on this proxy as well. | 1351 // Fake an error on this proxy as well. |
| 1350 TestCompletionCallback callback3; | 1352 TestCompletionCallback callback3; |
| 1351 rv = service.ReconsiderProxyAfterError( | 1353 rv = service.ReconsiderProxyAfterError( |
| 1352 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 1354 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 1353 callback3.callback(), NULL, NULL, BoundNetLog()); | 1355 callback3.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1354 EXPECT_EQ(OK, rv); | 1356 EXPECT_EQ(OK, rv); |
| 1355 | 1357 |
| 1356 // Finally, we get back DIRECT. | 1358 // Finally, we get back DIRECT. |
| 1357 EXPECT_TRUE(info.is_direct()); | 1359 EXPECT_TRUE(info.is_direct()); |
| 1358 | 1360 |
| 1359 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); | 1361 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); |
| 1360 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); | 1362 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); |
| 1361 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); | 1363 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); |
| 1362 | 1364 |
| 1363 // Now we tell the proxy service that even DIRECT failed. | 1365 // Now we tell the proxy service that even DIRECT failed. |
| 1364 TestCompletionCallback callback4; | 1366 TestCompletionCallback callback4; |
| 1365 rv = service.ReconsiderProxyAfterError( | 1367 rv = service.ReconsiderProxyAfterError( |
| 1366 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 1368 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 1367 callback4.callback(), NULL, NULL, BoundNetLog()); | 1369 callback4.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1368 // There was nothing left to try after DIRECT, so we are out of | 1370 // There was nothing left to try after DIRECT, so we are out of |
| 1369 // choices. | 1371 // choices. |
| 1370 EXPECT_EQ(ERR_FAILED, rv); | 1372 EXPECT_EQ(ERR_FAILED, rv); |
| 1371 } | 1373 } |
| 1372 | 1374 |
| 1373 TEST_F(ProxyServiceTest, ProxyFallback_NewSettings) { | 1375 TEST_F(ProxyServiceTest, ProxyFallback_NewSettings) { |
| 1374 // Test proxy failover when new settings are available. | 1376 // Test proxy failover when new settings are available. |
| 1375 | 1377 |
| 1376 MockProxyConfigService* config_service = | 1378 MockProxyConfigService* config_service = |
| 1377 new MockProxyConfigService("http://foopy/proxy.pac"); | 1379 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1378 | 1380 |
| 1379 MockAsyncProxyResolver resolver; | 1381 MockAsyncProxyResolver resolver; |
| 1380 MockAsyncProxyResolverFactory* factory = | 1382 MockAsyncProxyResolverFactory* factory = |
| 1381 new MockAsyncProxyResolverFactory(false); | 1383 new MockAsyncProxyResolverFactory(false); |
| 1382 | 1384 |
| 1383 ProxyService service(make_scoped_ptr(config_service), | 1385 ProxyService service(make_scoped_ptr(config_service), |
| 1384 make_scoped_ptr(factory), NULL); | 1386 make_scoped_ptr(factory), nullptr); |
| 1385 | 1387 |
| 1386 GURL url("http://www.google.com/"); | 1388 GURL url("http://www.google.com/"); |
| 1387 | 1389 |
| 1388 // Get the proxy information. | 1390 // Get the proxy information. |
| 1389 ProxyInfo info; | 1391 ProxyInfo info; |
| 1390 TestCompletionCallback callback1; | 1392 TestCompletionCallback callback1; |
| 1391 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), | 1393 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| 1392 NULL, NULL, BoundNetLog()); | 1394 nullptr, nullptr, "", BoundNetLog()); |
| 1393 EXPECT_EQ(ERR_IO_PENDING, rv); | 1395 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1394 | 1396 |
| 1395 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1397 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1396 factory->pending_requests()[0]->script_data()->url()); | 1398 factory->pending_requests()[0]->script_data()->url()); |
| 1397 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 1399 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1398 | 1400 |
| 1399 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1401 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1400 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1402 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1401 | 1403 |
| 1402 // Set the result in proxy resolver. | 1404 // Set the result in proxy resolver. |
| 1403 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1405 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1404 "foopy1:8080;foopy2:9090"); | 1406 "foopy1:8080;foopy2:9090"); |
| 1405 resolver.pending_requests()[0]->CompleteNow(OK); | 1407 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1406 | 1408 |
| 1407 // The first item is valid. | 1409 // The first item is valid. |
| 1408 EXPECT_EQ(OK, callback1.WaitForResult()); | 1410 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1409 EXPECT_FALSE(info.is_direct()); | 1411 EXPECT_FALSE(info.is_direct()); |
| 1410 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1412 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1411 | 1413 |
| 1412 // Fake an error on the proxy, and also a new configuration on the proxy. | 1414 // Fake an error on the proxy, and also a new configuration on the proxy. |
| 1413 config_service->SetConfig( | 1415 config_service->SetConfig( |
| 1414 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac"))); | 1416 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac"))); |
| 1415 | 1417 |
| 1416 TestCompletionCallback callback2; | 1418 TestCompletionCallback callback2; |
| 1417 rv = service.ReconsiderProxyAfterError( | 1419 rv = service.ReconsiderProxyAfterError( |
| 1418 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 1420 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 1419 callback2.callback(), NULL, NULL, BoundNetLog()); | 1421 callback2.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1420 EXPECT_EQ(ERR_IO_PENDING, rv); | 1422 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1421 | 1423 |
| 1422 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), | 1424 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), |
| 1423 factory->pending_requests()[0]->script_data()->url()); | 1425 factory->pending_requests()[0]->script_data()->url()); |
| 1424 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 1426 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1425 | 1427 |
| 1426 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1428 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1427 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1429 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1428 | 1430 |
| 1429 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1431 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1430 "foopy1:8080;foopy2:9090"); | 1432 "foopy1:8080;foopy2:9090"); |
| 1431 resolver.pending_requests()[0]->CompleteNow(OK); | 1433 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1432 | 1434 |
| 1433 // The first proxy is still there since the configuration changed. | 1435 // The first proxy is still there since the configuration changed. |
| 1434 EXPECT_EQ(OK, callback2.WaitForResult()); | 1436 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 1435 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1437 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1436 | 1438 |
| 1437 // We fake another error. It should now ignore the first one. | 1439 // We fake another error. It should now ignore the first one. |
| 1438 TestCompletionCallback callback3; | 1440 TestCompletionCallback callback3; |
| 1439 rv = service.ReconsiderProxyAfterError( | 1441 rv = service.ReconsiderProxyAfterError( |
| 1440 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 1442 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 1441 callback3.callback(), NULL, NULL, BoundNetLog()); | 1443 callback3.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1442 EXPECT_EQ(OK, rv); | 1444 EXPECT_EQ(OK, rv); |
| 1443 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 1445 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 1444 | 1446 |
| 1445 // We simulate a new configuration. | 1447 // We simulate a new configuration. |
| 1446 config_service->SetConfig( | 1448 config_service->SetConfig( |
| 1447 ProxyConfig::CreateFromCustomPacURL( | 1449 ProxyConfig::CreateFromCustomPacURL( |
| 1448 GURL("http://foopy-new2/proxy.pac"))); | 1450 GURL("http://foopy-new2/proxy.pac"))); |
| 1449 | 1451 |
| 1450 // We fake another error. It should go back to the first proxy. | 1452 // We fake another error. It should go back to the first proxy. |
| 1451 TestCompletionCallback callback4; | 1453 TestCompletionCallback callback4; |
| 1452 rv = service.ReconsiderProxyAfterError( | 1454 rv = service.ReconsiderProxyAfterError( |
| 1453 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 1455 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 1454 callback4.callback(), NULL, NULL, BoundNetLog()); | 1456 callback4.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1455 EXPECT_EQ(ERR_IO_PENDING, rv); | 1457 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1456 | 1458 |
| 1457 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), | 1459 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), |
| 1458 factory->pending_requests()[0]->script_data()->url()); | 1460 factory->pending_requests()[0]->script_data()->url()); |
| 1459 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 1461 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1460 | 1462 |
| 1461 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1463 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1462 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1464 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1463 | 1465 |
| 1464 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1466 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 1477 // Test proxy failover when the configuration is bad. | 1479 // Test proxy failover when the configuration is bad. |
| 1478 | 1480 |
| 1479 MockProxyConfigService* config_service = | 1481 MockProxyConfigService* config_service = |
| 1480 new MockProxyConfigService("http://foopy/proxy.pac"); | 1482 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1481 | 1483 |
| 1482 MockAsyncProxyResolver resolver; | 1484 MockAsyncProxyResolver resolver; |
| 1483 MockAsyncProxyResolverFactory* factory = | 1485 MockAsyncProxyResolverFactory* factory = |
| 1484 new MockAsyncProxyResolverFactory(false); | 1486 new MockAsyncProxyResolverFactory(false); |
| 1485 | 1487 |
| 1486 ProxyService service(make_scoped_ptr(config_service), | 1488 ProxyService service(make_scoped_ptr(config_service), |
| 1487 make_scoped_ptr(factory), NULL); | 1489 make_scoped_ptr(factory), nullptr); |
| 1488 | 1490 |
| 1489 GURL url("http://www.google.com/"); | 1491 GURL url("http://www.google.com/"); |
| 1490 | 1492 |
| 1491 // Get the proxy information. | 1493 // Get the proxy information. |
| 1492 ProxyInfo info; | 1494 ProxyInfo info; |
| 1493 TestCompletionCallback callback1; | 1495 TestCompletionCallback callback1; |
| 1494 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), | 1496 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| 1495 NULL, NULL, BoundNetLog()); | 1497 nullptr, nullptr, "", BoundNetLog()); |
| 1496 EXPECT_EQ(ERR_IO_PENDING, rv); | 1498 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1497 | 1499 |
| 1498 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1500 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1499 factory->pending_requests()[0]->script_data()->url()); | 1501 factory->pending_requests()[0]->script_data()->url()); |
| 1500 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 1502 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1501 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1503 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1502 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1504 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1503 | 1505 |
| 1504 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1506 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1505 "foopy1:8080;foopy2:9090"); | 1507 "foopy1:8080;foopy2:9090"); |
| 1506 resolver.pending_requests()[0]->CompleteNow(OK); | 1508 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1507 | 1509 |
| 1508 // The first item is valid. | 1510 // The first item is valid. |
| 1509 EXPECT_EQ(OK, callback1.WaitForResult()); | 1511 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1510 EXPECT_FALSE(info.is_direct()); | 1512 EXPECT_FALSE(info.is_direct()); |
| 1511 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1513 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1512 | 1514 |
| 1513 // Fake a proxy error. | 1515 // Fake a proxy error. |
| 1514 TestCompletionCallback callback2; | 1516 TestCompletionCallback callback2; |
| 1515 rv = service.ReconsiderProxyAfterError( | 1517 rv = service.ReconsiderProxyAfterError( |
| 1516 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 1518 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 1517 callback2.callback(), NULL, NULL, BoundNetLog()); | 1519 callback2.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1518 EXPECT_EQ(OK, rv); | 1520 EXPECT_EQ(OK, rv); |
| 1519 | 1521 |
| 1520 // The first proxy is ignored, and the second one is selected. | 1522 // The first proxy is ignored, and the second one is selected. |
| 1521 EXPECT_FALSE(info.is_direct()); | 1523 EXPECT_FALSE(info.is_direct()); |
| 1522 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 1524 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 1523 | 1525 |
| 1524 // Fake a PAC failure. | 1526 // Fake a PAC failure. |
| 1525 ProxyInfo info2; | 1527 ProxyInfo info2; |
| 1526 TestCompletionCallback callback3; | 1528 TestCompletionCallback callback3; |
| 1527 rv = service.ResolveProxy(url, LOAD_NORMAL, &info2, callback3.callback(), | 1529 rv = service.ResolveProxy(url, LOAD_NORMAL, &info2, callback3.callback(), |
| 1528 NULL, NULL, BoundNetLog()); | 1530 nullptr, nullptr, "", BoundNetLog()); |
| 1529 EXPECT_EQ(ERR_IO_PENDING, rv); | 1531 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1530 | 1532 |
| 1531 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1533 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1532 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1534 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1533 | 1535 |
| 1534 // This simulates a javascript runtime error in the PAC script. | 1536 // This simulates a javascript runtime error in the PAC script. |
| 1535 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); | 1537 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); |
| 1536 | 1538 |
| 1537 // Although the resolver failed, the ProxyService will implicitly fall-back | 1539 // Although the resolver failed, the ProxyService will implicitly fall-back |
| 1538 // to a DIRECT connection. | 1540 // to a DIRECT connection. |
| 1539 EXPECT_EQ(OK, callback3.WaitForResult()); | 1541 EXPECT_EQ(OK, callback3.WaitForResult()); |
| 1540 EXPECT_TRUE(info2.is_direct()); | 1542 EXPECT_TRUE(info2.is_direct()); |
| 1541 EXPECT_FALSE(info2.is_empty()); | 1543 EXPECT_FALSE(info2.is_empty()); |
| 1542 | 1544 |
| 1543 // The PAC script will work properly next time and successfully return a | 1545 // The PAC script will work properly next time and successfully return a |
| 1544 // proxy list. Since we have not marked the configuration as bad, it should | 1546 // proxy list. Since we have not marked the configuration as bad, it should |
| 1545 // "just work" the next time we call it. | 1547 // "just work" the next time we call it. |
| 1546 ProxyInfo info3; | 1548 ProxyInfo info3; |
| 1547 TestCompletionCallback callback4; | 1549 TestCompletionCallback callback4; |
| 1548 rv = service.ReconsiderProxyAfterError( | 1550 rv = service.ReconsiderProxyAfterError( |
| 1549 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, | 1551 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, |
| 1550 callback4.callback(), NULL, NULL, BoundNetLog()); | 1552 callback4.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1551 EXPECT_EQ(ERR_IO_PENDING, rv); | 1553 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1552 | 1554 |
| 1553 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1555 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1554 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1556 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1555 | 1557 |
| 1556 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1558 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1557 "foopy1:8080;foopy2:9090"); | 1559 "foopy1:8080;foopy2:9090"); |
| 1558 resolver.pending_requests()[0]->CompleteNow(OK); | 1560 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1559 | 1561 |
| 1560 // The first proxy is not there since the it was added to the bad proxies | 1562 // The first proxy is not there since the it was added to the bad proxies |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 1575 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); | 1577 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); |
| 1576 | 1578 |
| 1577 config.set_pac_mandatory(true); | 1579 config.set_pac_mandatory(true); |
| 1578 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 1580 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 1579 | 1581 |
| 1580 MockAsyncProxyResolver resolver; | 1582 MockAsyncProxyResolver resolver; |
| 1581 MockAsyncProxyResolverFactory* factory = | 1583 MockAsyncProxyResolverFactory* factory = |
| 1582 new MockAsyncProxyResolverFactory(false); | 1584 new MockAsyncProxyResolverFactory(false); |
| 1583 | 1585 |
| 1584 ProxyService service(make_scoped_ptr(config_service), | 1586 ProxyService service(make_scoped_ptr(config_service), |
| 1585 make_scoped_ptr(factory), NULL); | 1587 make_scoped_ptr(factory), nullptr); |
| 1586 | 1588 |
| 1587 GURL url("http://www.google.com/"); | 1589 GURL url("http://www.google.com/"); |
| 1588 | 1590 |
| 1589 // Get the proxy information. | 1591 // Get the proxy information. |
| 1590 ProxyInfo info; | 1592 ProxyInfo info; |
| 1591 TestCompletionCallback callback1; | 1593 TestCompletionCallback callback1; |
| 1592 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), | 1594 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), |
| 1593 NULL, NULL, BoundNetLog()); | 1595 nullptr, nullptr, "", BoundNetLog()); |
| 1594 EXPECT_EQ(ERR_IO_PENDING, rv); | 1596 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1595 | 1597 |
| 1596 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1598 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1597 factory->pending_requests()[0]->script_data()->url()); | 1599 factory->pending_requests()[0]->script_data()->url()); |
| 1598 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 1600 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1599 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1601 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1600 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1602 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1601 | 1603 |
| 1602 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1604 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1603 "foopy1:8080;foopy2:9090"); | 1605 "foopy1:8080;foopy2:9090"); |
| 1604 resolver.pending_requests()[0]->CompleteNow(OK); | 1606 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1605 | 1607 |
| 1606 // The first item is valid. | 1608 // The first item is valid. |
| 1607 EXPECT_EQ(OK, callback1.WaitForResult()); | 1609 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 1608 EXPECT_FALSE(info.is_direct()); | 1610 EXPECT_FALSE(info.is_direct()); |
| 1609 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1611 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1610 | 1612 |
| 1611 // Fake a proxy error. | 1613 // Fake a proxy error. |
| 1612 TestCompletionCallback callback2; | 1614 TestCompletionCallback callback2; |
| 1613 rv = service.ReconsiderProxyAfterError( | 1615 rv = service.ReconsiderProxyAfterError( |
| 1614 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, | 1616 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, |
| 1615 callback2.callback(), NULL, NULL, BoundNetLog()); | 1617 callback2.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1616 EXPECT_EQ(OK, rv); | 1618 EXPECT_EQ(OK, rv); |
| 1617 | 1619 |
| 1618 // The first proxy is ignored, and the second one is selected. | 1620 // The first proxy is ignored, and the second one is selected. |
| 1619 EXPECT_FALSE(info.is_direct()); | 1621 EXPECT_FALSE(info.is_direct()); |
| 1620 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); | 1622 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); |
| 1621 | 1623 |
| 1622 // Fake a PAC failure. | 1624 // Fake a PAC failure. |
| 1623 ProxyInfo info2; | 1625 ProxyInfo info2; |
| 1624 TestCompletionCallback callback3; | 1626 TestCompletionCallback callback3; |
| 1625 rv = service.ResolveProxy(url, LOAD_NORMAL, &info2, callback3.callback(), | 1627 rv = service.ResolveProxy(url, LOAD_NORMAL, &info2, callback3.callback(), |
| 1626 NULL, NULL, BoundNetLog()); | 1628 nullptr, nullptr, "", BoundNetLog()); |
| 1627 EXPECT_EQ(ERR_IO_PENDING, rv); | 1629 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1628 | 1630 |
| 1629 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1631 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1630 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1632 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1631 | 1633 |
| 1632 // This simulates a javascript runtime error in the PAC script. | 1634 // This simulates a javascript runtime error in the PAC script. |
| 1633 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); | 1635 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); |
| 1634 | 1636 |
| 1635 // Although the resolver failed, the ProxyService will NOT fall-back | 1637 // Although the resolver failed, the ProxyService will NOT fall-back |
| 1636 // to a DIRECT connection as it is configured as mandatory. | 1638 // to a DIRECT connection as it is configured as mandatory. |
| 1637 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, | 1639 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, |
| 1638 callback3.WaitForResult()); | 1640 callback3.WaitForResult()); |
| 1639 EXPECT_FALSE(info2.is_direct()); | 1641 EXPECT_FALSE(info2.is_direct()); |
| 1640 EXPECT_TRUE(info2.is_empty()); | 1642 EXPECT_TRUE(info2.is_empty()); |
| 1641 | 1643 |
| 1642 // The PAC script will work properly next time and successfully return a | 1644 // The PAC script will work properly next time and successfully return a |
| 1643 // proxy list. Since we have not marked the configuration as bad, it should | 1645 // proxy list. Since we have not marked the configuration as bad, it should |
| 1644 // "just work" the next time we call it. | 1646 // "just work" the next time we call it. |
| 1645 ProxyInfo info3; | 1647 ProxyInfo info3; |
| 1646 TestCompletionCallback callback4; | 1648 TestCompletionCallback callback4; |
| 1647 rv = service.ReconsiderProxyAfterError( | 1649 rv = service.ReconsiderProxyAfterError( |
| 1648 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, | 1650 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, |
| 1649 callback4.callback(), NULL, NULL, BoundNetLog()); | 1651 callback4.callback(), nullptr, nullptr, "", BoundNetLog()); |
| 1650 EXPECT_EQ(ERR_IO_PENDING, rv); | 1652 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1651 | 1653 |
| 1652 ASSERT_EQ(1u, resolver.pending_requests().size()); | 1654 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 1653 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); | 1655 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); |
| 1654 | 1656 |
| 1655 resolver.pending_requests()[0]->results()->UseNamedProxy( | 1657 resolver.pending_requests()[0]->results()->UseNamedProxy( |
| 1656 "foopy1:8080;foopy2:9090"); | 1658 "foopy1:8080;foopy2:9090"); |
| 1657 resolver.pending_requests()[0]->CompleteNow(OK); | 1659 resolver.pending_requests()[0]->CompleteNow(OK); |
| 1658 | 1660 |
| 1659 // The first proxy is not there since the it was added to the bad proxies | 1661 // The first proxy is not there since the it was added to the bad proxies |
| 1660 // list by the earlier ReconsiderProxyAfterError(). | 1662 // list by the earlier ReconsiderProxyAfterError(). |
| 1661 EXPECT_EQ(OK, callback4.WaitForResult()); | 1663 EXPECT_EQ(OK, callback4.WaitForResult()); |
| 1662 EXPECT_FALSE(info3.is_direct()); | 1664 EXPECT_FALSE(info3.is_direct()); |
| 1663 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI()); | 1665 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI()); |
| 1664 } | 1666 } |
| 1665 | 1667 |
| 1666 TEST_F(ProxyServiceTest, ProxyBypassList) { | 1668 TEST_F(ProxyServiceTest, ProxyBypassList) { |
| 1667 // Test that the proxy bypass rules are consulted. | 1669 // Test that the proxy bypass rules are consulted. |
| 1668 | 1670 |
| 1669 TestCompletionCallback callback[2]; | 1671 TestCompletionCallback callback[2]; |
| 1670 ProxyInfo info[2]; | 1672 ProxyInfo info[2]; |
| 1671 ProxyConfig config; | 1673 ProxyConfig config; |
| 1672 config.proxy_rules().ParseFromString("foopy1:8080;foopy2:9090"); | 1674 config.proxy_rules().ParseFromString("foopy1:8080;foopy2:9090"); |
| 1673 config.set_auto_detect(false); | 1675 config.set_auto_detect(false); |
| 1674 config.proxy_rules().bypass_rules.ParseFromString("*.org"); | 1676 config.proxy_rules().bypass_rules.ParseFromString("*.org"); |
| 1675 | 1677 |
| 1676 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 1678 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 1677 nullptr, NULL); | 1679 nullptr, nullptr); |
| 1678 | 1680 |
| 1679 int rv; | 1681 int rv; |
| 1680 GURL url1("http://www.webkit.org"); | 1682 GURL url1("http://www.webkit.org"); |
| 1681 GURL url2("http://www.webkit.com"); | 1683 GURL url2("http://www.webkit.com"); |
| 1682 | 1684 |
| 1683 // Request for a .org domain should bypass proxy. | 1685 // Request for a .org domain should bypass proxy. |
| 1684 rv = service.ResolveProxy(url1, LOAD_NORMAL, &info[0], callback[0].callback(), | 1686 rv = service.ResolveProxy(url1, LOAD_NORMAL, &info[0], callback[0].callback(), |
| 1685 NULL, NULL, BoundNetLog()); | 1687 nullptr, nullptr, "", BoundNetLog()); |
| 1686 EXPECT_EQ(OK, rv); | 1688 EXPECT_EQ(OK, rv); |
| 1687 EXPECT_TRUE(info[0].is_direct()); | 1689 EXPECT_TRUE(info[0].is_direct()); |
| 1688 | 1690 |
| 1689 // Request for a .com domain hits the proxy. | 1691 // Request for a .com domain hits the proxy. |
| 1690 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info[1], callback[1].callback(), | 1692 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info[1], callback[1].callback(), |
| 1691 NULL, NULL, BoundNetLog()); | 1693 nullptr, nullptr, "", BoundNetLog()); |
| 1692 EXPECT_EQ(OK, rv); | 1694 EXPECT_EQ(OK, rv); |
| 1693 EXPECT_EQ("foopy1:8080", info[1].proxy_server().ToURI()); | 1695 EXPECT_EQ("foopy1:8080", info[1].proxy_server().ToURI()); |
| 1694 } | 1696 } |
| 1695 | 1697 |
| 1696 TEST_F(ProxyServiceTest, MarkProxiesAsBadTests) { | 1698 TEST_F(ProxyServiceTest, MarkProxiesAsBadTests) { |
| 1697 ProxyConfig config; | 1699 ProxyConfig config; |
| 1698 config.proxy_rules().ParseFromString( | 1700 config.proxy_rules().ParseFromString( |
| 1699 "http=foopy1:8080;http=foopy2:8080;http=foopy3.8080;http=foopy4:8080"); | 1701 "http=foopy1:8080;http=foopy2:8080;http=foopy3.8080;http=foopy4:8080"); |
| 1700 config.set_auto_detect(false); | 1702 config.set_auto_detect(false); |
| 1701 | 1703 |
| 1702 ProxyList proxy_list; | 1704 ProxyList proxy_list; |
| 1703 std::vector<ProxyServer> additional_bad_proxies; | 1705 std::vector<ProxyServer> additional_bad_proxies; |
| 1704 for (const ProxyServer& proxy_server : | 1706 for (const ProxyServer& proxy_server : |
| 1705 config.proxy_rules().proxies_for_http.GetAll()) { | 1707 config.proxy_rules().proxies_for_http.GetAll()) { |
| 1706 proxy_list.AddProxyServer(proxy_server); | 1708 proxy_list.AddProxyServer(proxy_server); |
| 1707 if (proxy_server == config.proxy_rules().proxies_for_http.Get()) | 1709 if (proxy_server == config.proxy_rules().proxies_for_http.Get()) |
| 1708 continue; | 1710 continue; |
| 1709 | 1711 |
| 1710 additional_bad_proxies.push_back(proxy_server); | 1712 additional_bad_proxies.push_back(proxy_server); |
| 1711 } | 1713 } |
| 1712 | 1714 |
| 1713 EXPECT_EQ(3u, additional_bad_proxies.size()); | 1715 EXPECT_EQ(3u, additional_bad_proxies.size()); |
| 1714 | 1716 |
| 1715 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 1717 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 1716 nullptr, NULL); | 1718 nullptr, nullptr); |
| 1717 ProxyInfo proxy_info; | 1719 ProxyInfo proxy_info; |
| 1718 proxy_info.UseProxyList(proxy_list); | 1720 proxy_info.UseProxyList(proxy_list); |
| 1719 const ProxyRetryInfoMap& retry_info = service.proxy_retry_info(); | 1721 const ProxyRetryInfoMap& retry_info = service.proxy_retry_info(); |
| 1720 service.MarkProxiesAsBadUntil(proxy_info, base::TimeDelta::FromSeconds(1), | 1722 service.MarkProxiesAsBadUntil(proxy_info, base::TimeDelta::FromSeconds(1), |
| 1721 additional_bad_proxies, BoundNetLog()); | 1723 additional_bad_proxies, BoundNetLog()); |
| 1722 ASSERT_EQ(4u, retry_info.size()); | 1724 ASSERT_EQ(4u, retry_info.size()); |
| 1723 for (const ProxyServer& proxy_server : | 1725 for (const ProxyServer& proxy_server : |
| 1724 config.proxy_rules().proxies_for_http.GetAll()) { | 1726 config.proxy_rules().proxies_for_http.GetAll()) { |
| 1725 ProxyRetryInfoMap::const_iterator i = | 1727 ProxyRetryInfoMap::const_iterator i = |
| 1726 retry_info.find(proxy_server.host_port_pair().ToString()); | 1728 retry_info.find(proxy_server.host_port_pair().ToString()); |
| 1727 ASSERT_TRUE(i != retry_info.end()); | 1729 ASSERT_TRUE(i != retry_info.end()); |
| 1728 } | 1730 } |
| 1729 } | 1731 } |
| 1730 | 1732 |
| 1731 TEST_F(ProxyServiceTest, PerProtocolProxyTests) { | 1733 TEST_F(ProxyServiceTest, PerProtocolProxyTests) { |
| 1732 ProxyConfig config; | 1734 ProxyConfig config; |
| 1733 config.proxy_rules().ParseFromString("http=foopy1:8080;https=foopy2:8080"); | 1735 config.proxy_rules().ParseFromString("http=foopy1:8080;https=foopy2:8080"); |
| 1734 config.set_auto_detect(false); | 1736 config.set_auto_detect(false); |
| 1735 { | 1737 { |
| 1736 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 1738 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 1737 nullptr, NULL); | 1739 nullptr, nullptr); |
| 1738 GURL test_url("http://www.msn.com"); | 1740 GURL test_url("http://www.msn.com"); |
| 1739 ProxyInfo info; | 1741 ProxyInfo info; |
| 1740 TestCompletionCallback callback; | 1742 TestCompletionCallback callback; |
| 1741 int rv = | 1743 int rv = |
| 1742 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), | 1744 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| 1743 NULL, NULL, BoundNetLog()); | 1745 nullptr, nullptr, "", BoundNetLog()); |
| 1744 EXPECT_EQ(OK, rv); | 1746 EXPECT_EQ(OK, rv); |
| 1745 EXPECT_FALSE(info.is_direct()); | 1747 EXPECT_FALSE(info.is_direct()); |
| 1746 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1748 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1747 } | 1749 } |
| 1748 { | 1750 { |
| 1749 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 1751 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 1750 nullptr, NULL); | 1752 nullptr, nullptr); |
| 1751 GURL test_url("ftp://ftp.google.com"); | 1753 GURL test_url("ftp://ftp.google.com"); |
| 1752 ProxyInfo info; | 1754 ProxyInfo info; |
| 1753 TestCompletionCallback callback; | 1755 TestCompletionCallback callback; |
| 1754 int rv = | 1756 int rv = |
| 1755 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), | 1757 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| 1756 NULL, NULL, BoundNetLog()); | 1758 nullptr, nullptr, "", BoundNetLog()); |
| 1757 EXPECT_EQ(OK, rv); | 1759 EXPECT_EQ(OK, rv); |
| 1758 EXPECT_TRUE(info.is_direct()); | 1760 EXPECT_TRUE(info.is_direct()); |
| 1759 EXPECT_EQ("direct://", info.proxy_server().ToURI()); | 1761 EXPECT_EQ("direct://", info.proxy_server().ToURI()); |
| 1760 } | 1762 } |
| 1761 { | 1763 { |
| 1762 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 1764 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 1763 nullptr, NULL); | 1765 nullptr, nullptr); |
| 1764 GURL test_url("https://webbranch.techcu.com"); | 1766 GURL test_url("https://webbranch.techcu.com"); |
| 1765 ProxyInfo info; | 1767 ProxyInfo info; |
| 1766 TestCompletionCallback callback; | 1768 TestCompletionCallback callback; |
| 1767 int rv = | 1769 int rv = |
| 1768 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), | 1770 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| 1769 NULL, NULL, BoundNetLog()); | 1771 nullptr, nullptr, "", BoundNetLog()); |
| 1770 EXPECT_EQ(OK, rv); | 1772 EXPECT_EQ(OK, rv); |
| 1771 EXPECT_FALSE(info.is_direct()); | 1773 EXPECT_FALSE(info.is_direct()); |
| 1772 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); | 1774 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); |
| 1773 } | 1775 } |
| 1774 { | 1776 { |
| 1775 config.proxy_rules().ParseFromString("foopy1:8080"); | 1777 config.proxy_rules().ParseFromString("foopy1:8080"); |
| 1776 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 1778 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 1777 nullptr, NULL); | 1779 nullptr, nullptr); |
| 1778 GURL test_url("http://www.microsoft.com"); | 1780 GURL test_url("http://www.microsoft.com"); |
| 1779 ProxyInfo info; | 1781 ProxyInfo info; |
| 1780 TestCompletionCallback callback; | 1782 TestCompletionCallback callback; |
| 1781 int rv = | 1783 int rv = |
| 1782 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), | 1784 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| 1783 NULL, NULL, BoundNetLog()); | 1785 nullptr, nullptr, "", BoundNetLog()); |
| 1784 EXPECT_EQ(OK, rv); | 1786 EXPECT_EQ(OK, rv); |
| 1785 EXPECT_FALSE(info.is_direct()); | 1787 EXPECT_FALSE(info.is_direct()); |
| 1786 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1788 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1787 } | 1789 } |
| 1788 } | 1790 } |
| 1789 | 1791 |
| 1790 TEST_F(ProxyServiceTest, ProxyConfigSourcePropagates) { | 1792 TEST_F(ProxyServiceTest, ProxyConfigSourcePropagates) { |
| 1791 // Test that the proxy config source is set correctly when resolving proxies | 1793 // Test that the proxy config source is set correctly when resolving proxies |
| 1792 // using manual proxy rules. Namely, the config source should only be set if | 1794 // using manual proxy rules. Namely, the config source should only be set if |
| 1793 // any of the rules were applied. | 1795 // any of the rules were applied. |
| 1794 { | 1796 { |
| 1795 ProxyConfig config; | 1797 ProxyConfig config; |
| 1796 config.set_source(PROXY_CONFIG_SOURCE_TEST); | 1798 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| 1797 config.proxy_rules().ParseFromString("https=foopy2:8080"); | 1799 config.proxy_rules().ParseFromString("https=foopy2:8080"); |
| 1798 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 1800 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 1799 nullptr, NULL); | 1801 nullptr, nullptr); |
| 1800 GURL test_url("http://www.google.com"); | 1802 GURL test_url("http://www.google.com"); |
| 1801 ProxyInfo info; | 1803 ProxyInfo info; |
| 1802 TestCompletionCallback callback; | 1804 TestCompletionCallback callback; |
| 1803 int rv = | 1805 int rv = |
| 1804 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), | 1806 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| 1805 NULL, NULL, BoundNetLog()); | 1807 nullptr, nullptr, "", BoundNetLog()); |
| 1806 ASSERT_EQ(OK, rv); | 1808 ASSERT_EQ(OK, rv); |
| 1807 // Should be SOURCE_TEST, even if there are no HTTP proxies configured. | 1809 // Should be SOURCE_TEST, even if there are no HTTP proxies configured. |
| 1808 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); | 1810 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| 1809 } | 1811 } |
| 1810 { | 1812 { |
| 1811 ProxyConfig config; | 1813 ProxyConfig config; |
| 1812 config.set_source(PROXY_CONFIG_SOURCE_TEST); | 1814 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| 1813 config.proxy_rules().ParseFromString("https=foopy2:8080"); | 1815 config.proxy_rules().ParseFromString("https=foopy2:8080"); |
| 1814 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 1816 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 1815 nullptr, NULL); | 1817 nullptr, nullptr); |
| 1816 GURL test_url("https://www.google.com"); | 1818 GURL test_url("https://www.google.com"); |
| 1817 ProxyInfo info; | 1819 ProxyInfo info; |
| 1818 TestCompletionCallback callback; | 1820 TestCompletionCallback callback; |
| 1819 int rv = | 1821 int rv = |
| 1820 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), | 1822 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| 1821 NULL, NULL, BoundNetLog()); | 1823 nullptr, nullptr, "", BoundNetLog()); |
| 1822 ASSERT_EQ(OK, rv); | 1824 ASSERT_EQ(OK, rv); |
| 1823 // Used the HTTPS proxy. So source should be TEST. | 1825 // Used the HTTPS proxy. So source should be TEST. |
| 1824 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); | 1826 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| 1825 } | 1827 } |
| 1826 { | 1828 { |
| 1827 ProxyConfig config; | 1829 ProxyConfig config; |
| 1828 config.set_source(PROXY_CONFIG_SOURCE_TEST); | 1830 config.set_source(PROXY_CONFIG_SOURCE_TEST); |
| 1829 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 1831 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 1830 nullptr, NULL); | 1832 nullptr, nullptr); |
| 1831 GURL test_url("http://www.google.com"); | 1833 GURL test_url("http://www.google.com"); |
| 1832 ProxyInfo info; | 1834 ProxyInfo info; |
| 1833 TestCompletionCallback callback; | 1835 TestCompletionCallback callback; |
| 1834 int rv = | 1836 int rv = |
| 1835 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), | 1837 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| 1836 NULL, NULL, BoundNetLog()); | 1838 nullptr, nullptr, "", BoundNetLog()); |
| 1837 ASSERT_EQ(OK, rv); | 1839 ASSERT_EQ(OK, rv); |
| 1838 // ProxyConfig is empty. Source should still be TEST. | 1840 // ProxyConfig is empty. Source should still be TEST. |
| 1839 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); | 1841 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); |
| 1840 } | 1842 } |
| 1841 } | 1843 } |
| 1842 | 1844 |
| 1843 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries | 1845 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries |
| 1844 // fall back to the SOCKS proxy. | 1846 // fall back to the SOCKS proxy. |
| 1845 TEST_F(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { | 1847 TEST_F(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { |
| 1846 ProxyConfig config; | 1848 ProxyConfig config; |
| 1847 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); | 1849 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); |
| 1848 config.set_auto_detect(false); | 1850 config.set_auto_detect(false); |
| 1849 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, | 1851 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, |
| 1850 config.proxy_rules().type); | 1852 config.proxy_rules().type); |
| 1851 | 1853 |
| 1852 { | 1854 { |
| 1853 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 1855 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 1854 nullptr, NULL); | 1856 nullptr, nullptr); |
| 1855 GURL test_url("http://www.msn.com"); | 1857 GURL test_url("http://www.msn.com"); |
| 1856 ProxyInfo info; | 1858 ProxyInfo info; |
| 1857 TestCompletionCallback callback; | 1859 TestCompletionCallback callback; |
| 1858 int rv = | 1860 int rv = |
| 1859 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), | 1861 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| 1860 NULL, NULL, BoundNetLog()); | 1862 nullptr, nullptr, "", BoundNetLog()); |
| 1861 EXPECT_EQ(OK, rv); | 1863 EXPECT_EQ(OK, rv); |
| 1862 EXPECT_FALSE(info.is_direct()); | 1864 EXPECT_FALSE(info.is_direct()); |
| 1863 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 1865 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 1864 } | 1866 } |
| 1865 { | 1867 { |
| 1866 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 1868 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 1867 nullptr, NULL); | 1869 nullptr, nullptr); |
| 1868 GURL test_url("ftp://ftp.google.com"); | 1870 GURL test_url("ftp://ftp.google.com"); |
| 1869 ProxyInfo info; | 1871 ProxyInfo info; |
| 1870 TestCompletionCallback callback; | 1872 TestCompletionCallback callback; |
| 1871 int rv = | 1873 int rv = |
| 1872 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), | 1874 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| 1873 NULL, NULL, BoundNetLog()); | 1875 nullptr, nullptr, "", BoundNetLog()); |
| 1874 EXPECT_EQ(OK, rv); | 1876 EXPECT_EQ(OK, rv); |
| 1875 EXPECT_FALSE(info.is_direct()); | 1877 EXPECT_FALSE(info.is_direct()); |
| 1876 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); | 1878 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
| 1877 } | 1879 } |
| 1878 { | 1880 { |
| 1879 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 1881 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 1880 nullptr, NULL); | 1882 nullptr, nullptr); |
| 1881 GURL test_url("https://webbranch.techcu.com"); | 1883 GURL test_url("https://webbranch.techcu.com"); |
| 1882 ProxyInfo info; | 1884 ProxyInfo info; |
| 1883 TestCompletionCallback callback; | 1885 TestCompletionCallback callback; |
| 1884 int rv = | 1886 int rv = |
| 1885 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), | 1887 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| 1886 NULL, NULL, BoundNetLog()); | 1888 nullptr, nullptr, "", BoundNetLog()); |
| 1887 EXPECT_EQ(OK, rv); | 1889 EXPECT_EQ(OK, rv); |
| 1888 EXPECT_FALSE(info.is_direct()); | 1890 EXPECT_FALSE(info.is_direct()); |
| 1889 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); | 1891 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
| 1890 } | 1892 } |
| 1891 { | 1893 { |
| 1892 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 1894 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 1893 nullptr, NULL); | 1895 nullptr, nullptr); |
| 1894 GURL test_url("unknown://www.microsoft.com"); | 1896 GURL test_url("unknown://www.microsoft.com"); |
| 1895 ProxyInfo info; | 1897 ProxyInfo info; |
| 1896 TestCompletionCallback callback; | 1898 TestCompletionCallback callback; |
| 1897 int rv = | 1899 int rv = |
| 1898 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), | 1900 service.ResolveProxy(test_url, LOAD_NORMAL, &info, callback.callback(), |
| 1899 NULL, NULL, BoundNetLog()); | 1901 nullptr, nullptr, "", BoundNetLog()); |
| 1900 EXPECT_EQ(OK, rv); | 1902 EXPECT_EQ(OK, rv); |
| 1901 EXPECT_FALSE(info.is_direct()); | 1903 EXPECT_FALSE(info.is_direct()); |
| 1902 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); | 1904 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); |
| 1903 } | 1905 } |
| 1904 } | 1906 } |
| 1905 | 1907 |
| 1906 // Test cancellation of an in-progress request. | 1908 // Test cancellation of an in-progress request. |
| 1907 TEST_F(ProxyServiceTest, CancelInProgressRequest) { | 1909 TEST_F(ProxyServiceTest, CancelInProgressRequest) { |
| 1908 const GURL url1("http://request1"); | 1910 const GURL url1("http://request1"); |
| 1909 const GURL url2("http://request2"); | 1911 const GURL url2("http://request2"); |
| 1910 const GURL url3("http://request3"); | 1912 const GURL url3("http://request3"); |
| 1911 MockProxyConfigService* config_service = | 1913 MockProxyConfigService* config_service = |
| 1912 new MockProxyConfigService("http://foopy/proxy.pac"); | 1914 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1913 | 1915 |
| 1914 MockAsyncProxyResolver resolver; | 1916 MockAsyncProxyResolver resolver; |
| 1915 MockAsyncProxyResolverFactory* factory = | 1917 MockAsyncProxyResolverFactory* factory = |
| 1916 new MockAsyncProxyResolverFactory(false); | 1918 new MockAsyncProxyResolverFactory(false); |
| 1917 | 1919 |
| 1918 ProxyService service(make_scoped_ptr(config_service), | 1920 ProxyService service(make_scoped_ptr(config_service), |
| 1919 make_scoped_ptr(factory), NULL); | 1921 make_scoped_ptr(factory), nullptr); |
| 1920 | 1922 |
| 1921 // Start 3 requests. | 1923 // Start 3 requests. |
| 1922 | 1924 |
| 1923 ProxyInfo info1; | 1925 ProxyInfo info1; |
| 1924 TestCompletionCallback callback1; | 1926 TestCompletionCallback callback1; |
| 1925 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), | 1927 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), |
| 1926 NULL, NULL, BoundNetLog()); | 1928 nullptr, nullptr, "", BoundNetLog()); |
| 1927 EXPECT_EQ(ERR_IO_PENDING, rv); | 1929 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1928 | 1930 |
| 1929 // Successfully initialize the PAC script. | 1931 // Successfully initialize the PAC script. |
| 1930 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 1932 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 1931 factory->pending_requests()[0]->script_data()->url()); | 1933 factory->pending_requests()[0]->script_data()->url()); |
| 1932 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 1934 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 1933 | 1935 |
| 1934 GetPendingRequestsForURLs(resolver, url1); | 1936 GetPendingRequestsForURLs(resolver, url1); |
| 1935 | 1937 |
| 1936 ProxyInfo info2; | 1938 ProxyInfo info2; |
| 1937 TestCompletionCallback callback2; | 1939 TestCompletionCallback callback2; |
| 1938 ProxyService::PacRequest* request2; | 1940 ProxyService::PacRequest* request2; |
| 1939 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), | 1941 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), |
| 1940 &request2, NULL, BoundNetLog()); | 1942 &request2, nullptr, "", BoundNetLog()); |
| 1941 EXPECT_EQ(ERR_IO_PENDING, rv); | 1943 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1942 | 1944 |
| 1943 GetPendingRequestsForURLs(resolver, url1, url2); | 1945 GetPendingRequestsForURLs(resolver, url1, url2); |
| 1944 | 1946 |
| 1945 ProxyInfo info3; | 1947 ProxyInfo info3; |
| 1946 TestCompletionCallback callback3; | 1948 TestCompletionCallback callback3; |
| 1947 rv = service.ResolveProxy(url3, LOAD_NORMAL, &info3, callback3.callback(), | 1949 rv = service.ResolveProxy(url3, LOAD_NORMAL, &info3, callback3.callback(), |
| 1948 NULL, NULL, BoundNetLog()); | 1950 nullptr, nullptr, "", BoundNetLog()); |
| 1949 EXPECT_EQ(ERR_IO_PENDING, rv); | 1951 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1950 GetPendingRequestsForURLs(resolver, url1, url2, url3); | 1952 GetPendingRequestsForURLs(resolver, url1, url2, url3); |
| 1951 | 1953 |
| 1952 // Cancel the second request | 1954 // Cancel the second request |
| 1953 service.CancelPacRequest(request2); | 1955 service.CancelPacRequest(request2); |
| 1954 | 1956 |
| 1955 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url3); | 1957 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url3); |
| 1956 | 1958 |
| 1957 // Complete the two un-cancelled requests. | 1959 // Complete the two un-cancelled requests. |
| 1958 // We complete the last one first, just to mix it up a bit. | 1960 // We complete the last one first, just to mix it up a bit. |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 1979 const GURL url2("http://request2"); | 1981 const GURL url2("http://request2"); |
| 1980 const GURL url3("http://request3"); | 1982 const GURL url3("http://request3"); |
| 1981 MockProxyConfigService* config_service = | 1983 MockProxyConfigService* config_service = |
| 1982 new MockProxyConfigService("http://foopy/proxy.pac"); | 1984 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 1983 | 1985 |
| 1984 MockAsyncProxyResolver resolver; | 1986 MockAsyncProxyResolver resolver; |
| 1985 MockAsyncProxyResolverFactory* factory = | 1987 MockAsyncProxyResolverFactory* factory = |
| 1986 new MockAsyncProxyResolverFactory(true); | 1988 new MockAsyncProxyResolverFactory(true); |
| 1987 | 1989 |
| 1988 ProxyService service(make_scoped_ptr(config_service), | 1990 ProxyService service(make_scoped_ptr(config_service), |
| 1989 make_scoped_ptr(factory), NULL); | 1991 make_scoped_ptr(factory), nullptr); |
| 1990 | 1992 |
| 1991 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 1993 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 1992 service.SetProxyScriptFetchers( | 1994 service.SetProxyScriptFetchers( |
| 1993 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 1995 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 1994 | 1996 |
| 1995 // Start 3 requests. | 1997 // Start 3 requests. |
| 1996 | 1998 |
| 1997 ProxyInfo info1; | 1999 ProxyInfo info1; |
| 1998 TestCompletionCallback callback1; | 2000 TestCompletionCallback callback1; |
| 1999 ProxyService::PacRequest* request1; | 2001 ProxyService::PacRequest* request1; |
| 2000 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), | 2002 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), |
| 2001 &request1, NULL, BoundNetLog()); | 2003 &request1, nullptr, "", BoundNetLog()); |
| 2002 EXPECT_EQ(ERR_IO_PENDING, rv); | 2004 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2003 | 2005 |
| 2004 // The first request should have triggered download of PAC script. | 2006 // The first request should have triggered download of PAC script. |
| 2005 EXPECT_TRUE(fetcher->has_pending_request()); | 2007 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2006 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2008 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2007 | 2009 |
| 2008 ProxyInfo info2; | 2010 ProxyInfo info2; |
| 2009 TestCompletionCallback callback2; | 2011 TestCompletionCallback callback2; |
| 2010 ProxyService::PacRequest* request2; | 2012 ProxyService::PacRequest* request2; |
| 2011 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), | 2013 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), |
| 2012 &request2, NULL, BoundNetLog()); | 2014 &request2, nullptr, "", BoundNetLog()); |
| 2013 EXPECT_EQ(ERR_IO_PENDING, rv); | 2015 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2014 | 2016 |
| 2015 ProxyInfo info3; | 2017 ProxyInfo info3; |
| 2016 TestCompletionCallback callback3; | 2018 TestCompletionCallback callback3; |
| 2017 ProxyService::PacRequest* request3; | 2019 ProxyService::PacRequest* request3; |
| 2018 rv = service.ResolveProxy(url3, LOAD_NORMAL, &info3, callback3.callback(), | 2020 rv = service.ResolveProxy(url3, LOAD_NORMAL, &info3, callback3.callback(), |
| 2019 &request3, NULL, BoundNetLog()); | 2021 &request3, nullptr, "", BoundNetLog()); |
| 2020 EXPECT_EQ(ERR_IO_PENDING, rv); | 2022 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2021 | 2023 |
| 2022 // Nothing has been sent to the factory yet. | 2024 // Nothing has been sent to the factory yet. |
| 2023 EXPECT_TRUE(factory->pending_requests().empty()); | 2025 EXPECT_TRUE(factory->pending_requests().empty()); |
| 2024 | 2026 |
| 2025 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, | 2027 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, |
| 2026 service.GetLoadState(request1)); | 2028 service.GetLoadState(request1)); |
| 2027 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, | 2029 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, |
| 2028 service.GetLoadState(request2)); | 2030 service.GetLoadState(request2)); |
| 2029 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, | 2031 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2082 const GURL url1("http://request1"); | 2084 const GURL url1("http://request1"); |
| 2083 const GURL url2("http://request2"); | 2085 const GURL url2("http://request2"); |
| 2084 MockProxyConfigService* config_service = | 2086 MockProxyConfigService* config_service = |
| 2085 new MockProxyConfigService("http://foopy/proxy.pac"); | 2087 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 2086 | 2088 |
| 2087 MockAsyncProxyResolver resolver; | 2089 MockAsyncProxyResolver resolver; |
| 2088 MockAsyncProxyResolverFactory* factory = | 2090 MockAsyncProxyResolverFactory* factory = |
| 2089 new MockAsyncProxyResolverFactory(true); | 2091 new MockAsyncProxyResolverFactory(true); |
| 2090 | 2092 |
| 2091 ProxyService service(make_scoped_ptr(config_service), | 2093 ProxyService service(make_scoped_ptr(config_service), |
| 2092 make_scoped_ptr(factory), NULL); | 2094 make_scoped_ptr(factory), nullptr); |
| 2093 | 2095 |
| 2094 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2096 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2095 service.SetProxyScriptFetchers( | 2097 service.SetProxyScriptFetchers( |
| 2096 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 2098 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 2097 | 2099 |
| 2098 // Start 2 requests. | 2100 // Start 2 requests. |
| 2099 | 2101 |
| 2100 ProxyInfo info1; | 2102 ProxyInfo info1; |
| 2101 TestCompletionCallback callback1; | 2103 TestCompletionCallback callback1; |
| 2102 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), | 2104 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), |
| 2103 NULL, NULL, BoundNetLog()); | 2105 nullptr, nullptr, "", BoundNetLog()); |
| 2104 EXPECT_EQ(ERR_IO_PENDING, rv); | 2106 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2105 | 2107 |
| 2106 // The first request should have triggered download of PAC script. | 2108 // The first request should have triggered download of PAC script. |
| 2107 EXPECT_TRUE(fetcher->has_pending_request()); | 2109 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2108 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2110 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2109 | 2111 |
| 2110 ProxyInfo info2; | 2112 ProxyInfo info2; |
| 2111 TestCompletionCallback callback2; | 2113 TestCompletionCallback callback2; |
| 2112 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), | 2114 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), |
| 2113 NULL, NULL, BoundNetLog()); | 2115 nullptr, nullptr, "", BoundNetLog()); |
| 2114 EXPECT_EQ(ERR_IO_PENDING, rv); | 2116 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2115 | 2117 |
| 2116 // At this point the ProxyService should be waiting for the | 2118 // At this point the ProxyService should be waiting for the |
| 2117 // ProxyScriptFetcher to invoke its completion callback, notifying it of | 2119 // ProxyScriptFetcher to invoke its completion callback, notifying it of |
| 2118 // PAC script download completion. | 2120 // PAC script download completion. |
| 2119 | 2121 |
| 2120 // We now change out the ProxyService's script fetcher. We should restart | 2122 // We now change out the ProxyService's script fetcher. We should restart |
| 2121 // the initialization with the new fetcher. | 2123 // the initialization with the new fetcher. |
| 2122 | 2124 |
| 2123 fetcher = new MockProxyScriptFetcher; | 2125 fetcher = new MockProxyScriptFetcher; |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 2141 // Test cancellation of a request, while the PAC script is being fetched. | 2143 // Test cancellation of a request, while the PAC script is being fetched. |
| 2142 TEST_F(ProxyServiceTest, CancelWhilePACFetching) { | 2144 TEST_F(ProxyServiceTest, CancelWhilePACFetching) { |
| 2143 MockProxyConfigService* config_service = | 2145 MockProxyConfigService* config_service = |
| 2144 new MockProxyConfigService("http://foopy/proxy.pac"); | 2146 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 2145 | 2147 |
| 2146 MockAsyncProxyResolver resolver; | 2148 MockAsyncProxyResolver resolver; |
| 2147 MockAsyncProxyResolverFactory* factory = | 2149 MockAsyncProxyResolverFactory* factory = |
| 2148 new MockAsyncProxyResolverFactory(true); | 2150 new MockAsyncProxyResolverFactory(true); |
| 2149 | 2151 |
| 2150 ProxyService service(make_scoped_ptr(config_service), | 2152 ProxyService service(make_scoped_ptr(config_service), |
| 2151 make_scoped_ptr(factory), NULL); | 2153 make_scoped_ptr(factory), nullptr); |
| 2152 | 2154 |
| 2153 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2155 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2154 service.SetProxyScriptFetchers( | 2156 service.SetProxyScriptFetchers( |
| 2155 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 2157 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 2156 | 2158 |
| 2157 // Start 3 requests. | 2159 // Start 3 requests. |
| 2158 ProxyInfo info1; | 2160 ProxyInfo info1; |
| 2159 TestCompletionCallback callback1; | 2161 TestCompletionCallback callback1; |
| 2160 ProxyService::PacRequest* request1; | 2162 ProxyService::PacRequest* request1; |
| 2161 BoundTestNetLog log1; | 2163 BoundTestNetLog log1; |
| 2162 int rv = | 2164 int rv = service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| 2163 service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, | 2165 callback1.callback(), &request1, nullptr, "", |
| 2164 callback1.callback(), &request1, NULL, log1.bound()); | 2166 log1.bound()); |
| 2165 EXPECT_EQ(ERR_IO_PENDING, rv); | 2167 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2166 | 2168 |
| 2167 // The first request should have triggered download of PAC script. | 2169 // The first request should have triggered download of PAC script. |
| 2168 EXPECT_TRUE(fetcher->has_pending_request()); | 2170 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2169 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2171 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2170 | 2172 |
| 2171 ProxyInfo info2; | 2173 ProxyInfo info2; |
| 2172 TestCompletionCallback callback2; | 2174 TestCompletionCallback callback2; |
| 2173 ProxyService::PacRequest* request2; | 2175 ProxyService::PacRequest* request2; |
| 2174 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, | 2176 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| 2175 callback2.callback(), &request2, NULL, | 2177 callback2.callback(), &request2, nullptr, "", |
| 2176 BoundNetLog()); | 2178 BoundNetLog()); |
| 2177 EXPECT_EQ(ERR_IO_PENDING, rv); | 2179 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2178 | 2180 |
| 2179 ProxyInfo info3; | 2181 ProxyInfo info3; |
| 2180 TestCompletionCallback callback3; | 2182 TestCompletionCallback callback3; |
| 2181 rv = service.ResolveProxy(GURL("http://request3"), LOAD_NORMAL, &info3, | 2183 rv = service.ResolveProxy(GURL("http://request3"), LOAD_NORMAL, &info3, |
| 2182 callback3.callback(), NULL, NULL, BoundNetLog()); | 2184 callback3.callback(), nullptr, nullptr, "", |
| 2185 BoundNetLog()); | |
| 2183 EXPECT_EQ(ERR_IO_PENDING, rv); | 2186 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2184 | 2187 |
| 2185 // Nothing has been sent to the factory yet. | 2188 // Nothing has been sent to the factory yet. |
| 2186 EXPECT_TRUE(factory->pending_requests().empty()); | 2189 EXPECT_TRUE(factory->pending_requests().empty()); |
| 2187 | 2190 |
| 2188 // Cancel the first 2 requests. | 2191 // Cancel the first 2 requests. |
| 2189 service.CancelPacRequest(request1); | 2192 service.CancelPacRequest(request1); |
| 2190 service.CancelPacRequest(request2); | 2193 service.CancelPacRequest(request2); |
| 2191 | 2194 |
| 2192 // At this point the ProxyService should be waiting for the | 2195 // At this point the ProxyService should be waiting for the |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2239 ProxyConfig config; | 2242 ProxyConfig config; |
| 2240 config.set_auto_detect(true); | 2243 config.set_auto_detect(true); |
| 2241 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 2244 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| 2242 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. | 2245 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. |
| 2243 | 2246 |
| 2244 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 2247 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 2245 MockAsyncProxyResolver resolver; | 2248 MockAsyncProxyResolver resolver; |
| 2246 MockAsyncProxyResolverFactory* factory = | 2249 MockAsyncProxyResolverFactory* factory = |
| 2247 new MockAsyncProxyResolverFactory(true); | 2250 new MockAsyncProxyResolverFactory(true); |
| 2248 ProxyService service(make_scoped_ptr(config_service), | 2251 ProxyService service(make_scoped_ptr(config_service), |
| 2249 make_scoped_ptr(factory), NULL); | 2252 make_scoped_ptr(factory), nullptr); |
| 2250 | 2253 |
| 2251 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2254 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2252 service.SetProxyScriptFetchers( | 2255 service.SetProxyScriptFetchers( |
| 2253 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 2256 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 2254 | 2257 |
| 2255 // Start 2 requests. | 2258 // Start 2 requests. |
| 2256 | 2259 |
| 2257 ProxyInfo info1; | 2260 ProxyInfo info1; |
| 2258 TestCompletionCallback callback1; | 2261 TestCompletionCallback callback1; |
| 2259 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), | 2262 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), |
| 2260 NULL, NULL, BoundNetLog()); | 2263 nullptr, nullptr, "", BoundNetLog()); |
| 2261 EXPECT_EQ(ERR_IO_PENDING, rv); | 2264 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2262 | 2265 |
| 2263 ProxyInfo info2; | 2266 ProxyInfo info2; |
| 2264 TestCompletionCallback callback2; | 2267 TestCompletionCallback callback2; |
| 2265 ProxyService::PacRequest* request2; | 2268 ProxyService::PacRequest* request2; |
| 2266 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), | 2269 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), |
| 2267 &request2, NULL, BoundNetLog()); | 2270 &request2, nullptr, "", BoundNetLog()); |
| 2268 EXPECT_EQ(ERR_IO_PENDING, rv); | 2271 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2269 | 2272 |
| 2270 // Check that nothing has been sent to the proxy resolver factory yet. | 2273 // Check that nothing has been sent to the proxy resolver factory yet. |
| 2271 ASSERT_EQ(0u, factory->pending_requests().size()); | 2274 ASSERT_EQ(0u, factory->pending_requests().size()); |
| 2272 | 2275 |
| 2273 // It should be trying to auto-detect first -- FAIL the autodetect during | 2276 // It should be trying to auto-detect first -- FAIL the autodetect during |
| 2274 // the script download. | 2277 // the script download. |
| 2275 EXPECT_TRUE(fetcher->has_pending_request()); | 2278 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2276 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 2279 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| 2277 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); | 2280 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2318 ProxyConfig config; | 2321 ProxyConfig config; |
| 2319 config.set_auto_detect(true); | 2322 config.set_auto_detect(true); |
| 2320 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 2323 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| 2321 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. | 2324 config.proxy_rules().ParseFromString("http=foopy:80"); // Won't be used. |
| 2322 | 2325 |
| 2323 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 2326 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 2324 MockAsyncProxyResolver resolver; | 2327 MockAsyncProxyResolver resolver; |
| 2325 MockAsyncProxyResolverFactory* factory = | 2328 MockAsyncProxyResolverFactory* factory = |
| 2326 new MockAsyncProxyResolverFactory(true); | 2329 new MockAsyncProxyResolverFactory(true); |
| 2327 ProxyService service(make_scoped_ptr(config_service), | 2330 ProxyService service(make_scoped_ptr(config_service), |
| 2328 make_scoped_ptr(factory), NULL); | 2331 make_scoped_ptr(factory), nullptr); |
| 2329 | 2332 |
| 2330 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2333 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2331 service.SetProxyScriptFetchers( | 2334 service.SetProxyScriptFetchers( |
| 2332 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 2335 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 2333 | 2336 |
| 2334 // Start 2 requests. | 2337 // Start 2 requests. |
| 2335 | 2338 |
| 2336 ProxyInfo info1; | 2339 ProxyInfo info1; |
| 2337 TestCompletionCallback callback1; | 2340 TestCompletionCallback callback1; |
| 2338 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), | 2341 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), |
| 2339 NULL, NULL, BoundNetLog()); | 2342 nullptr, nullptr, "", BoundNetLog()); |
| 2340 EXPECT_EQ(ERR_IO_PENDING, rv); | 2343 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2341 | 2344 |
| 2342 ProxyInfo info2; | 2345 ProxyInfo info2; |
| 2343 TestCompletionCallback callback2; | 2346 TestCompletionCallback callback2; |
| 2344 ProxyService::PacRequest* request2; | 2347 ProxyService::PacRequest* request2; |
| 2345 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), | 2348 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), |
| 2346 &request2, NULL, BoundNetLog()); | 2349 &request2, nullptr, "", BoundNetLog()); |
| 2347 EXPECT_EQ(ERR_IO_PENDING, rv); | 2350 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2348 | 2351 |
| 2349 // Check that nothing has been sent to the proxy resolver factory yet. | 2352 // Check that nothing has been sent to the proxy resolver factory yet. |
| 2350 ASSERT_EQ(0u, factory->pending_requests().size()); | 2353 ASSERT_EQ(0u, factory->pending_requests().size()); |
| 2351 | 2354 |
| 2352 // It should be trying to auto-detect first -- succeed the download. | 2355 // It should be trying to auto-detect first -- succeed the download. |
| 2353 EXPECT_TRUE(fetcher->has_pending_request()); | 2356 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2354 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 2357 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| 2355 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); | 2358 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); |
| 2356 | 2359 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2390 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) { | 2393 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) { |
| 2391 ProxyConfig config; | 2394 ProxyConfig config; |
| 2392 config.set_auto_detect(true); | 2395 config.set_auto_detect(true); |
| 2393 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 2396 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| 2394 config.proxy_rules().ParseFromString("http=foopy:80"); | 2397 config.proxy_rules().ParseFromString("http=foopy:80"); |
| 2395 | 2398 |
| 2396 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 2399 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 2397 MockAsyncProxyResolverFactory* factory = | 2400 MockAsyncProxyResolverFactory* factory = |
| 2398 new MockAsyncProxyResolverFactory(true); | 2401 new MockAsyncProxyResolverFactory(true); |
| 2399 ProxyService service(make_scoped_ptr(config_service), | 2402 ProxyService service(make_scoped_ptr(config_service), |
| 2400 make_scoped_ptr(factory), NULL); | 2403 make_scoped_ptr(factory), nullptr); |
| 2401 | 2404 |
| 2402 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2405 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2403 service.SetProxyScriptFetchers( | 2406 service.SetProxyScriptFetchers( |
| 2404 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 2407 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 2405 | 2408 |
| 2406 // Start 2 requests. | 2409 // Start 2 requests. |
| 2407 | 2410 |
| 2408 ProxyInfo info1; | 2411 ProxyInfo info1; |
| 2409 TestCompletionCallback callback1; | 2412 TestCompletionCallback callback1; |
| 2410 int rv = | 2413 int rv = service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| 2411 service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, | 2414 callback1.callback(), nullptr, nullptr, "", |
| 2412 callback1.callback(), NULL, NULL, BoundNetLog()); | 2415 BoundNetLog()); |
| 2413 EXPECT_EQ(ERR_IO_PENDING, rv); | 2416 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2414 | 2417 |
| 2415 ProxyInfo info2; | 2418 ProxyInfo info2; |
| 2416 TestCompletionCallback callback2; | 2419 TestCompletionCallback callback2; |
| 2417 ProxyService::PacRequest* request2; | 2420 ProxyService::PacRequest* request2; |
| 2418 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, | 2421 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| 2419 callback2.callback(), &request2, NULL, | 2422 callback2.callback(), &request2, nullptr, "", |
| 2420 BoundNetLog()); | 2423 BoundNetLog()); |
| 2421 EXPECT_EQ(ERR_IO_PENDING, rv); | 2424 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2422 | 2425 |
| 2423 // Check that nothing has been sent to the proxy resolver factory yet. | 2426 // Check that nothing has been sent to the proxy resolver factory yet. |
| 2424 ASSERT_EQ(0u, factory->pending_requests().size()); | 2427 ASSERT_EQ(0u, factory->pending_requests().size()); |
| 2425 | 2428 |
| 2426 // It should be trying to auto-detect first -- fail the download. | 2429 // It should be trying to auto-detect first -- fail the download. |
| 2427 EXPECT_TRUE(fetcher->has_pending_request()); | 2430 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2428 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 2431 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| 2429 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); | 2432 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 2452 config.set_auto_detect(true); | 2455 config.set_auto_detect(true); |
| 2453 config.set_pac_url(GURL("http://foopy/proxy.pac")); | 2456 config.set_pac_url(GURL("http://foopy/proxy.pac")); |
| 2454 config.proxy_rules().ParseFromString("http=foopy:80"); // Not used. | 2457 config.proxy_rules().ParseFromString("http=foopy:80"); // Not used. |
| 2455 config.proxy_rules().bypass_rules.ParseFromString("www.google.com"); | 2458 config.proxy_rules().bypass_rules.ParseFromString("www.google.com"); |
| 2456 | 2459 |
| 2457 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 2460 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 2458 MockAsyncProxyResolver resolver; | 2461 MockAsyncProxyResolver resolver; |
| 2459 MockAsyncProxyResolverFactory* factory = | 2462 MockAsyncProxyResolverFactory* factory = |
| 2460 new MockAsyncProxyResolverFactory(true); | 2463 new MockAsyncProxyResolverFactory(true); |
| 2461 ProxyService service(make_scoped_ptr(config_service), | 2464 ProxyService service(make_scoped_ptr(config_service), |
| 2462 make_scoped_ptr(factory), NULL); | 2465 make_scoped_ptr(factory), nullptr); |
| 2463 | 2466 |
| 2464 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2467 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2465 service.SetProxyScriptFetchers( | 2468 service.SetProxyScriptFetchers( |
| 2466 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 2469 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 2467 | 2470 |
| 2468 // Start 1 requests. | 2471 // Start 1 requests. |
| 2469 | 2472 |
| 2470 ProxyInfo info1; | 2473 ProxyInfo info1; |
| 2471 TestCompletionCallback callback1; | 2474 TestCompletionCallback callback1; |
| 2472 int rv = | 2475 int rv = service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, |
| 2473 service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info1, | 2476 &info1, callback1.callback(), nullptr, nullptr, |
| 2474 callback1.callback(), NULL, NULL, BoundNetLog()); | 2477 "", BoundNetLog()); |
| 2475 EXPECT_EQ(ERR_IO_PENDING, rv); | 2478 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2476 | 2479 |
| 2477 // Check that nothing has been sent to the proxy resolver factory yet. | 2480 // Check that nothing has been sent to the proxy resolver factory yet. |
| 2478 ASSERT_EQ(0u, factory->pending_requests().size()); | 2481 ASSERT_EQ(0u, factory->pending_requests().size()); |
| 2479 | 2482 |
| 2480 // It should be trying to auto-detect first -- succeed the download. | 2483 // It should be trying to auto-detect first -- succeed the download. |
| 2481 EXPECT_TRUE(fetcher->has_pending_request()); | 2484 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2482 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); | 2485 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); |
| 2483 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); | 2486 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); |
| 2484 | 2487 |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 2495 resolver.pending_requests()[0]->CompleteNow(OK); | 2498 resolver.pending_requests()[0]->CompleteNow(OK); |
| 2496 | 2499 |
| 2497 // Verify that request ran as expected. | 2500 // Verify that request ran as expected. |
| 2498 EXPECT_EQ(OK, callback1.WaitForResult()); | 2501 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 2499 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); | 2502 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); |
| 2500 | 2503 |
| 2501 // Start another request, it should pickup the bypass item. | 2504 // Start another request, it should pickup the bypass item. |
| 2502 ProxyInfo info2; | 2505 ProxyInfo info2; |
| 2503 TestCompletionCallback callback2; | 2506 TestCompletionCallback callback2; |
| 2504 rv = service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info2, | 2507 rv = service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info2, |
| 2505 callback2.callback(), NULL, NULL, BoundNetLog()); | 2508 callback2.callback(), nullptr, nullptr, "", |
| 2509 BoundNetLog()); | |
| 2506 EXPECT_EQ(ERR_IO_PENDING, rv); | 2510 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2507 | 2511 |
| 2508 ASSERT_EQ(1u, resolver.pending_requests().size()); | 2512 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 2509 EXPECT_EQ(GURL("http://www.google.com"), | 2513 EXPECT_EQ(GURL("http://www.google.com"), |
| 2510 resolver.pending_requests()[0]->url()); | 2514 resolver.pending_requests()[0]->url()); |
| 2511 | 2515 |
| 2512 // Complete the pending request. | 2516 // Complete the pending request. |
| 2513 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); | 2517 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| 2514 resolver.pending_requests()[0]->CompleteNow(OK); | 2518 resolver.pending_requests()[0]->CompleteNow(OK); |
| 2515 | 2519 |
| 2516 EXPECT_EQ(OK, callback2.WaitForResult()); | 2520 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 2517 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); | 2521 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); |
| 2518 } | 2522 } |
| 2519 | 2523 |
| 2520 // Delete the ProxyService while InitProxyResolver has an outstanding | 2524 // Delete the ProxyService while InitProxyResolver has an outstanding |
| 2521 // request to the script fetcher. When run under valgrind, should not | 2525 // request to the script fetcher. When run under valgrind, should not |
| 2522 // have any memory errors (used to be that the ProxyScriptFetcher was | 2526 // have any memory errors (used to be that the ProxyScriptFetcher was |
| 2523 // being deleted prior to the InitProxyResolver). | 2527 // being deleted prior to the InitProxyResolver). |
| 2524 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { | 2528 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { |
| 2525 ProxyConfig config = | 2529 ProxyConfig config = |
| 2526 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); | 2530 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); |
| 2527 | 2531 |
| 2528 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 2532 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 2529 MockAsyncProxyResolverFactory* factory = | 2533 MockAsyncProxyResolverFactory* factory = |
| 2530 new MockAsyncProxyResolverFactory(true); | 2534 new MockAsyncProxyResolverFactory(true); |
| 2531 ProxyService service(make_scoped_ptr(config_service), | 2535 ProxyService service(make_scoped_ptr(config_service), |
| 2532 make_scoped_ptr(factory), NULL); | 2536 make_scoped_ptr(factory), nullptr); |
| 2533 | 2537 |
| 2534 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2538 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2535 service.SetProxyScriptFetchers( | 2539 service.SetProxyScriptFetchers( |
| 2536 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 2540 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 2537 | 2541 |
| 2538 // Start 1 request. | 2542 // Start 1 request. |
| 2539 | 2543 |
| 2540 ProxyInfo info1; | 2544 ProxyInfo info1; |
| 2541 TestCompletionCallback callback1; | 2545 TestCompletionCallback callback1; |
| 2542 int rv = | 2546 int rv = service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, |
| 2543 service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info1, | 2547 &info1, callback1.callback(), nullptr, nullptr, |
| 2544 callback1.callback(), NULL, NULL, BoundNetLog()); | 2548 "", BoundNetLog()); |
| 2545 EXPECT_EQ(ERR_IO_PENDING, rv); | 2549 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2546 | 2550 |
| 2547 // Check that nothing has been sent to the proxy resolver factory yet. | 2551 // Check that nothing has been sent to the proxy resolver factory yet. |
| 2548 ASSERT_EQ(0u, factory->pending_requests().size()); | 2552 ASSERT_EQ(0u, factory->pending_requests().size()); |
| 2549 | 2553 |
| 2550 // InitProxyResolver should have issued a request to the ProxyScriptFetcher | 2554 // InitProxyResolver should have issued a request to the ProxyScriptFetcher |
| 2551 // and be waiting on that to complete. | 2555 // and be waiting on that to complete. |
| 2552 EXPECT_TRUE(fetcher->has_pending_request()); | 2556 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2553 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2557 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2554 } | 2558 } |
| 2555 | 2559 |
| 2556 // Delete the ProxyService while InitProxyResolver has an outstanding | 2560 // Delete the ProxyService while InitProxyResolver has an outstanding |
| 2557 // request to the proxy resolver. When run under valgrind, should not | 2561 // request to the proxy resolver. When run under valgrind, should not |
| 2558 // have any memory errors (used to be that the ProxyResolver was | 2562 // have any memory errors (used to be that the ProxyResolver was |
| 2559 // being deleted prior to the InitProxyResolver). | 2563 // being deleted prior to the InitProxyResolver). |
| 2560 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingSet) { | 2564 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingSet) { |
| 2561 MockProxyConfigService* config_service = | 2565 MockProxyConfigService* config_service = |
| 2562 new MockProxyConfigService("http://foopy/proxy.pac"); | 2566 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 2563 | 2567 |
| 2564 MockAsyncProxyResolverFactory* factory = | 2568 MockAsyncProxyResolverFactory* factory = |
| 2565 new MockAsyncProxyResolverFactory(false); | 2569 new MockAsyncProxyResolverFactory(false); |
| 2566 | 2570 |
| 2567 ProxyService service(make_scoped_ptr(config_service), | 2571 ProxyService service(make_scoped_ptr(config_service), |
| 2568 make_scoped_ptr(factory), NULL); | 2572 make_scoped_ptr(factory), nullptr); |
| 2569 | 2573 |
| 2570 GURL url("http://www.google.com/"); | 2574 GURL url("http://www.google.com/"); |
| 2571 | 2575 |
| 2572 ProxyInfo info; | 2576 ProxyInfo info; |
| 2573 TestCompletionCallback callback; | 2577 TestCompletionCallback callback; |
| 2574 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), | 2578 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), |
| 2575 NULL, NULL, BoundNetLog()); | 2579 nullptr, nullptr, "", BoundNetLog()); |
| 2576 EXPECT_EQ(ERR_IO_PENDING, rv); | 2580 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2577 | 2581 |
| 2578 EXPECT_EQ(GURL("http://foopy/proxy.pac"), | 2582 EXPECT_EQ(GURL("http://foopy/proxy.pac"), |
| 2579 factory->pending_requests()[0]->script_data()->url()); | 2583 factory->pending_requests()[0]->script_data()->url()); |
| 2580 } | 2584 } |
| 2581 | 2585 |
| 2582 TEST_F(ProxyServiceTest, ResetProxyConfigService) { | 2586 TEST_F(ProxyServiceTest, ResetProxyConfigService) { |
| 2583 ProxyConfig config1; | 2587 ProxyConfig config1; |
| 2584 config1.proxy_rules().ParseFromString("foopy1:8080"); | 2588 config1.proxy_rules().ParseFromString("foopy1:8080"); |
| 2585 config1.set_auto_detect(false); | 2589 config1.set_auto_detect(false); |
| 2586 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config1)), | 2590 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config1)), |
| 2587 nullptr, NULL); | 2591 nullptr, nullptr); |
| 2588 | 2592 |
| 2589 ProxyInfo info; | 2593 ProxyInfo info; |
| 2590 TestCompletionCallback callback1; | 2594 TestCompletionCallback callback1; |
| 2591 int rv = | 2595 int rv = service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info, |
| 2592 service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info, | 2596 callback1.callback(), nullptr, nullptr, "", |
| 2593 callback1.callback(), NULL, NULL, BoundNetLog()); | 2597 BoundNetLog()); |
| 2594 EXPECT_EQ(OK, rv); | 2598 EXPECT_EQ(OK, rv); |
| 2595 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); | 2599 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); |
| 2596 | 2600 |
| 2597 ProxyConfig config2; | 2601 ProxyConfig config2; |
| 2598 config2.proxy_rules().ParseFromString("foopy2:8080"); | 2602 config2.proxy_rules().ParseFromString("foopy2:8080"); |
| 2599 config2.set_auto_detect(false); | 2603 config2.set_auto_detect(false); |
| 2600 service.ResetConfigService( | 2604 service.ResetConfigService( |
| 2601 make_scoped_ptr(new MockProxyConfigService(config2))); | 2605 make_scoped_ptr(new MockProxyConfigService(config2))); |
| 2602 TestCompletionCallback callback2; | 2606 TestCompletionCallback callback2; |
| 2603 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info, | 2607 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info, |
| 2604 callback2.callback(), NULL, NULL, BoundNetLog()); | 2608 callback2.callback(), nullptr, nullptr, "", |
| 2609 BoundNetLog()); | |
| 2605 EXPECT_EQ(OK, rv); | 2610 EXPECT_EQ(OK, rv); |
| 2606 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); | 2611 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); |
| 2607 } | 2612 } |
| 2608 | 2613 |
| 2609 // Test that when going from a configuration that required PAC to one | 2614 // Test that when going from a configuration that required PAC to one |
| 2610 // that does NOT, we unset the variable |should_use_proxy_resolver_|. | 2615 // that does NOT, we unset the variable |should_use_proxy_resolver_|. |
| 2611 TEST_F(ProxyServiceTest, UpdateConfigFromPACToDirect) { | 2616 TEST_F(ProxyServiceTest, UpdateConfigFromPACToDirect) { |
| 2612 ProxyConfig config = ProxyConfig::CreateAutoDetect(); | 2617 ProxyConfig config = ProxyConfig::CreateAutoDetect(); |
| 2613 | 2618 |
| 2614 MockProxyConfigService* config_service = new MockProxyConfigService(config); | 2619 MockProxyConfigService* config_service = new MockProxyConfigService(config); |
| 2615 MockAsyncProxyResolver resolver; | 2620 MockAsyncProxyResolver resolver; |
| 2616 MockAsyncProxyResolverFactory* factory = | 2621 MockAsyncProxyResolverFactory* factory = |
| 2617 new MockAsyncProxyResolverFactory(false); | 2622 new MockAsyncProxyResolverFactory(false); |
| 2618 ProxyService service(make_scoped_ptr(config_service), | 2623 ProxyService service(make_scoped_ptr(config_service), |
| 2619 make_scoped_ptr(factory), NULL); | 2624 make_scoped_ptr(factory), nullptr); |
| 2620 | 2625 |
| 2621 // Start 1 request. | 2626 // Start 1 request. |
| 2622 | 2627 |
| 2623 ProxyInfo info1; | 2628 ProxyInfo info1; |
| 2624 TestCompletionCallback callback1; | 2629 TestCompletionCallback callback1; |
| 2625 int rv = | 2630 int rv = service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, |
| 2626 service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info1, | 2631 &info1, callback1.callback(), nullptr, nullptr, |
| 2627 callback1.callback(), NULL, NULL, BoundNetLog()); | 2632 "", BoundNetLog()); |
| 2628 EXPECT_EQ(ERR_IO_PENDING, rv); | 2633 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2629 | 2634 |
| 2630 // Successfully set the autodetect script. | 2635 // Successfully set the autodetect script. |
| 2631 EXPECT_EQ(ProxyResolverScriptData::TYPE_AUTO_DETECT, | 2636 EXPECT_EQ(ProxyResolverScriptData::TYPE_AUTO_DETECT, |
| 2632 factory->pending_requests()[0]->script_data()->type()); | 2637 factory->pending_requests()[0]->script_data()->type()); |
| 2633 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 2638 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 2634 | 2639 |
| 2635 // Complete the pending request. | 2640 // Complete the pending request. |
| 2636 ASSERT_EQ(1u, resolver.pending_requests().size()); | 2641 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 2637 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); | 2642 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); |
| 2638 resolver.pending_requests()[0]->CompleteNow(OK); | 2643 resolver.pending_requests()[0]->CompleteNow(OK); |
| 2639 | 2644 |
| 2640 // Verify that request ran as expected. | 2645 // Verify that request ran as expected. |
| 2641 EXPECT_EQ(OK, callback1.WaitForResult()); | 2646 EXPECT_EQ(OK, callback1.WaitForResult()); |
| 2642 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); | 2647 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); |
| 2643 | 2648 |
| 2644 // Force the ProxyService to pull down a new proxy configuration. | 2649 // Force the ProxyService to pull down a new proxy configuration. |
| 2645 // (Even though the configuration isn't old/bad). | 2650 // (Even though the configuration isn't old/bad). |
| 2646 // | 2651 // |
| 2647 // This new configuration no longer has auto_detect set, so | 2652 // This new configuration no longer has auto_detect set, so |
| 2648 // requests should complete synchronously now as direct-connect. | 2653 // requests should complete synchronously now as direct-connect. |
| 2649 config_service->SetConfig(ProxyConfig::CreateDirect()); | 2654 config_service->SetConfig(ProxyConfig::CreateDirect()); |
| 2650 | 2655 |
| 2651 // Start another request -- the effective configuration has changed. | 2656 // Start another request -- the effective configuration has changed. |
| 2652 ProxyInfo info2; | 2657 ProxyInfo info2; |
| 2653 TestCompletionCallback callback2; | 2658 TestCompletionCallback callback2; |
| 2654 rv = service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info2, | 2659 rv = service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info2, |
| 2655 callback2.callback(), NULL, NULL, BoundNetLog()); | 2660 callback2.callback(), nullptr, nullptr, "", |
| 2661 BoundNetLog()); | |
| 2656 EXPECT_EQ(OK, rv); | 2662 EXPECT_EQ(OK, rv); |
| 2657 | 2663 |
| 2658 EXPECT_TRUE(info2.is_direct()); | 2664 EXPECT_TRUE(info2.is_direct()); |
| 2659 } | 2665 } |
| 2660 | 2666 |
| 2661 TEST_F(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { | 2667 TEST_F(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { |
| 2662 MockProxyConfigService* config_service = | 2668 MockProxyConfigService* config_service = |
| 2663 new MockProxyConfigService("http://foopy/proxy.pac"); | 2669 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 2664 | 2670 |
| 2665 MockAsyncProxyResolver resolver; | 2671 MockAsyncProxyResolver resolver; |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 2676 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 2682 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 2677 | 2683 |
| 2678 // Disable the "wait after IP address changes" hack, so this unit-test can | 2684 // Disable the "wait after IP address changes" hack, so this unit-test can |
| 2679 // complete quickly. | 2685 // complete quickly. |
| 2680 service.set_stall_proxy_auto_config_delay(base::TimeDelta()); | 2686 service.set_stall_proxy_auto_config_delay(base::TimeDelta()); |
| 2681 | 2687 |
| 2682 // Start 1 request. | 2688 // Start 1 request. |
| 2683 | 2689 |
| 2684 ProxyInfo info1; | 2690 ProxyInfo info1; |
| 2685 TestCompletionCallback callback1; | 2691 TestCompletionCallback callback1; |
| 2686 int rv = | 2692 int rv = service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| 2687 service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, | 2693 callback1.callback(), nullptr, nullptr, "", |
| 2688 callback1.callback(), NULL, NULL, BoundNetLog()); | 2694 BoundNetLog()); |
| 2689 EXPECT_EQ(ERR_IO_PENDING, rv); | 2695 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2690 | 2696 |
| 2691 // The first request should have triggered initial download of PAC script. | 2697 // The first request should have triggered initial download of PAC script. |
| 2692 EXPECT_TRUE(fetcher->has_pending_request()); | 2698 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2693 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2699 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2694 | 2700 |
| 2695 // Nothing has been sent to the factory yet. | 2701 // Nothing has been sent to the factory yet. |
| 2696 EXPECT_TRUE(factory->pending_requests().empty()); | 2702 EXPECT_TRUE(factory->pending_requests().empty()); |
| 2697 | 2703 |
| 2698 // At this point the ProxyService should be waiting for the | 2704 // At this point the ProxyService should be waiting for the |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 2720 // Now simluate a change in the network. The ProxyConfigService is still | 2726 // Now simluate a change in the network. The ProxyConfigService is still |
| 2721 // going to return the same PAC URL as before, but this URL needs to be | 2727 // going to return the same PAC URL as before, but this URL needs to be |
| 2722 // refetched on the new network. | 2728 // refetched on the new network. |
| 2723 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 2729 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
| 2724 base::MessageLoop::current()->RunUntilIdle(); // Notification happens async. | 2730 base::MessageLoop::current()->RunUntilIdle(); // Notification happens async. |
| 2725 | 2731 |
| 2726 // Start a second request. | 2732 // Start a second request. |
| 2727 ProxyInfo info2; | 2733 ProxyInfo info2; |
| 2728 TestCompletionCallback callback2; | 2734 TestCompletionCallback callback2; |
| 2729 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, | 2735 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| 2730 callback2.callback(), NULL, NULL, BoundNetLog()); | 2736 callback2.callback(), nullptr, nullptr, "", |
| 2737 BoundNetLog()); | |
| 2731 EXPECT_EQ(ERR_IO_PENDING, rv); | 2738 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2732 | 2739 |
| 2733 // This second request should have triggered the re-download of the PAC | 2740 // This second request should have triggered the re-download of the PAC |
| 2734 // script (since we marked the network as having changed). | 2741 // script (since we marked the network as having changed). |
| 2735 EXPECT_TRUE(fetcher->has_pending_request()); | 2742 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2736 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2743 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2737 | 2744 |
| 2738 // Nothing has been sent to the factory yet. | 2745 // Nothing has been sent to the factory yet. |
| 2739 EXPECT_TRUE(factory->pending_requests().empty()); | 2746 EXPECT_TRUE(factory->pending_requests().empty()); |
| 2740 | 2747 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2783 ProxyService::set_pac_script_poll_policy(&poll_policy); | 2790 ProxyService::set_pac_script_poll_policy(&poll_policy); |
| 2784 | 2791 |
| 2785 MockProxyConfigService* config_service = | 2792 MockProxyConfigService* config_service = |
| 2786 new MockProxyConfigService("http://foopy/proxy.pac"); | 2793 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 2787 | 2794 |
| 2788 MockAsyncProxyResolver resolver; | 2795 MockAsyncProxyResolver resolver; |
| 2789 MockAsyncProxyResolverFactory* factory = | 2796 MockAsyncProxyResolverFactory* factory = |
| 2790 new MockAsyncProxyResolverFactory(true); | 2797 new MockAsyncProxyResolverFactory(true); |
| 2791 | 2798 |
| 2792 ProxyService service(make_scoped_ptr(config_service), | 2799 ProxyService service(make_scoped_ptr(config_service), |
| 2793 make_scoped_ptr(factory), NULL); | 2800 make_scoped_ptr(factory), nullptr); |
| 2794 | 2801 |
| 2795 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2802 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2796 service.SetProxyScriptFetchers( | 2803 service.SetProxyScriptFetchers( |
| 2797 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 2804 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 2798 | 2805 |
| 2799 // Start 1 request. | 2806 // Start 1 request. |
| 2800 | 2807 |
| 2801 ProxyInfo info1; | 2808 ProxyInfo info1; |
| 2802 TestCompletionCallback callback1; | 2809 TestCompletionCallback callback1; |
| 2803 int rv = | 2810 int rv = service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| 2804 service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, | 2811 callback1.callback(), nullptr, nullptr, "", |
| 2805 callback1.callback(), NULL, NULL, BoundNetLog()); | 2812 BoundNetLog()); |
| 2806 EXPECT_EQ(ERR_IO_PENDING, rv); | 2813 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2807 | 2814 |
| 2808 // The first request should have triggered initial download of PAC script. | 2815 // The first request should have triggered initial download of PAC script. |
| 2809 EXPECT_TRUE(fetcher->has_pending_request()); | 2816 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2810 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2817 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2811 | 2818 |
| 2812 // Nothing has been sent to the factory yet. | 2819 // Nothing has been sent to the factory yet. |
| 2813 EXPECT_TRUE(factory->pending_requests().empty()); | 2820 EXPECT_TRUE(factory->pending_requests().empty()); |
| 2814 | 2821 |
| 2815 // At this point the ProxyService should be waiting for the | 2822 // At this point the ProxyService should be waiting for the |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2855 | 2862 |
| 2856 // At this point the ProxyService should have re-configured itself to use the | 2863 // At this point the ProxyService should have re-configured itself to use the |
| 2857 // PAC script (thereby recovering from the initial fetch failure). We will | 2864 // PAC script (thereby recovering from the initial fetch failure). We will |
| 2858 // verify that the next Resolve request uses the resolver rather than | 2865 // verify that the next Resolve request uses the resolver rather than |
| 2859 // DIRECT. | 2866 // DIRECT. |
| 2860 | 2867 |
| 2861 // Start a second request. | 2868 // Start a second request. |
| 2862 ProxyInfo info2; | 2869 ProxyInfo info2; |
| 2863 TestCompletionCallback callback2; | 2870 TestCompletionCallback callback2; |
| 2864 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, | 2871 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| 2865 callback2.callback(), NULL, NULL, BoundNetLog()); | 2872 callback2.callback(), nullptr, nullptr, "", |
| 2873 BoundNetLog()); | |
| 2866 EXPECT_EQ(ERR_IO_PENDING, rv); | 2874 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2867 | 2875 |
| 2868 // Check that it was sent to the resolver. | 2876 // Check that it was sent to the resolver. |
| 2869 ASSERT_EQ(1u, resolver.pending_requests().size()); | 2877 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 2870 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); | 2878 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); |
| 2871 | 2879 |
| 2872 // Complete the pending second request. | 2880 // Complete the pending second request. |
| 2873 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); | 2881 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| 2874 resolver.pending_requests()[0]->CompleteNow(OK); | 2882 resolver.pending_requests()[0]->CompleteNow(OK); |
| 2875 | 2883 |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 2889 ProxyService::set_pac_script_poll_policy(&poll_policy); | 2897 ProxyService::set_pac_script_poll_policy(&poll_policy); |
| 2890 | 2898 |
| 2891 MockProxyConfigService* config_service = | 2899 MockProxyConfigService* config_service = |
| 2892 new MockProxyConfigService("http://foopy/proxy.pac"); | 2900 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 2893 | 2901 |
| 2894 MockAsyncProxyResolver resolver; | 2902 MockAsyncProxyResolver resolver; |
| 2895 MockAsyncProxyResolverFactory* factory = | 2903 MockAsyncProxyResolverFactory* factory = |
| 2896 new MockAsyncProxyResolverFactory(true); | 2904 new MockAsyncProxyResolverFactory(true); |
| 2897 | 2905 |
| 2898 ProxyService service(make_scoped_ptr(config_service), | 2906 ProxyService service(make_scoped_ptr(config_service), |
| 2899 make_scoped_ptr(factory), NULL); | 2907 make_scoped_ptr(factory), nullptr); |
| 2900 | 2908 |
| 2901 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 2909 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 2902 service.SetProxyScriptFetchers( | 2910 service.SetProxyScriptFetchers( |
| 2903 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 2911 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 2904 | 2912 |
| 2905 // Start 1 request. | 2913 // Start 1 request. |
| 2906 | 2914 |
| 2907 ProxyInfo info1; | 2915 ProxyInfo info1; |
| 2908 TestCompletionCallback callback1; | 2916 TestCompletionCallback callback1; |
| 2909 int rv = | 2917 int rv = service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| 2910 service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, | 2918 callback1.callback(), nullptr, nullptr, "", |
| 2911 callback1.callback(), NULL, NULL, BoundNetLog()); | 2919 BoundNetLog()); |
| 2912 EXPECT_EQ(ERR_IO_PENDING, rv); | 2920 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2913 | 2921 |
| 2914 // The first request should have triggered initial download of PAC script. | 2922 // The first request should have triggered initial download of PAC script. |
| 2915 EXPECT_TRUE(fetcher->has_pending_request()); | 2923 EXPECT_TRUE(fetcher->has_pending_request()); |
| 2916 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 2924 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 2917 | 2925 |
| 2918 // Nothing has been sent to the factory yet. | 2926 // Nothing has been sent to the factory yet. |
| 2919 EXPECT_TRUE(factory->pending_requests().empty()); | 2927 EXPECT_TRUE(factory->pending_requests().empty()); |
| 2920 | 2928 |
| 2921 // At this point the ProxyService should be waiting for the | 2929 // At this point the ProxyService should be waiting for the |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2967 factory->pending_requests()[0]->script_data()->utf16()); | 2975 factory->pending_requests()[0]->script_data()->utf16()); |
| 2968 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); | 2976 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); |
| 2969 | 2977 |
| 2970 // At this point the ProxyService should have re-configured itself to use the | 2978 // At this point the ProxyService should have re-configured itself to use the |
| 2971 // new PAC script. | 2979 // new PAC script. |
| 2972 | 2980 |
| 2973 // Start a second request. | 2981 // Start a second request. |
| 2974 ProxyInfo info2; | 2982 ProxyInfo info2; |
| 2975 TestCompletionCallback callback2; | 2983 TestCompletionCallback callback2; |
| 2976 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, | 2984 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| 2977 callback2.callback(), NULL, NULL, BoundNetLog()); | 2985 callback2.callback(), nullptr, nullptr, "", |
| 2986 BoundNetLog()); | |
| 2978 EXPECT_EQ(ERR_IO_PENDING, rv); | 2987 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2979 | 2988 |
| 2980 // Check that it was sent to the resolver. | 2989 // Check that it was sent to the resolver. |
| 2981 ASSERT_EQ(1u, resolver.pending_requests().size()); | 2990 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 2982 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); | 2991 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); |
| 2983 | 2992 |
| 2984 // Complete the pending second request. | 2993 // Complete the pending second request. |
| 2985 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); | 2994 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| 2986 resolver.pending_requests()[0]->CompleteNow(OK); | 2995 resolver.pending_requests()[0]->CompleteNow(OK); |
| 2987 | 2996 |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 3001 ProxyService::set_pac_script_poll_policy(&poll_policy); | 3010 ProxyService::set_pac_script_poll_policy(&poll_policy); |
| 3002 | 3011 |
| 3003 MockProxyConfigService* config_service = | 3012 MockProxyConfigService* config_service = |
| 3004 new MockProxyConfigService("http://foopy/proxy.pac"); | 3013 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 3005 | 3014 |
| 3006 MockAsyncProxyResolver resolver; | 3015 MockAsyncProxyResolver resolver; |
| 3007 MockAsyncProxyResolverFactory* factory = | 3016 MockAsyncProxyResolverFactory* factory = |
| 3008 new MockAsyncProxyResolverFactory(true); | 3017 new MockAsyncProxyResolverFactory(true); |
| 3009 | 3018 |
| 3010 ProxyService service(make_scoped_ptr(config_service), | 3019 ProxyService service(make_scoped_ptr(config_service), |
| 3011 make_scoped_ptr(factory), NULL); | 3020 make_scoped_ptr(factory), nullptr); |
| 3012 | 3021 |
| 3013 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 3022 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 3014 service.SetProxyScriptFetchers( | 3023 service.SetProxyScriptFetchers( |
| 3015 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 3024 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 3016 | 3025 |
| 3017 // Start 1 request. | 3026 // Start 1 request. |
| 3018 | 3027 |
| 3019 ProxyInfo info1; | 3028 ProxyInfo info1; |
| 3020 TestCompletionCallback callback1; | 3029 TestCompletionCallback callback1; |
| 3021 int rv = | 3030 int rv = service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| 3022 service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, | 3031 callback1.callback(), nullptr, nullptr, "", |
| 3023 callback1.callback(), NULL, NULL, BoundNetLog()); | 3032 BoundNetLog()); |
| 3024 EXPECT_EQ(ERR_IO_PENDING, rv); | 3033 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3025 | 3034 |
| 3026 // The first request should have triggered initial download of PAC script. | 3035 // The first request should have triggered initial download of PAC script. |
| 3027 EXPECT_TRUE(fetcher->has_pending_request()); | 3036 EXPECT_TRUE(fetcher->has_pending_request()); |
| 3028 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 3037 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 3029 | 3038 |
| 3030 // Nothing has been sent to the factory yet. | 3039 // Nothing has been sent to the factory yet. |
| 3031 EXPECT_TRUE(factory->pending_requests().empty()); | 3040 EXPECT_TRUE(factory->pending_requests().empty()); |
| 3032 | 3041 |
| 3033 // At this point the ProxyService should be waiting for the | 3042 // At this point the ProxyService should be waiting for the |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3076 ASSERT_TRUE(factory->pending_requests().empty()); | 3085 ASSERT_TRUE(factory->pending_requests().empty()); |
| 3077 ASSERT_TRUE(resolver.pending_requests().empty()); | 3086 ASSERT_TRUE(resolver.pending_requests().empty()); |
| 3078 | 3087 |
| 3079 // At this point the ProxyService is still running the same PAC script as | 3088 // At this point the ProxyService is still running the same PAC script as |
| 3080 // before. | 3089 // before. |
| 3081 | 3090 |
| 3082 // Start a second request. | 3091 // Start a second request. |
| 3083 ProxyInfo info2; | 3092 ProxyInfo info2; |
| 3084 TestCompletionCallback callback2; | 3093 TestCompletionCallback callback2; |
| 3085 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, | 3094 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| 3086 callback2.callback(), NULL, NULL, BoundNetLog()); | 3095 callback2.callback(), nullptr, nullptr, "", |
| 3096 BoundNetLog()); | |
| 3087 EXPECT_EQ(ERR_IO_PENDING, rv); | 3097 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3088 | 3098 |
| 3089 // Check that it was sent to the resolver. | 3099 // Check that it was sent to the resolver. |
| 3090 ASSERT_EQ(1u, resolver.pending_requests().size()); | 3100 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 3091 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); | 3101 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); |
| 3092 | 3102 |
| 3093 // Complete the pending second request. | 3103 // Complete the pending second request. |
| 3094 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); | 3104 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| 3095 resolver.pending_requests()[0]->CompleteNow(OK); | 3105 resolver.pending_requests()[0]->CompleteNow(OK); |
| 3096 | 3106 |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 3110 ProxyService::set_pac_script_poll_policy(&poll_policy); | 3120 ProxyService::set_pac_script_poll_policy(&poll_policy); |
| 3111 | 3121 |
| 3112 MockProxyConfigService* config_service = | 3122 MockProxyConfigService* config_service = |
| 3113 new MockProxyConfigService("http://foopy/proxy.pac"); | 3123 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 3114 | 3124 |
| 3115 MockAsyncProxyResolver resolver; | 3125 MockAsyncProxyResolver resolver; |
| 3116 MockAsyncProxyResolverFactory* factory = | 3126 MockAsyncProxyResolverFactory* factory = |
| 3117 new MockAsyncProxyResolverFactory(true); | 3127 new MockAsyncProxyResolverFactory(true); |
| 3118 | 3128 |
| 3119 ProxyService service(make_scoped_ptr(config_service), | 3129 ProxyService service(make_scoped_ptr(config_service), |
| 3120 make_scoped_ptr(factory), NULL); | 3130 make_scoped_ptr(factory), nullptr); |
| 3121 | 3131 |
| 3122 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 3132 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 3123 service.SetProxyScriptFetchers( | 3133 service.SetProxyScriptFetchers( |
| 3124 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 3134 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 3125 | 3135 |
| 3126 // Start 1 request. | 3136 // Start 1 request. |
| 3127 | 3137 |
| 3128 ProxyInfo info1; | 3138 ProxyInfo info1; |
| 3129 TestCompletionCallback callback1; | 3139 TestCompletionCallback callback1; |
| 3130 int rv = | 3140 int rv = service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| 3131 service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, | 3141 callback1.callback(), nullptr, nullptr, "", |
| 3132 callback1.callback(), NULL, NULL, BoundNetLog()); | 3142 BoundNetLog()); |
| 3133 EXPECT_EQ(ERR_IO_PENDING, rv); | 3143 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3134 | 3144 |
| 3135 // The first request should have triggered initial download of PAC script. | 3145 // The first request should have triggered initial download of PAC script. |
| 3136 EXPECT_TRUE(fetcher->has_pending_request()); | 3146 EXPECT_TRUE(fetcher->has_pending_request()); |
| 3137 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 3147 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 3138 | 3148 |
| 3139 // Nothing has been sent to the factory yet. | 3149 // Nothing has been sent to the factory yet. |
| 3140 EXPECT_TRUE(factory->pending_requests().empty()); | 3150 EXPECT_TRUE(factory->pending_requests().empty()); |
| 3141 | 3151 |
| 3142 // At this point the ProxyService should be waiting for the | 3152 // At this point the ProxyService should be waiting for the |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3182 | 3192 |
| 3183 base::MessageLoop::current()->RunUntilIdle(); | 3193 base::MessageLoop::current()->RunUntilIdle(); |
| 3184 | 3194 |
| 3185 // At this point the ProxyService should have re-configured itself to use | 3195 // At this point the ProxyService should have re-configured itself to use |
| 3186 // DIRECT connections rather than the given proxy resolver. | 3196 // DIRECT connections rather than the given proxy resolver. |
| 3187 | 3197 |
| 3188 // Start a second request. | 3198 // Start a second request. |
| 3189 ProxyInfo info2; | 3199 ProxyInfo info2; |
| 3190 TestCompletionCallback callback2; | 3200 TestCompletionCallback callback2; |
| 3191 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, | 3201 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| 3192 callback2.callback(), NULL, NULL, BoundNetLog()); | 3202 callback2.callback(), nullptr, nullptr, "", |
| 3203 BoundNetLog()); | |
| 3193 EXPECT_EQ(OK, rv); | 3204 EXPECT_EQ(OK, rv); |
| 3194 EXPECT_TRUE(info2.is_direct()); | 3205 EXPECT_TRUE(info2.is_direct()); |
| 3195 } | 3206 } |
| 3196 | 3207 |
| 3197 // Tests that the code which decides at what times to poll the PAC | 3208 // Tests that the code which decides at what times to poll the PAC |
| 3198 // script follows the expected policy. | 3209 // script follows the expected policy. |
| 3199 TEST_F(ProxyServiceTest, PACScriptPollingPolicy) { | 3210 TEST_F(ProxyServiceTest, PACScriptPollingPolicy) { |
| 3200 // Retrieve the internal polling policy implementation used by ProxyService. | 3211 // Retrieve the internal polling policy implementation used by ProxyService. |
| 3201 scoped_ptr<ProxyService::PacPollPolicy> policy = | 3212 scoped_ptr<ProxyService::PacPollPolicy> policy = |
| 3202 ProxyService::CreateDefaultPacPollPolicy(); | 3213 ProxyService::CreateDefaultPacPollPolicy(); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3264 ProxyService::set_pac_script_poll_policy(&poll_policy); | 3275 ProxyService::set_pac_script_poll_policy(&poll_policy); |
| 3265 | 3276 |
| 3266 MockProxyConfigService* config_service = | 3277 MockProxyConfigService* config_service = |
| 3267 new MockProxyConfigService("http://foopy/proxy.pac"); | 3278 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 3268 | 3279 |
| 3269 MockAsyncProxyResolver resolver; | 3280 MockAsyncProxyResolver resolver; |
| 3270 MockAsyncProxyResolverFactory* factory = | 3281 MockAsyncProxyResolverFactory* factory = |
| 3271 new MockAsyncProxyResolverFactory(true); | 3282 new MockAsyncProxyResolverFactory(true); |
| 3272 | 3283 |
| 3273 ProxyService service(make_scoped_ptr(config_service), | 3284 ProxyService service(make_scoped_ptr(config_service), |
| 3274 make_scoped_ptr(factory), NULL); | 3285 make_scoped_ptr(factory), nullptr); |
| 3275 | 3286 |
| 3276 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; | 3287 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; |
| 3277 service.SetProxyScriptFetchers( | 3288 service.SetProxyScriptFetchers( |
| 3278 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); | 3289 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); |
| 3279 | 3290 |
| 3280 // Start 1 request. | 3291 // Start 1 request. |
| 3281 | 3292 |
| 3282 ProxyInfo info1; | 3293 ProxyInfo info1; |
| 3283 TestCompletionCallback callback1; | 3294 TestCompletionCallback callback1; |
| 3284 int rv = | 3295 int rv = service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, |
| 3285 service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, | 3296 callback1.callback(), nullptr, nullptr, "", |
| 3286 callback1.callback(), NULL, NULL, BoundNetLog()); | 3297 BoundNetLog()); |
| 3287 EXPECT_EQ(ERR_IO_PENDING, rv); | 3298 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3288 | 3299 |
| 3289 // The first request should have triggered initial download of PAC script. | 3300 // The first request should have triggered initial download of PAC script. |
| 3290 EXPECT_TRUE(fetcher->has_pending_request()); | 3301 EXPECT_TRUE(fetcher->has_pending_request()); |
| 3291 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 3302 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 3292 | 3303 |
| 3293 // Nothing has been sent to the factory yet. | 3304 // Nothing has been sent to the factory yet. |
| 3294 EXPECT_TRUE(factory->pending_requests().empty()); | 3305 EXPECT_TRUE(factory->pending_requests().empty()); |
| 3295 | 3306 |
| 3296 // At this point the ProxyService should be waiting for the | 3307 // At this point the ProxyService should be waiting for the |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 3320 // (i.e. another call to ResolveProxy()). | 3331 // (i.e. another call to ResolveProxy()). |
| 3321 | 3332 |
| 3322 ASSERT_FALSE(fetcher->has_pending_request()); | 3333 ASSERT_FALSE(fetcher->has_pending_request()); |
| 3323 ASSERT_TRUE(factory->pending_requests().empty()); | 3334 ASSERT_TRUE(factory->pending_requests().empty()); |
| 3324 ASSERT_TRUE(resolver.pending_requests().empty()); | 3335 ASSERT_TRUE(resolver.pending_requests().empty()); |
| 3325 | 3336 |
| 3326 // Start a second request. | 3337 // Start a second request. |
| 3327 ProxyInfo info2; | 3338 ProxyInfo info2; |
| 3328 TestCompletionCallback callback2; | 3339 TestCompletionCallback callback2; |
| 3329 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, | 3340 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, |
| 3330 callback2.callback(), NULL, NULL, BoundNetLog()); | 3341 callback2.callback(), nullptr, nullptr, "", |
| 3342 BoundNetLog()); | |
| 3331 EXPECT_EQ(ERR_IO_PENDING, rv); | 3343 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3332 | 3344 |
| 3333 // This request should have sent work to the resolver; complete it. | 3345 // This request should have sent work to the resolver; complete it. |
| 3334 ASSERT_EQ(1u, resolver.pending_requests().size()); | 3346 ASSERT_EQ(1u, resolver.pending_requests().size()); |
| 3335 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); | 3347 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); |
| 3336 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); | 3348 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); |
| 3337 resolver.pending_requests()[0]->CompleteNow(OK); | 3349 resolver.pending_requests()[0]->CompleteNow(OK); |
| 3338 | 3350 |
| 3339 EXPECT_EQ(OK, callback2.WaitForResult()); | 3351 EXPECT_EQ(OK, callback2.WaitForResult()); |
| 3340 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); | 3352 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); |
| 3341 | 3353 |
| 3342 // In response to getting that resolve request, the poller should have | 3354 // In response to getting that resolve request, the poller should have |
| 3343 // started the next poll, and made it as far as to request the download. | 3355 // started the next poll, and made it as far as to request the download. |
| 3344 | 3356 |
| 3345 EXPECT_TRUE(fetcher->has_pending_request()); | 3357 EXPECT_TRUE(fetcher->has_pending_request()); |
| 3346 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); | 3358 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); |
| 3347 | 3359 |
| 3348 // This time we will fail the download, to simulate a PAC script change. | 3360 // This time we will fail the download, to simulate a PAC script change. |
| 3349 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); | 3361 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); |
| 3350 | 3362 |
| 3351 // Drain the message loop, so ProxyService is notified of the change | 3363 // Drain the message loop, so ProxyService is notified of the change |
| 3352 // and has a chance to re-configure itself. | 3364 // and has a chance to re-configure itself. |
| 3353 base::MessageLoop::current()->RunUntilIdle(); | 3365 base::MessageLoop::current()->RunUntilIdle(); |
| 3354 | 3366 |
| 3355 // Start a third request -- this time we expect to get a direct connection | 3367 // Start a third request -- this time we expect to get a direct connection |
| 3356 // since the PAC script poller experienced a failure. | 3368 // since the PAC script poller experienced a failure. |
| 3357 ProxyInfo info3; | 3369 ProxyInfo info3; |
| 3358 TestCompletionCallback callback3; | 3370 TestCompletionCallback callback3; |
| 3359 rv = service.ResolveProxy(GURL("http://request3"), LOAD_NORMAL, &info3, | 3371 rv = service.ResolveProxy(GURL("http://request3"), LOAD_NORMAL, &info3, |
| 3360 callback3.callback(), NULL, NULL, BoundNetLog()); | 3372 callback3.callback(), nullptr, nullptr, "", |
| 3373 BoundNetLog()); | |
| 3361 EXPECT_EQ(OK, rv); | 3374 EXPECT_EQ(OK, rv); |
| 3362 EXPECT_TRUE(info3.is_direct()); | 3375 EXPECT_TRUE(info3.is_direct()); |
| 3363 } | 3376 } |
| 3364 | 3377 |
| 3365 // Test that the synchronous resolution fails when a PAC script is active. | 3378 // Test that the synchronous resolution fails when a PAC script is active. |
| 3366 TEST_F(ProxyServiceTest, SynchronousWithPAC) { | 3379 TEST_F(ProxyServiceTest, SynchronousWithPAC) { |
| 3367 MockProxyConfigService* config_service = | 3380 MockProxyConfigService* config_service = |
| 3368 new MockProxyConfigService("http://foopy/proxy.pac"); | 3381 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 3369 | 3382 |
| 3370 MockAsyncProxyResolverFactory* factory = | 3383 MockAsyncProxyResolverFactory* factory = |
| 3371 new MockAsyncProxyResolverFactory(false); | 3384 new MockAsyncProxyResolverFactory(false); |
| 3372 | 3385 |
| 3373 ProxyService service(make_scoped_ptr(config_service), | 3386 ProxyService service(make_scoped_ptr(config_service), |
| 3374 make_scoped_ptr(factory), NULL); | 3387 make_scoped_ptr(factory), nullptr); |
| 3375 | 3388 |
| 3376 GURL url("http://www.google.com/"); | 3389 GURL url("http://www.google.com/"); |
| 3377 | 3390 |
| 3378 ProxyInfo info; | 3391 ProxyInfo info; |
| 3379 info.UseDirect(); | 3392 info.UseDirect(); |
| 3380 BoundTestNetLog log; | 3393 BoundTestNetLog log; |
| 3381 | 3394 |
| 3382 bool synchronous_success = service.TryResolveProxySynchronously( | 3395 bool synchronous_success = service.TryResolveProxySynchronously( |
| 3383 url, LOAD_NORMAL, &info, NULL, log.bound()); | 3396 url, LOAD_NORMAL, &info, nullptr, "", log.bound()); |
| 3384 EXPECT_FALSE(synchronous_success); | 3397 EXPECT_FALSE(synchronous_success); |
| 3385 | 3398 |
| 3386 // |info| should not have been modified. | 3399 // |info| should not have been modified. |
| 3387 EXPECT_TRUE(info.is_direct()); | 3400 EXPECT_TRUE(info.is_direct()); |
| 3388 } | 3401 } |
| 3389 | 3402 |
| 3390 // Test that synchronous results are returned correctly if a fixed proxy | 3403 // Test that synchronous results are returned correctly if a fixed proxy |
| 3391 // configuration is active. | 3404 // configuration is active. |
| 3392 TEST_F(ProxyServiceTest, SynchronousWithFixedConfiguration) { | 3405 TEST_F(ProxyServiceTest, SynchronousWithFixedConfiguration) { |
| 3393 ProxyConfig config; | 3406 ProxyConfig config; |
| 3394 config.proxy_rules().ParseFromString("foopy1:8080"); | 3407 config.proxy_rules().ParseFromString("foopy1:8080"); |
| 3395 config.set_auto_detect(false); | 3408 config.set_auto_detect(false); |
| 3396 | 3409 |
| 3397 MockAsyncProxyResolverFactory* factory = | 3410 MockAsyncProxyResolverFactory* factory = |
| 3398 new MockAsyncProxyResolverFactory(false); | 3411 new MockAsyncProxyResolverFactory(false); |
| 3399 | 3412 |
| 3400 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), | 3413 ProxyService service(make_scoped_ptr(new MockProxyConfigService(config)), |
| 3401 make_scoped_ptr(factory), NULL); | 3414 make_scoped_ptr(factory), nullptr); |
| 3402 | 3415 |
| 3403 GURL url("http://www.google.com/"); | 3416 GURL url("http://www.google.com/"); |
| 3404 | 3417 |
| 3405 ProxyInfo info; | 3418 ProxyInfo info; |
| 3406 BoundTestNetLog log; | 3419 BoundTestNetLog log; |
| 3407 | 3420 |
| 3408 bool synchronous_success = service.TryResolveProxySynchronously( | 3421 bool synchronous_success = service.TryResolveProxySynchronously( |
| 3409 url, LOAD_NORMAL, &info, NULL, log.bound()); | 3422 url, LOAD_NORMAL, &info, nullptr, "", log.bound()); |
| 3410 EXPECT_TRUE(synchronous_success); | 3423 EXPECT_TRUE(synchronous_success); |
| 3411 EXPECT_FALSE(info.is_direct()); | 3424 EXPECT_FALSE(info.is_direct()); |
| 3412 EXPECT_EQ("foopy1", info.proxy_server().host_port_pair().host()); | 3425 EXPECT_EQ("foopy1", info.proxy_server().host_port_pair().host()); |
| 3413 | 3426 |
| 3414 // No request should have been queued. | 3427 // No request should have been queued. |
| 3415 EXPECT_EQ(0u, factory->pending_requests().size()); | 3428 EXPECT_EQ(0u, factory->pending_requests().size()); |
| 3416 } | 3429 } |
| 3417 | 3430 |
| 3418 } // namespace net | 3431 } // namespace net |
| OLD | NEW |