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