Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(322)

Side by Side Diff: net/proxy/proxy_service_unittest.cc

Issue 2110973002: Removing load_flags from ProxyService and ProxyDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/proxy/proxy_service_mojo_unittest.cc ('k') | net/url_request/url_request_ftp_job.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/format_macros.h" 11 #include "base/format_macros.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/run_loop.h" 15 #include "base/run_loop.h"
16 #include "base/strings/string_util.h" 16 #include "base/strings/string_util.h"
17 #include "base/strings/utf_string_conversions.h" 17 #include "base/strings/utf_string_conversions.h"
18 #include "net/base/load_flags.h"
19 #include "net/base/net_errors.h" 18 #include "net/base/net_errors.h"
20 #include "net/base/proxy_delegate.h" 19 #include "net/base/proxy_delegate.h"
21 #include "net/base/test_completion_callback.h" 20 #include "net/base/test_completion_callback.h"
22 #include "net/log/net_log.h" 21 #include "net/log/net_log.h"
23 #include "net/log/test_net_log.h" 22 #include "net/log/test_net_log.h"
24 #include "net/log/test_net_log_entry.h" 23 #include "net/log/test_net_log_entry.h"
25 #include "net/log/test_net_log_util.h" 24 #include "net/log/test_net_log_util.h"
26 #include "net/proxy/dhcp_proxy_script_fetcher.h" 25 #include "net/proxy/dhcp_proxy_script_fetcher.h"
27 #include "net/proxy/mock_proxy_resolver.h" 26 #include "net/proxy/mock_proxy_resolver.h"
28 #include "net/proxy/mock_proxy_script_fetcher.h" 27 #include "net/proxy/mock_proxy_script_fetcher.h"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 class TestResolveProxyDelegate : public ProxyDelegate { 172 class TestResolveProxyDelegate : public ProxyDelegate {
174 public: 173 public:
175 TestResolveProxyDelegate() 174 TestResolveProxyDelegate()
176 : on_resolve_proxy_called_(false), 175 : on_resolve_proxy_called_(false),
177 add_proxy_(false), 176 add_proxy_(false),
178 remove_proxy_(false), 177 remove_proxy_(false),
179 proxy_service_(nullptr) {} 178 proxy_service_(nullptr) {}
180 179
181 void OnResolveProxy(const GURL& url, 180 void OnResolveProxy(const GURL& url,
182 const std::string& method, 181 const std::string& method,
183 int load_flags,
184 const ProxyService& proxy_service, 182 const ProxyService& proxy_service,
185 ProxyInfo* result) override { 183 ProxyInfo* result) override {
186 method_ = method; 184 method_ = method;
187 on_resolve_proxy_called_ = true; 185 on_resolve_proxy_called_ = true;
188 proxy_service_ = &proxy_service; 186 proxy_service_ = &proxy_service;
189 DCHECK(!add_proxy_ || !remove_proxy_); 187 DCHECK(!add_proxy_ || !remove_proxy_);
190 if (add_proxy_) { 188 if (add_proxy_) {
191 result->UseNamedProxy("delegate_proxy.com"); 189 result->UseNamedProxy("delegate_proxy.com");
192 } else if (remove_proxy_) { 190 } else if (remove_proxy_) {
193 result->UseDirect(); 191 result->UseDirect();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 234
237 // A test network delegate that exercises the OnProxyFallback callback. 235 // A test network delegate that exercises the OnProxyFallback callback.
238 class TestProxyFallbackProxyDelegate : public ProxyDelegate { 236 class TestProxyFallbackProxyDelegate : public ProxyDelegate {
239 public: 237 public:
240 TestProxyFallbackProxyDelegate() 238 TestProxyFallbackProxyDelegate()
241 : on_proxy_fallback_called_(false), proxy_fallback_net_error_(OK) {} 239 : on_proxy_fallback_called_(false), proxy_fallback_net_error_(OK) {}
242 240
243 // ProxyDelegate implementation: 241 // ProxyDelegate implementation:
244 void OnResolveProxy(const GURL& url, 242 void OnResolveProxy(const GURL& url,
245 const std::string& method, 243 const std::string& method,
246 int load_flags,
247 const ProxyService& proxy_service, 244 const ProxyService& proxy_service,
248 ProxyInfo* result) override {} 245 ProxyInfo* result) override {}
249 void OnTunnelConnectCompleted(const HostPortPair& endpoint, 246 void OnTunnelConnectCompleted(const HostPortPair& endpoint,
250 const HostPortPair& proxy_server, 247 const HostPortPair& proxy_server,
251 int net_error) override {} 248 int net_error) override {}
252 void OnFallback(const ProxyServer& bad_proxy, int net_error) override { 249 void OnFallback(const ProxyServer& bad_proxy, int net_error) override {
253 proxy_server_ = bad_proxy; 250 proxy_server_ = bad_proxy;
254 proxy_fallback_net_error_ = net_error; 251 proxy_fallback_net_error_ = net_error;
255 on_proxy_fallback_called_ = true; 252 on_proxy_fallback_called_ = true;
256 } 253 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 new MockAsyncProxyResolverFactory(false); 352 new MockAsyncProxyResolverFactory(false);
356 ProxyService service( 353 ProxyService service(
357 base::WrapUnique(new MockProxyConfigService(ProxyConfig::CreateDirect())), 354 base::WrapUnique(new MockProxyConfigService(ProxyConfig::CreateDirect())),
358 base::WrapUnique(factory), nullptr); 355 base::WrapUnique(factory), nullptr);
359 356
360 GURL url("http://www.google.com/"); 357 GURL url("http://www.google.com/");
361 358
362 ProxyInfo info; 359 ProxyInfo info;
363 TestCompletionCallback callback; 360 TestCompletionCallback callback;
364 BoundTestNetLog log; 361 BoundTestNetLog log;
365 int rv = 362 int rv = service.ResolveProxy(url, std::string(), &info, callback.callback(),
366 service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 363 nullptr, nullptr, log.bound());
367 callback.callback(), nullptr, nullptr, log.bound());
368 EXPECT_THAT(rv, IsOk()); 364 EXPECT_THAT(rv, IsOk());
369 EXPECT_TRUE(factory->pending_requests().empty()); 365 EXPECT_TRUE(factory->pending_requests().empty());
370 366
371 EXPECT_TRUE(info.is_direct()); 367 EXPECT_TRUE(info.is_direct());
372 EXPECT_TRUE(info.proxy_resolve_start_time().is_null()); 368 EXPECT_TRUE(info.proxy_resolve_start_time().is_null());
373 EXPECT_TRUE(info.proxy_resolve_end_time().is_null()); 369 EXPECT_TRUE(info.proxy_resolve_end_time().is_null());
374 370
375 // Check the NetLog was filled correctly. 371 // Check the NetLog was filled correctly.
376 TestNetLogEntry::List entries; 372 TestNetLogEntry::List entries;
377 log.GetEntries(&entries); 373 log.GetEntries(&entries);
(...skipping 18 matching lines...) Expand all
396 nullptr, nullptr); 392 nullptr, nullptr);
397 393
398 GURL url("http://www.google.com/"); 394 GURL url("http://www.google.com/");
399 GURL bypass_url("http://internet.org"); 395 GURL bypass_url("http://internet.org");
400 396
401 ProxyInfo info; 397 ProxyInfo info;
402 TestCompletionCallback callback; 398 TestCompletionCallback callback;
403 BoundTestNetLog log; 399 BoundTestNetLog log;
404 400
405 // First, warm up the ProxyService. 401 // First, warm up the ProxyService.
406 int rv = 402 int rv = service.ResolveProxy(url, std::string(), &info, callback.callback(),
407 service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 403 nullptr, nullptr, log.bound());
408 callback.callback(), nullptr, nullptr, log.bound());
409 EXPECT_THAT(rv, IsOk()); 404 EXPECT_THAT(rv, IsOk());
410 405
411 // Verify that network delegate is invoked. 406 // Verify that network delegate is invoked.
412 TestResolveProxyDelegate delegate; 407 TestResolveProxyDelegate delegate;
413 rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(), 408 rv = service.ResolveProxy(url, "GET", &info, callback.callback(), nullptr,
414 nullptr, &delegate, log.bound()); 409 &delegate, log.bound());
415 EXPECT_TRUE(delegate.on_resolve_proxy_called()); 410 EXPECT_TRUE(delegate.on_resolve_proxy_called());
416 EXPECT_EQ(&service, delegate.proxy_service()); 411 EXPECT_EQ(&service, delegate.proxy_service());
417 EXPECT_EQ(delegate.method(), "GET"); 412 EXPECT_EQ(delegate.method(), "GET");
418 413
419 // Verify that the ProxyDelegate's behavior is stateless across 414 // Verify that the ProxyDelegate's behavior is stateless across
420 // invocations of ResolveProxy. Start by having the callback add a proxy 415 // invocations of ResolveProxy. Start by having the callback add a proxy
421 // and checking that subsequent requests are not affected. 416 // and checking that subsequent requests are not affected.
422 delegate.set_add_proxy(true); 417 delegate.set_add_proxy(true);
423 418
424 // Callback should interpose: 419 // Callback should interpose:
425 rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(), 420 rv = service.ResolveProxy(url, "GET", &info, callback.callback(), nullptr,
426 nullptr, &delegate, log.bound()); 421 &delegate, log.bound());
427 EXPECT_FALSE(info.is_direct()); 422 EXPECT_FALSE(info.is_direct());
428 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "delegate_proxy.com"); 423 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "delegate_proxy.com");
429 delegate.set_add_proxy(false); 424 delegate.set_add_proxy(false);
430 425
431 // Check non-bypassed URL: 426 // Check non-bypassed URL:
432 rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(), 427 rv = service.ResolveProxy(url, "GET", &info, callback.callback(), nullptr,
433 nullptr, &delegate, log.bound()); 428 &delegate, log.bound());
434 EXPECT_FALSE(info.is_direct()); 429 EXPECT_FALSE(info.is_direct());
435 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "foopy1"); 430 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "foopy1");
436 431
437 // Check bypassed URL: 432 // Check bypassed URL:
438 rv = service.ResolveProxy(bypass_url, "GET", LOAD_NORMAL, &info, 433 rv = service.ResolveProxy(bypass_url, "GET", &info, callback.callback(),
439 callback.callback(), nullptr, &delegate, 434 nullptr, &delegate, log.bound());
440 log.bound());
441 EXPECT_TRUE(info.is_direct()); 435 EXPECT_TRUE(info.is_direct());
442 } 436 }
443 437
444 TEST_F(ProxyServiceTest, OnResolveProxyCallbackRemoveProxy) { 438 TEST_F(ProxyServiceTest, OnResolveProxyCallbackRemoveProxy) {
445 // Same as OnResolveProxyCallbackAddProxy, but verify that the 439 // Same as OnResolveProxyCallbackAddProxy, but verify that the
446 // ProxyDelegate's behavior is stateless across invocations after it 440 // ProxyDelegate's behavior is stateless across invocations after it
447 // *removes* a proxy. 441 // *removes* a proxy.
448 ProxyConfig config; 442 ProxyConfig config;
449 config.proxy_rules().ParseFromString("foopy1:8080"); 443 config.proxy_rules().ParseFromString("foopy1:8080");
450 config.set_auto_detect(false); 444 config.set_auto_detect(false);
451 config.proxy_rules().bypass_rules.ParseFromString("*.org"); 445 config.proxy_rules().bypass_rules.ParseFromString("*.org");
452 446
453 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 447 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
454 nullptr, nullptr); 448 nullptr, nullptr);
455 449
456 GURL url("http://www.google.com/"); 450 GURL url("http://www.google.com/");
457 GURL bypass_url("http://internet.org"); 451 GURL bypass_url("http://internet.org");
458 452
459 ProxyInfo info; 453 ProxyInfo info;
460 TestCompletionCallback callback; 454 TestCompletionCallback callback;
461 BoundTestNetLog log; 455 BoundTestNetLog log;
462 456
463 // First, warm up the ProxyService. 457 // First, warm up the ProxyService.
464 int rv = 458 int rv = service.ResolveProxy(url, std::string(), &info, callback.callback(),
465 service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 459 nullptr, nullptr, log.bound());
466 callback.callback(), nullptr, nullptr, log.bound());
467 EXPECT_THAT(rv, IsOk()); 460 EXPECT_THAT(rv, IsOk());
468 461
469 TestResolveProxyDelegate delegate; 462 TestResolveProxyDelegate delegate;
470 delegate.set_remove_proxy(true); 463 delegate.set_remove_proxy(true);
471 464
472 // Callback should interpose: 465 // Callback should interpose:
473 rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(), 466 rv = service.ResolveProxy(url, "GET", &info, callback.callback(), nullptr,
474 nullptr, &delegate, log.bound()); 467 &delegate, log.bound());
475 EXPECT_TRUE(info.is_direct()); 468 EXPECT_TRUE(info.is_direct());
476 delegate.set_remove_proxy(false); 469 delegate.set_remove_proxy(false);
477 470
478 // Check non-bypassed URL: 471 // Check non-bypassed URL:
479 rv = service.ResolveProxy(url, "GET", LOAD_NORMAL, &info, callback.callback(), 472 rv = service.ResolveProxy(url, "GET", &info, callback.callback(), nullptr,
480 nullptr, &delegate, log.bound()); 473 &delegate, log.bound());
481 EXPECT_FALSE(info.is_direct()); 474 EXPECT_FALSE(info.is_direct());
482 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "foopy1"); 475 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "foopy1");
483 476
484 // Check bypassed URL: 477 // Check bypassed URL:
485 rv = service.ResolveProxy(bypass_url, "GET", LOAD_NORMAL, &info, 478 rv = service.ResolveProxy(bypass_url, "GET", &info, callback.callback(),
486 callback.callback(), nullptr, &delegate, 479 nullptr, &delegate, log.bound());
487 log.bound());
488 EXPECT_TRUE(info.is_direct()); 480 EXPECT_TRUE(info.is_direct());
489 } 481 }
490 482
491 TEST_F(ProxyServiceTest, PAC) { 483 TEST_F(ProxyServiceTest, PAC) {
492 MockProxyConfigService* config_service = 484 MockProxyConfigService* config_service =
493 new MockProxyConfigService("http://foopy/proxy.pac"); 485 new MockProxyConfigService("http://foopy/proxy.pac");
494 486
495 MockAsyncProxyResolver resolver; 487 MockAsyncProxyResolver resolver;
496 MockAsyncProxyResolverFactory* factory = 488 MockAsyncProxyResolverFactory* factory =
497 new MockAsyncProxyResolverFactory(false); 489 new MockAsyncProxyResolverFactory(false);
498 490
499 ProxyService service(base::WrapUnique(config_service), 491 ProxyService service(base::WrapUnique(config_service),
500 base::WrapUnique(factory), nullptr); 492 base::WrapUnique(factory), nullptr);
501 493
502 GURL url("http://www.google.com/"); 494 GURL url("http://www.google.com/");
503 495
504 ProxyInfo info; 496 ProxyInfo info;
505 TestCompletionCallback callback; 497 TestCompletionCallback callback;
506 ProxyService::PacRequest* request; 498 ProxyService::PacRequest* request;
507 BoundTestNetLog log; 499 BoundTestNetLog log;
508 500
509 int rv = 501 int rv = service.ResolveProxy(url, std::string(), &info, callback.callback(),
510 service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 502 &request, nullptr, log.bound());
511 callback.callback(), &request, nullptr, log.bound());
512 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 503 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
513 504
514 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request)); 505 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request));
515 506
516 ASSERT_EQ(1u, factory->pending_requests().size()); 507 ASSERT_EQ(1u, factory->pending_requests().size());
517 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 508 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
518 factory->pending_requests()[0]->script_data()->url()); 509 factory->pending_requests()[0]->script_data()->url());
519 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 510 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
520 511
521 ASSERT_EQ(1u, resolver.pending_requests().size()); 512 ASSERT_EQ(1u, resolver.pending_requests().size());
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 MockAsyncProxyResolverFactory* factory = 550 MockAsyncProxyResolverFactory* factory =
560 new MockAsyncProxyResolverFactory(false); 551 new MockAsyncProxyResolverFactory(false);
561 552
562 ProxyService service(base::WrapUnique(config_service), 553 ProxyService service(base::WrapUnique(config_service),
563 base::WrapUnique(factory), nullptr); 554 base::WrapUnique(factory), nullptr);
564 555
565 GURL url("http://username:password@www.google.com/?ref#hash#hash"); 556 GURL url("http://username:password@www.google.com/?ref#hash#hash");
566 557
567 ProxyInfo info; 558 ProxyInfo info;
568 TestCompletionCallback callback; 559 TestCompletionCallback callback;
569 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 560 int rv = service.ResolveProxy(url, std::string(), &info, callback.callback(),
570 callback.callback(), nullptr, nullptr, 561 nullptr, nullptr, BoundNetLog());
571 BoundNetLog());
572 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 562 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
573 563
574 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 564 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
575 factory->pending_requests()[0]->script_data()->url()); 565 factory->pending_requests()[0]->script_data()->url());
576 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 566 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
577 567
578 ASSERT_EQ(1u, resolver.pending_requests().size()); 568 ASSERT_EQ(1u, resolver.pending_requests().size());
579 // The URL should have been simplified, stripping the username/password/hash. 569 // The URL should have been simplified, stripping the username/password/hash.
580 EXPECT_EQ(GURL("http://www.google.com/?ref"), 570 EXPECT_EQ(GURL("http://www.google.com/?ref"),
581 resolver.pending_requests()[0]->url()); 571 resolver.pending_requests()[0]->url());
582 572
583 // We end here without ever completing the request -- destruction of 573 // We end here without ever completing the request -- destruction of
584 // ProxyService will cancel the outstanding request. 574 // ProxyService will cancel the outstanding request.
585 } 575 }
586 576
587 TEST_F(ProxyServiceTest, PAC_FailoverWithoutDirect) { 577 TEST_F(ProxyServiceTest, PAC_FailoverWithoutDirect) {
588 MockProxyConfigService* config_service = 578 MockProxyConfigService* config_service =
589 new MockProxyConfigService("http://foopy/proxy.pac"); 579 new MockProxyConfigService("http://foopy/proxy.pac");
590 MockAsyncProxyResolver resolver; 580 MockAsyncProxyResolver resolver;
591 MockAsyncProxyResolverFactory* factory = 581 MockAsyncProxyResolverFactory* factory =
592 new MockAsyncProxyResolverFactory(false); 582 new MockAsyncProxyResolverFactory(false);
593 583
594 ProxyService service(base::WrapUnique(config_service), 584 ProxyService service(base::WrapUnique(config_service),
595 base::WrapUnique(factory), nullptr); 585 base::WrapUnique(factory), nullptr);
596 586
597 GURL url("http://www.google.com/"); 587 GURL url("http://www.google.com/");
598 588
599 ProxyInfo info; 589 ProxyInfo info;
600 TestCompletionCallback callback1; 590 TestCompletionCallback callback1;
601 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 591 int rv = service.ResolveProxy(url, std::string(), &info, callback1.callback(),
602 callback1.callback(), nullptr, nullptr, 592 nullptr, nullptr, BoundNetLog());
603 BoundNetLog());
604 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 593 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
605 594
606 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 595 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
607 factory->pending_requests()[0]->script_data()->url()); 596 factory->pending_requests()[0]->script_data()->url());
608 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 597 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
609 598
610 ASSERT_EQ(1u, resolver.pending_requests().size()); 599 ASSERT_EQ(1u, resolver.pending_requests().size());
611 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 600 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
612 601
613 // Set the result in proxy resolver. 602 // Set the result in proxy resolver.
614 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); 603 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy:8080");
615 resolver.pending_requests()[0]->CompleteNow(OK); 604 resolver.pending_requests()[0]->CompleteNow(OK);
616 605
617 EXPECT_THAT(callback1.WaitForResult(), IsOk()); 606 EXPECT_THAT(callback1.WaitForResult(), IsOk());
618 EXPECT_FALSE(info.is_direct()); 607 EXPECT_FALSE(info.is_direct());
619 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); 608 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI());
620 EXPECT_TRUE(info.did_use_pac_script()); 609 EXPECT_TRUE(info.did_use_pac_script());
621 610
622 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 611 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
623 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 612 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
624 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 613 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
625 614
626 // Now, imagine that connecting to foopy:8080 fails: there is nothing 615 // Now, imagine that connecting to foopy:8080 fails: there is nothing
627 // left to fallback to, since our proxy list was NOT terminated by 616 // left to fallback to, since our proxy list was NOT terminated by
628 // DIRECT. 617 // DIRECT.
629 TestResolveProxyDelegate proxy_delegate; 618 TestResolveProxyDelegate proxy_delegate;
630 TestCompletionCallback callback2; 619 TestCompletionCallback callback2;
631 ProxyServer expected_proxy_server = info.proxy_server(); 620 ProxyServer expected_proxy_server = info.proxy_server();
632 rv = service.ReconsiderProxyAfterError( 621 rv = service.ReconsiderProxyAfterError(
633 url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 622 url, "GET", ERR_PROXY_CONNECTION_FAILED, &info, callback2.callback(),
634 callback2.callback(), nullptr, &proxy_delegate, BoundNetLog()); 623 nullptr, &proxy_delegate, BoundNetLog());
635 // ReconsiderProxyAfterError returns error indicating nothing left. 624 // ReconsiderProxyAfterError returns error indicating nothing left.
636 EXPECT_THAT(rv, IsError(ERR_FAILED)); 625 EXPECT_THAT(rv, IsError(ERR_FAILED));
637 EXPECT_TRUE(info.is_empty()); 626 EXPECT_TRUE(info.is_empty());
638 } 627 }
639 628
640 // Test that if the execution of the PAC script fails (i.e. javascript runtime 629 // Test that if the execution of the PAC script fails (i.e. javascript runtime
641 // error), and the PAC settings are non-mandatory, that we fall-back to direct. 630 // error), and the PAC settings are non-mandatory, that we fall-back to direct.
642 TEST_F(ProxyServiceTest, PAC_RuntimeError) { 631 TEST_F(ProxyServiceTest, PAC_RuntimeError) {
643 MockProxyConfigService* config_service = 632 MockProxyConfigService* config_service =
644 new MockProxyConfigService("http://foopy/proxy.pac"); 633 new MockProxyConfigService("http://foopy/proxy.pac");
645 MockAsyncProxyResolver resolver; 634 MockAsyncProxyResolver resolver;
646 MockAsyncProxyResolverFactory* factory = 635 MockAsyncProxyResolverFactory* factory =
647 new MockAsyncProxyResolverFactory(false); 636 new MockAsyncProxyResolverFactory(false);
648 637
649 ProxyService service(base::WrapUnique(config_service), 638 ProxyService service(base::WrapUnique(config_service),
650 base::WrapUnique(factory), nullptr); 639 base::WrapUnique(factory), nullptr);
651 640
652 GURL url("http://this-causes-js-error/"); 641 GURL url("http://this-causes-js-error/");
653 642
654 ProxyInfo info; 643 ProxyInfo info;
655 TestCompletionCallback callback1; 644 TestCompletionCallback callback1;
656 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 645 int rv = service.ResolveProxy(url, std::string(), &info, callback1.callback(),
657 callback1.callback(), nullptr, nullptr, 646 nullptr, nullptr, BoundNetLog());
658 BoundNetLog());
659 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 647 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
660 648
661 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 649 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
662 factory->pending_requests()[0]->script_data()->url()); 650 factory->pending_requests()[0]->script_data()->url());
663 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 651 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
664 652
665 ASSERT_EQ(1u, resolver.pending_requests().size()); 653 ASSERT_EQ(1u, resolver.pending_requests().size());
666 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 654 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
667 655
668 // Simulate a failure in the PAC executor. 656 // Simulate a failure in the PAC executor.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 MockAsyncProxyResolverFactory* factory = 693 MockAsyncProxyResolverFactory* factory =
706 new MockAsyncProxyResolverFactory(false); 694 new MockAsyncProxyResolverFactory(false);
707 695
708 ProxyService service(base::WrapUnique(config_service), 696 ProxyService service(base::WrapUnique(config_service),
709 base::WrapUnique(factory), nullptr); 697 base::WrapUnique(factory), nullptr);
710 698
711 GURL url("http://www.google.com/"); 699 GURL url("http://www.google.com/");
712 700
713 ProxyInfo info; 701 ProxyInfo info;
714 TestCompletionCallback callback1; 702 TestCompletionCallback callback1;
715 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 703 int rv = service.ResolveProxy(url, std::string(), &info, callback1.callback(),
716 callback1.callback(), nullptr, nullptr, 704 nullptr, nullptr, BoundNetLog());
717 BoundNetLog());
718 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 705 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
719 706
720 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 707 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
721 factory->pending_requests()[0]->script_data()->url()); 708 factory->pending_requests()[0]->script_data()->url());
722 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 709 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
723 710
724 ASSERT_EQ(1u, resolver.pending_requests().size()); 711 ASSERT_EQ(1u, resolver.pending_requests().size());
725 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 712 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
726 713
727 // Set the result in proxy resolver. 714 // Set the result in proxy resolver.
728 resolver.pending_requests()[0]->results()->UsePacString( 715 resolver.pending_requests()[0]->results()->UsePacString(
729 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); 716 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20");
730 resolver.pending_requests()[0]->CompleteNow(OK); 717 resolver.pending_requests()[0]->CompleteNow(OK);
731 718
732 EXPECT_THAT(callback1.WaitForResult(), IsOk()); 719 EXPECT_THAT(callback1.WaitForResult(), IsOk());
733 EXPECT_TRUE(info.is_direct()); 720 EXPECT_TRUE(info.is_direct());
734 721
735 // Fallback 1. 722 // Fallback 1.
736 TestCompletionCallback callback2; 723 TestCompletionCallback callback2;
737 rv = service.ReconsiderProxyAfterError( 724 rv = service.ReconsiderProxyAfterError(
738 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 725 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info,
739 callback2.callback(), nullptr, nullptr, BoundNetLog()); 726 callback2.callback(), nullptr, nullptr, BoundNetLog());
740 EXPECT_THAT(rv, IsOk()); 727 EXPECT_THAT(rv, IsOk());
741 EXPECT_FALSE(info.is_direct()); 728 EXPECT_FALSE(info.is_direct());
742 EXPECT_EQ("foobar:10", info.proxy_server().ToURI()); 729 EXPECT_EQ("foobar:10", info.proxy_server().ToURI());
743 730
744 // Fallback 2. 731 // Fallback 2.
745 TestResolveProxyDelegate proxy_delegate; 732 TestResolveProxyDelegate proxy_delegate;
746 ProxyServer expected_proxy_server3 = info.proxy_server(); 733 ProxyServer expected_proxy_server3 = info.proxy_server();
747 TestCompletionCallback callback3; 734 TestCompletionCallback callback3;
748 rv = service.ReconsiderProxyAfterError( 735 rv = service.ReconsiderProxyAfterError(
749 url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 736 url, "GET", ERR_PROXY_CONNECTION_FAILED, &info, callback3.callback(),
750 callback3.callback(), nullptr, &proxy_delegate, BoundNetLog()); 737 nullptr, &proxy_delegate, BoundNetLog());
751 EXPECT_THAT(rv, IsOk()); 738 EXPECT_THAT(rv, IsOk());
752 EXPECT_TRUE(info.is_direct()); 739 EXPECT_TRUE(info.is_direct());
753 740
754 // Fallback 3. 741 // Fallback 3.
755 ProxyServer expected_proxy_server4 = info.proxy_server(); 742 ProxyServer expected_proxy_server4 = info.proxy_server();
756 TestCompletionCallback callback4; 743 TestCompletionCallback callback4;
757 rv = service.ReconsiderProxyAfterError( 744 rv = service.ReconsiderProxyAfterError(
758 url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 745 url, "GET", ERR_PROXY_CONNECTION_FAILED, &info, callback4.callback(),
759 callback4.callback(), nullptr, &proxy_delegate, BoundNetLog()); 746 nullptr, &proxy_delegate, BoundNetLog());
760 EXPECT_THAT(rv, IsOk()); 747 EXPECT_THAT(rv, IsOk());
761 EXPECT_FALSE(info.is_direct()); 748 EXPECT_FALSE(info.is_direct());
762 EXPECT_EQ("foobar:20", info.proxy_server().ToURI()); 749 EXPECT_EQ("foobar:20", info.proxy_server().ToURI());
763 750
764 // Fallback 4 -- Nothing to fall back to! 751 // Fallback 4 -- Nothing to fall back to!
765 ProxyServer expected_proxy_server5 = info.proxy_server(); 752 ProxyServer expected_proxy_server5 = info.proxy_server();
766 TestCompletionCallback callback5; 753 TestCompletionCallback callback5;
767 rv = service.ReconsiderProxyAfterError( 754 rv = service.ReconsiderProxyAfterError(
768 url, "GET", LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 755 url, "GET", ERR_PROXY_CONNECTION_FAILED, &info, callback5.callback(),
769 callback5.callback(), nullptr, &proxy_delegate, BoundNetLog()); 756 nullptr, &proxy_delegate, BoundNetLog());
770 EXPECT_THAT(rv, IsError(ERR_FAILED)); 757 EXPECT_THAT(rv, IsError(ERR_FAILED));
771 EXPECT_TRUE(info.is_empty()); 758 EXPECT_TRUE(info.is_empty());
772 } 759 }
773 760
774 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) { 761 TEST_F(ProxyServiceTest, PAC_ConfigSourcePropagates) {
775 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied 762 // Test whether the ProxyConfigSource set by the ProxyConfigService is applied
776 // to ProxyInfo after the proxy is resolved via a PAC script. 763 // to ProxyInfo after the proxy is resolved via a PAC script.
777 ProxyConfig config = 764 ProxyConfig config =
778 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")); 765 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"));
779 config.set_source(PROXY_CONFIG_SOURCE_TEST); 766 config.set_source(PROXY_CONFIG_SOURCE_TEST);
780 767
781 MockProxyConfigService* config_service = new MockProxyConfigService(config); 768 MockProxyConfigService* config_service = new MockProxyConfigService(config);
782 MockAsyncProxyResolver resolver; 769 MockAsyncProxyResolver resolver;
783 MockAsyncProxyResolverFactory* factory = 770 MockAsyncProxyResolverFactory* factory =
784 new MockAsyncProxyResolverFactory(false); 771 new MockAsyncProxyResolverFactory(false);
785 ProxyService service(base::WrapUnique(config_service), 772 ProxyService service(base::WrapUnique(config_service),
786 base::WrapUnique(factory), nullptr); 773 base::WrapUnique(factory), nullptr);
787 774
788 // Resolve something. 775 // Resolve something.
789 GURL url("http://www.google.com/"); 776 GURL url("http://www.google.com/");
790 ProxyInfo info; 777 ProxyInfo info;
791 TestCompletionCallback callback; 778 TestCompletionCallback callback;
792 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 779 int rv = service.ResolveProxy(url, std::string(), &info, callback.callback(),
793 callback.callback(), nullptr, nullptr, 780 nullptr, nullptr, BoundNetLog());
794 BoundNetLog());
795 ASSERT_THAT(rv, IsError(ERR_IO_PENDING)); 781 ASSERT_THAT(rv, IsError(ERR_IO_PENDING));
796 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 782 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
797 ASSERT_EQ(1u, resolver.pending_requests().size()); 783 ASSERT_EQ(1u, resolver.pending_requests().size());
798 784
799 // Set the result in proxy resolver. 785 // Set the result in proxy resolver.
800 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy"); 786 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy");
801 resolver.pending_requests()[0]->CompleteNow(OK); 787 resolver.pending_requests()[0]->CompleteNow(OK);
802 788
803 EXPECT_THAT(callback.WaitForResult(), IsOk()); 789 EXPECT_THAT(callback.WaitForResult(), IsOk());
804 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); 790 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source());
(...skipping 16 matching lines...) Expand all
821 MockAsyncProxyResolverFactory* factory = 807 MockAsyncProxyResolverFactory* factory =
822 new MockAsyncProxyResolverFactory(false); 808 new MockAsyncProxyResolverFactory(false);
823 809
824 ProxyService service(base::WrapUnique(config_service), 810 ProxyService service(base::WrapUnique(config_service),
825 base::WrapUnique(factory), nullptr); 811 base::WrapUnique(factory), nullptr);
826 812
827 // Start first resolve request. 813 // Start first resolve request.
828 GURL url("http://www.google.com/"); 814 GURL url("http://www.google.com/");
829 ProxyInfo info; 815 ProxyInfo info;
830 TestCompletionCallback callback1; 816 TestCompletionCallback callback1;
831 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 817 int rv = service.ResolveProxy(url, std::string(), &info, callback1.callback(),
832 callback1.callback(), nullptr, nullptr, 818 nullptr, nullptr, BoundNetLog());
833 BoundNetLog());
834 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 819 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
835 820
836 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 821 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
837 factory->pending_requests()[0]->script_data()->url()); 822 factory->pending_requests()[0]->script_data()->url());
838 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 823 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
839 824
840 ASSERT_EQ(1u, resolver.pending_requests().size()); 825 ASSERT_EQ(1u, resolver.pending_requests().size());
841 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 826 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
842 827
843 // Fail the first resolve request in MockAsyncProxyResolver. 828 // Fail the first resolve request in MockAsyncProxyResolver.
844 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); 829 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED);
845 830
846 // Although the proxy resolver failed the request, ProxyService implicitly 831 // Although the proxy resolver failed the request, ProxyService implicitly
847 // falls-back to DIRECT. 832 // falls-back to DIRECT.
848 EXPECT_THAT(callback1.WaitForResult(), IsOk()); 833 EXPECT_THAT(callback1.WaitForResult(), IsOk());
849 EXPECT_TRUE(info.is_direct()); 834 EXPECT_TRUE(info.is_direct());
850 835
851 // Failed PAC executions still have proxy resolution times. 836 // Failed PAC executions still have proxy resolution times.
852 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 837 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
853 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 838 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
854 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 839 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
855 840
856 // The second resolve request will try to run through the proxy resolver, 841 // The second resolve request will try to run through the proxy resolver,
857 // regardless of whether the first request failed in it. 842 // regardless of whether the first request failed in it.
858 TestCompletionCallback callback2; 843 TestCompletionCallback callback2;
859 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 844 rv = service.ResolveProxy(url, std::string(), &info, callback2.callback(),
860 callback2.callback(), nullptr, nullptr, 845 nullptr, nullptr, BoundNetLog());
861 BoundNetLog());
862 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 846 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
863 847
864 ASSERT_EQ(1u, resolver.pending_requests().size()); 848 ASSERT_EQ(1u, resolver.pending_requests().size());
865 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 849 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
866 850
867 // This time we will have the resolver succeed (perhaps the PAC script has 851 // This time we will have the resolver succeed (perhaps the PAC script has
868 // a dependency on the current time). 852 // a dependency on the current time).
869 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); 853 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080");
870 resolver.pending_requests()[0]->CompleteNow(OK); 854 resolver.pending_requests()[0]->CompleteNow(OK);
871 855
(...skipping 13 matching lines...) Expand all
885 MockAsyncProxyResolverFactory* factory = 869 MockAsyncProxyResolverFactory* factory =
886 new MockAsyncProxyResolverFactory(false); 870 new MockAsyncProxyResolverFactory(false);
887 871
888 ProxyService service(base::WrapUnique(config_service), 872 ProxyService service(base::WrapUnique(config_service),
889 base::WrapUnique(factory), nullptr); 873 base::WrapUnique(factory), nullptr);
890 874
891 // Start first resolve request. 875 // Start first resolve request.
892 GURL url("http://www.google.com/"); 876 GURL url("http://www.google.com/");
893 ProxyInfo info; 877 ProxyInfo info;
894 TestCompletionCallback callback1; 878 TestCompletionCallback callback1;
895 int rv = service.ResolveProxy(url, std::string(), net::LOAD_NORMAL, &info, 879 int rv = service.ResolveProxy(url, std::string(), &info, callback1.callback(),
896 callback1.callback(), nullptr, nullptr, 880 nullptr, nullptr, BoundNetLog());
897 BoundNetLog());
898 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 881 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
899 882
900 ASSERT_EQ(1u, factory->pending_requests().size()); 883 ASSERT_EQ(1u, factory->pending_requests().size());
901 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 884 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
902 factory->pending_requests()[0]->script_data()->url()); 885 factory->pending_requests()[0]->script_data()->url());
903 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 886 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
904 887
905 ASSERT_EQ(1u, resolver.pending_requests().size()); 888 ASSERT_EQ(1u, resolver.pending_requests().size());
906 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 889 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
907 890
908 // Fail the first resolve request in MockAsyncProxyResolver. 891 // Fail the first resolve request in MockAsyncProxyResolver.
909 resolver.pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_TERMINATED); 892 resolver.pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_TERMINATED);
910 893
911 // Although the proxy resolver failed the request, ProxyService implicitly 894 // Although the proxy resolver failed the request, ProxyService implicitly
912 // falls-back to DIRECT. 895 // falls-back to DIRECT.
913 EXPECT_THAT(callback1.WaitForResult(), IsOk()); 896 EXPECT_THAT(callback1.WaitForResult(), IsOk());
914 EXPECT_TRUE(info.is_direct()); 897 EXPECT_TRUE(info.is_direct());
915 898
916 // Failed PAC executions still have proxy resolution times. 899 // Failed PAC executions still have proxy resolution times.
917 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 900 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
918 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 901 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
919 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 902 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
920 903
921 // With no other requests, the ProxyService waits for a new request before 904 // With no other requests, the ProxyService waits for a new request before
922 // initializing a new ProxyResolver. 905 // initializing a new ProxyResolver.
923 EXPECT_TRUE(factory->pending_requests().empty()); 906 EXPECT_TRUE(factory->pending_requests().empty());
924 907
925 TestCompletionCallback callback2; 908 TestCompletionCallback callback2;
926 rv = service.ResolveProxy(url, std::string(), net::LOAD_NORMAL, &info, 909 rv = service.ResolveProxy(url, std::string(), &info, callback2.callback(),
927 callback2.callback(), nullptr, nullptr, 910 nullptr, nullptr, BoundNetLog());
928 BoundNetLog());
929 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 911 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
930 912
931 ASSERT_EQ(1u, factory->pending_requests().size()); 913 ASSERT_EQ(1u, factory->pending_requests().size());
932 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 914 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
933 factory->pending_requests()[0]->script_data()->url()); 915 factory->pending_requests()[0]->script_data()->url());
934 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 916 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
935 917
936 ASSERT_EQ(1u, resolver.pending_requests().size()); 918 ASSERT_EQ(1u, resolver.pending_requests().size());
937 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 919 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
938 920
(...skipping 19 matching lines...) Expand all
958 new MockAsyncProxyResolverFactory(false); 940 new MockAsyncProxyResolverFactory(false);
959 941
960 ProxyService service(base::WrapUnique(config_service), 942 ProxyService service(base::WrapUnique(config_service),
961 base::WrapUnique(factory), nullptr); 943 base::WrapUnique(factory), nullptr);
962 944
963 // Start two resolve requests. 945 // Start two resolve requests.
964 GURL url1("http://www.google.com/"); 946 GURL url1("http://www.google.com/");
965 GURL url2("https://www.google.com/"); 947 GURL url2("https://www.google.com/");
966 ProxyInfo info; 948 ProxyInfo info;
967 TestCompletionCallback callback1; 949 TestCompletionCallback callback1;
968 int rv = service.ResolveProxy(url1, std::string(), net::LOAD_NORMAL, &info, 950 int rv =
969 callback1.callback(), nullptr, nullptr, 951 service.ResolveProxy(url1, std::string(), &info, callback1.callback(),
970 BoundNetLog()); 952 nullptr, nullptr, BoundNetLog());
971 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 953 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
972 TestCompletionCallback callback2; 954 TestCompletionCallback callback2;
973 rv = service.ResolveProxy(url2, std::string(), net::LOAD_NORMAL, &info, 955 rv = service.ResolveProxy(url2, std::string(), &info, callback2.callback(),
974 callback2.callback(), nullptr, nullptr, 956 nullptr, nullptr, BoundNetLog());
975 BoundNetLog());
976 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 957 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
977 958
978 ASSERT_EQ(1u, factory->pending_requests().size()); 959 ASSERT_EQ(1u, factory->pending_requests().size());
979 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 960 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
980 factory->pending_requests()[0]->script_data()->url()); 961 factory->pending_requests()[0]->script_data()->url());
981 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 962 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
982 963
983 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2); 964 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2);
984 965
985 // Fail the first resolve request in MockAsyncProxyResolver. 966 // Fail the first resolve request in MockAsyncProxyResolver.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 MockAsyncProxyResolverFactory* factory = 1010 MockAsyncProxyResolverFactory* factory =
1030 new MockAsyncProxyResolverFactory(false); 1011 new MockAsyncProxyResolverFactory(false);
1031 1012
1032 ProxyService service(base::WrapUnique(config_service), 1013 ProxyService service(base::WrapUnique(config_service),
1033 base::WrapUnique(factory), nullptr); 1014 base::WrapUnique(factory), nullptr);
1034 1015
1035 // Start first resolve request. 1016 // Start first resolve request.
1036 GURL url("http://www.google.com/"); 1017 GURL url("http://www.google.com/");
1037 ProxyInfo info; 1018 ProxyInfo info;
1038 TestCompletionCallback callback1; 1019 TestCompletionCallback callback1;
1039 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1020 int rv = service.ResolveProxy(url, std::string(), &info, callback1.callback(),
1040 callback1.callback(), nullptr, nullptr, 1021 nullptr, nullptr, BoundNetLog());
1041 BoundNetLog());
1042 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1022 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1043 1023
1044 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1024 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1045 factory->pending_requests()[0]->script_data()->url()); 1025 factory->pending_requests()[0]->script_data()->url());
1046 factory->pending_requests()[0]->CompleteNow(ERR_FAILED, nullptr); 1026 factory->pending_requests()[0]->CompleteNow(ERR_FAILED, nullptr);
1047 1027
1048 ASSERT_EQ(0u, factory->pending_requests().size()); 1028 ASSERT_EQ(0u, factory->pending_requests().size());
1049 // As the proxy resolver factory failed the request and is configured for a 1029 // As the proxy resolver factory failed the request and is configured for a
1050 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT. 1030 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT.
1051 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, 1031 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED,
1052 callback1.WaitForResult()); 1032 callback1.WaitForResult());
1053 EXPECT_FALSE(info.is_direct()); 1033 EXPECT_FALSE(info.is_direct());
1054 1034
1055 // As the proxy resolver factory failed the request and is configured for a 1035 // As the proxy resolver factory failed the request and is configured for a
1056 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT. 1036 // mandatory PAC script, ProxyService must not implicitly fall-back to DIRECT.
1057 TestCompletionCallback callback2; 1037 TestCompletionCallback callback2;
1058 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1038 rv = service.ResolveProxy(url, std::string(), &info, callback2.callback(),
1059 callback2.callback(), nullptr, nullptr, 1039 nullptr, nullptr, BoundNetLog());
1060 BoundNetLog());
1061 EXPECT_THAT(rv, IsError(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED)); 1040 EXPECT_THAT(rv, IsError(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED));
1062 EXPECT_FALSE(info.is_direct()); 1041 EXPECT_FALSE(info.is_direct());
1063 } 1042 }
1064 1043
1065 TEST_F(ProxyServiceTest, ProxyResolverFailsParsingJavaScriptMandatoryPac) { 1044 TEST_F(ProxyServiceTest, ProxyResolverFailsParsingJavaScriptMandatoryPac) {
1066 // Test what happens when the ProxyResolver fails that is configured to use a 1045 // Test what happens when the ProxyResolver fails that is configured to use a
1067 // mandatory PAC script. The download of the PAC script has already 1046 // mandatory PAC script. The download of the PAC script has already
1068 // succeeded but the PAC script contains no valid javascript. 1047 // succeeded but the PAC script contains no valid javascript.
1069 1048
1070 ProxyConfig config( 1049 ProxyConfig config(
1071 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac"))); 1050 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy/proxy.pac")));
1072 config.set_pac_mandatory(true); 1051 config.set_pac_mandatory(true);
1073 1052
1074 MockProxyConfigService* config_service = new MockProxyConfigService(config); 1053 MockProxyConfigService* config_service = new MockProxyConfigService(config);
1075 1054
1076 MockAsyncProxyResolverFactory* factory = 1055 MockAsyncProxyResolverFactory* factory =
1077 new MockAsyncProxyResolverFactory(true); 1056 new MockAsyncProxyResolverFactory(true);
1078 1057
1079 ProxyService service(base::WrapUnique(config_service), 1058 ProxyService service(base::WrapUnique(config_service),
1080 base::WrapUnique(factory), nullptr); 1059 base::WrapUnique(factory), nullptr);
1081 1060
1082 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 1061 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
1083 service.SetProxyScriptFetchers( 1062 service.SetProxyScriptFetchers(
1084 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 1063 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
1085 1064
1086 // Start resolve request. 1065 // Start resolve request.
1087 GURL url("http://www.google.com/"); 1066 GURL url("http://www.google.com/");
1088 ProxyInfo info; 1067 ProxyInfo info;
1089 TestCompletionCallback callback; 1068 TestCompletionCallback callback;
1090 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1069 int rv = service.ResolveProxy(url, std::string(), &info, callback.callback(),
1091 callback.callback(), nullptr, nullptr, 1070 nullptr, nullptr, BoundNetLog());
1092 BoundNetLog());
1093 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1071 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1094 1072
1095 // Check that nothing has been sent to the proxy resolver factory yet. 1073 // Check that nothing has been sent to the proxy resolver factory yet.
1096 ASSERT_EQ(0u, factory->pending_requests().size()); 1074 ASSERT_EQ(0u, factory->pending_requests().size());
1097 1075
1098 // Downloading the PAC script succeeds. 1076 // Downloading the PAC script succeeds.
1099 EXPECT_TRUE(fetcher->has_pending_request()); 1077 EXPECT_TRUE(fetcher->has_pending_request());
1100 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 1078 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
1101 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); 1079 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents");
1102 1080
(...skipping 24 matching lines...) Expand all
1127 MockAsyncProxyResolverFactory* factory = 1105 MockAsyncProxyResolverFactory* factory =
1128 new MockAsyncProxyResolverFactory(false); 1106 new MockAsyncProxyResolverFactory(false);
1129 1107
1130 ProxyService service(base::WrapUnique(config_service), 1108 ProxyService service(base::WrapUnique(config_service),
1131 base::WrapUnique(factory), nullptr); 1109 base::WrapUnique(factory), nullptr);
1132 1110
1133 // Start first resolve request. 1111 // Start first resolve request.
1134 GURL url("http://www.google.com/"); 1112 GURL url("http://www.google.com/");
1135 ProxyInfo info; 1113 ProxyInfo info;
1136 TestCompletionCallback callback1; 1114 TestCompletionCallback callback1;
1137 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1115 int rv = service.ResolveProxy(url, std::string(), &info, callback1.callback(),
1138 callback1.callback(), nullptr, nullptr, 1116 nullptr, nullptr, BoundNetLog());
1139 BoundNetLog());
1140 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1117 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1141 1118
1142 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1119 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1143 factory->pending_requests()[0]->script_data()->url()); 1120 factory->pending_requests()[0]->script_data()->url());
1144 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1121 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1145 1122
1146 ASSERT_EQ(1u, resolver.pending_requests().size()); 1123 ASSERT_EQ(1u, resolver.pending_requests().size());
1147 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1124 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1148 1125
1149 // Fail the first resolve request in MockAsyncProxyResolver. 1126 // Fail the first resolve request in MockAsyncProxyResolver.
1150 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); 1127 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED);
1151 1128
1152 // As the proxy resolver failed the request and is configured for a mandatory 1129 // As the proxy resolver failed the request and is configured for a mandatory
1153 // PAC script, ProxyService must not implicitly fall-back to DIRECT. 1130 // PAC script, ProxyService must not implicitly fall-back to DIRECT.
1154 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, 1131 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED,
1155 callback1.WaitForResult()); 1132 callback1.WaitForResult());
1156 EXPECT_FALSE(info.is_direct()); 1133 EXPECT_FALSE(info.is_direct());
1157 1134
1158 // The second resolve request will try to run through the proxy resolver, 1135 // The second resolve request will try to run through the proxy resolver,
1159 // regardless of whether the first request failed in it. 1136 // regardless of whether the first request failed in it.
1160 TestCompletionCallback callback2; 1137 TestCompletionCallback callback2;
1161 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1138 rv = service.ResolveProxy(url, std::string(), &info, callback2.callback(),
1162 callback2.callback(), nullptr, nullptr, 1139 nullptr, nullptr, BoundNetLog());
1163 BoundNetLog());
1164 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1140 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1165 1141
1166 ASSERT_EQ(1u, resolver.pending_requests().size()); 1142 ASSERT_EQ(1u, resolver.pending_requests().size());
1167 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1143 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1168 1144
1169 // This time we will have the resolver succeed (perhaps the PAC script has 1145 // This time we will have the resolver succeed (perhaps the PAC script has
1170 // a dependency on the current time). 1146 // a dependency on the current time).
1171 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); 1147 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080");
1172 resolver.pending_requests()[0]->CompleteNow(OK); 1148 resolver.pending_requests()[0]->CompleteNow(OK);
1173 1149
(...skipping 14 matching lines...) Expand all
1188 new MockAsyncProxyResolverFactory(false); 1164 new MockAsyncProxyResolverFactory(false);
1189 1165
1190 ProxyService service(base::WrapUnique(config_service), 1166 ProxyService service(base::WrapUnique(config_service),
1191 base::WrapUnique(factory), nullptr); 1167 base::WrapUnique(factory), nullptr);
1192 1168
1193 GURL url("http://www.google.com/"); 1169 GURL url("http://www.google.com/");
1194 1170
1195 // Get the proxy information. 1171 // Get the proxy information.
1196 ProxyInfo info; 1172 ProxyInfo info;
1197 TestCompletionCallback callback1; 1173 TestCompletionCallback callback1;
1198 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1174 int rv = service.ResolveProxy(url, std::string(), &info, callback1.callback(),
1199 callback1.callback(), nullptr, nullptr, 1175 nullptr, nullptr, BoundNetLog());
1200 BoundNetLog());
1201 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1176 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1202 1177
1203 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1178 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1204 factory->pending_requests()[0]->script_data()->url()); 1179 factory->pending_requests()[0]->script_data()->url());
1205 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1180 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1206 1181
1207 ASSERT_EQ(1u, resolver.pending_requests().size()); 1182 ASSERT_EQ(1u, resolver.pending_requests().size());
1208 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1183 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1209 1184
1210 // Set the result in proxy resolver. 1185 // Set the result in proxy resolver.
1211 resolver.pending_requests()[0]->results()->UseNamedProxy( 1186 resolver.pending_requests()[0]->results()->UseNamedProxy(
1212 "foopy1:8080;foopy2:9090"); 1187 "foopy1:8080;foopy2:9090");
1213 resolver.pending_requests()[0]->CompleteNow(OK); 1188 resolver.pending_requests()[0]->CompleteNow(OK);
1214 1189
1215 // The first item is valid. 1190 // The first item is valid.
1216 EXPECT_THAT(callback1.WaitForResult(), IsOk()); 1191 EXPECT_THAT(callback1.WaitForResult(), IsOk());
1217 EXPECT_FALSE(info.is_direct()); 1192 EXPECT_FALSE(info.is_direct());
1218 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1193 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1219 1194
1220 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1195 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1221 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1196 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1222 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 1197 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
1223 base::TimeTicks proxy_resolve_start_time = info.proxy_resolve_start_time(); 1198 base::TimeTicks proxy_resolve_start_time = info.proxy_resolve_start_time();
1224 base::TimeTicks proxy_resolve_end_time = info.proxy_resolve_end_time(); 1199 base::TimeTicks proxy_resolve_end_time = info.proxy_resolve_end_time();
1225 1200
1226 // Fake an error on the proxy. 1201 // Fake an error on the proxy.
1227 TestCompletionCallback callback2; 1202 TestCompletionCallback callback2;
1228 rv = service.ReconsiderProxyAfterError( 1203 rv = service.ReconsiderProxyAfterError(
1229 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1204 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info,
1230 callback2.callback(), nullptr, nullptr, BoundNetLog()); 1205 callback2.callback(), nullptr, nullptr, BoundNetLog());
1231 EXPECT_THAT(rv, IsOk()); 1206 EXPECT_THAT(rv, IsOk());
1232 1207
1233 // Proxy times should not have been modified by fallback. 1208 // Proxy times should not have been modified by fallback.
1234 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); 1209 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time());
1235 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); 1210 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time());
1236 1211
1237 // The second proxy should be specified. 1212 // The second proxy should be specified.
1238 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1213 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1239 // Report back that the second proxy worked. This will globally mark the 1214 // Report back that the second proxy worked. This will globally mark the
1240 // first proxy as bad. 1215 // first proxy as bad.
1241 TestProxyFallbackProxyDelegate test_delegate; 1216 TestProxyFallbackProxyDelegate test_delegate;
1242 service.ReportSuccess(info, &test_delegate); 1217 service.ReportSuccess(info, &test_delegate);
1243 EXPECT_EQ("foopy1:8080", test_delegate.proxy_server().ToURI()); 1218 EXPECT_EQ("foopy1:8080", test_delegate.proxy_server().ToURI());
1244 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, 1219 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED,
1245 test_delegate.proxy_fallback_net_error()); 1220 test_delegate.proxy_fallback_net_error());
1246 1221
1247 TestCompletionCallback callback3; 1222 TestCompletionCallback callback3;
1248 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1223 rv = service.ResolveProxy(url, std::string(), &info, callback3.callback(),
1249 callback3.callback(), nullptr, nullptr, 1224 nullptr, nullptr, BoundNetLog());
1250 BoundNetLog());
1251 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1225 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1252 1226
1253 ASSERT_EQ(1u, resolver.pending_requests().size()); 1227 ASSERT_EQ(1u, resolver.pending_requests().size());
1254 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1228 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1255 1229
1256 // Set the result in proxy resolver -- the second result is already known 1230 // Set the result in proxy resolver -- the second result is already known
1257 // to be bad, so we will not try to use it initially. 1231 // to be bad, so we will not try to use it initially.
1258 resolver.pending_requests()[0]->results()->UseNamedProxy( 1232 resolver.pending_requests()[0]->results()->UseNamedProxy(
1259 "foopy3:7070;foopy1:8080;foopy2:9090"); 1233 "foopy3:7070;foopy1:8080;foopy2:9090");
1260 resolver.pending_requests()[0]->CompleteNow(OK); 1234 resolver.pending_requests()[0]->CompleteNow(OK);
1261 1235
1262 EXPECT_THAT(callback3.WaitForResult(), IsOk()); 1236 EXPECT_THAT(callback3.WaitForResult(), IsOk());
1263 EXPECT_FALSE(info.is_direct()); 1237 EXPECT_FALSE(info.is_direct());
1264 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); 1238 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI());
1265 1239
1266 // Proxy times should have been updated, so get them again. 1240 // Proxy times should have been updated, so get them again.
1267 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time()); 1241 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time());
1268 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1242 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1269 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1243 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1270 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 1244 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
1271 proxy_resolve_start_time = info.proxy_resolve_start_time(); 1245 proxy_resolve_start_time = info.proxy_resolve_start_time();
1272 proxy_resolve_end_time = info.proxy_resolve_end_time(); 1246 proxy_resolve_end_time = info.proxy_resolve_end_time();
1273 1247
1274 // We fake another error. It should now try the third one. 1248 // We fake another error. It should now try the third one.
1275 TestCompletionCallback callback4; 1249 TestCompletionCallback callback4;
1276 rv = service.ReconsiderProxyAfterError( 1250 rv = service.ReconsiderProxyAfterError(
1277 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1251 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info,
1278 callback4.callback(), nullptr, nullptr, BoundNetLog()); 1252 callback4.callback(), nullptr, nullptr, BoundNetLog());
1279 EXPECT_THAT(rv, IsOk()); 1253 EXPECT_THAT(rv, IsOk());
1280 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1254 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1281 1255
1282 // We fake another error. At this point we have tried all of the 1256 // We fake another error. At this point we have tried all of the
1283 // proxy servers we thought were valid; next we try the proxy server 1257 // proxy servers we thought were valid; next we try the proxy server
1284 // that was in our bad proxies map (foopy1:8080). 1258 // that was in our bad proxies map (foopy1:8080).
1285 TestCompletionCallback callback5; 1259 TestCompletionCallback callback5;
1286 rv = service.ReconsiderProxyAfterError( 1260 rv = service.ReconsiderProxyAfterError(
1287 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1261 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info,
1288 callback5.callback(), nullptr, nullptr, BoundNetLog()); 1262 callback5.callback(), nullptr, nullptr, BoundNetLog());
1289 EXPECT_THAT(rv, IsOk()); 1263 EXPECT_THAT(rv, IsOk());
1290 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1264 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1291 1265
1292 // Fake another error, the last proxy is gone, the list should now be empty, 1266 // Fake another error, the last proxy is gone, the list should now be empty,
1293 // so there is nothing left to try. 1267 // so there is nothing left to try.
1294 TestCompletionCallback callback6; 1268 TestCompletionCallback callback6;
1295 rv = service.ReconsiderProxyAfterError( 1269 rv = service.ReconsiderProxyAfterError(
1296 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1270 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info,
1297 callback6.callback(), nullptr, nullptr, BoundNetLog()); 1271 callback6.callback(), nullptr, nullptr, BoundNetLog());
1298 EXPECT_THAT(rv, IsError(ERR_FAILED)); 1272 EXPECT_THAT(rv, IsError(ERR_FAILED));
1299 EXPECT_FALSE(info.is_direct()); 1273 EXPECT_FALSE(info.is_direct());
1300 EXPECT_TRUE(info.is_empty()); 1274 EXPECT_TRUE(info.is_empty());
1301 1275
1302 // Proxy times should not have been modified by fallback. 1276 // Proxy times should not have been modified by fallback.
1303 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); 1277 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time());
1304 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); 1278 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time());
1305 1279
1306 // Look up proxies again 1280 // Look up proxies again
1307 TestCompletionCallback callback7; 1281 TestCompletionCallback callback7;
1308 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1282 rv = service.ResolveProxy(url, std::string(), &info, callback7.callback(),
1309 callback7.callback(), nullptr, nullptr, 1283 nullptr, nullptr, BoundNetLog());
1310 BoundNetLog());
1311 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1284 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1312 1285
1313 ASSERT_EQ(1u, resolver.pending_requests().size()); 1286 ASSERT_EQ(1u, resolver.pending_requests().size());
1314 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1287 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1315 1288
1316 // This time, the first 3 results have been found to be bad, but only the 1289 // This time, the first 3 results have been found to be bad, but only the
1317 // first proxy has been confirmed ... 1290 // first proxy has been confirmed ...
1318 resolver.pending_requests()[0]->results()->UseNamedProxy( 1291 resolver.pending_requests()[0]->results()->UseNamedProxy(
1319 "foopy1:8080;foopy3:7070;foopy2:9090;foopy4:9091"); 1292 "foopy1:8080;foopy3:7070;foopy2:9090;foopy4:9091");
1320 resolver.pending_requests()[0]->CompleteNow(OK); 1293 resolver.pending_requests()[0]->CompleteNow(OK);
(...skipping 20 matching lines...) Expand all
1341 new MockAsyncProxyResolverFactory(false); 1314 new MockAsyncProxyResolverFactory(false);
1342 1315
1343 ProxyService service(base::WrapUnique(config_service), 1316 ProxyService service(base::WrapUnique(config_service),
1344 base::WrapUnique(factory), nullptr); 1317 base::WrapUnique(factory), nullptr);
1345 1318
1346 GURL url("http://www.google.com/"); 1319 GURL url("http://www.google.com/");
1347 1320
1348 // Get the proxy information. 1321 // Get the proxy information.
1349 ProxyInfo info; 1322 ProxyInfo info;
1350 TestCompletionCallback callback1; 1323 TestCompletionCallback callback1;
1351 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1324 int rv = service.ResolveProxy(url, std::string(), &info, callback1.callback(),
1352 callback1.callback(), nullptr, nullptr, 1325 nullptr, nullptr, BoundNetLog());
1353 BoundNetLog());
1354 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1326 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1355 1327
1356 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1328 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1357 factory->pending_requests()[0]->script_data()->url()); 1329 factory->pending_requests()[0]->script_data()->url());
1358 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1330 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1359 1331
1360 ASSERT_EQ(1u, resolver.pending_requests().size()); 1332 ASSERT_EQ(1u, resolver.pending_requests().size());
1361 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1333 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1362 1334
1363 // Set the result in proxy resolver. 1335 // Set the result in proxy resolver.
1364 resolver.pending_requests()[0]->results()->UsePacString( 1336 resolver.pending_requests()[0]->results()->UsePacString(
1365 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); 1337 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT");
1366 resolver.pending_requests()[0]->CompleteNow(OK); 1338 resolver.pending_requests()[0]->CompleteNow(OK);
1367 1339
1368 // Get the first result. 1340 // Get the first result.
1369 EXPECT_THAT(callback1.WaitForResult(), IsOk()); 1341 EXPECT_THAT(callback1.WaitForResult(), IsOk());
1370 EXPECT_FALSE(info.is_direct()); 1342 EXPECT_FALSE(info.is_direct());
1371 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1343 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1372 1344
1373 // Fake an error on the proxy. 1345 // Fake an error on the proxy.
1374 TestCompletionCallback callback2; 1346 TestCompletionCallback callback2;
1375 rv = service.ReconsiderProxyAfterError( 1347 rv = service.ReconsiderProxyAfterError(
1376 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1348 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info,
1377 callback2.callback(), nullptr, nullptr, BoundNetLog()); 1349 callback2.callback(), nullptr, nullptr, BoundNetLog());
1378 EXPECT_THAT(rv, IsOk()); 1350 EXPECT_THAT(rv, IsOk());
1379 1351
1380 // Now we get back the second proxy. 1352 // Now we get back the second proxy.
1381 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1353 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1382 1354
1383 // Fake an error on this proxy as well. 1355 // Fake an error on this proxy as well.
1384 TestCompletionCallback callback3; 1356 TestCompletionCallback callback3;
1385 rv = service.ReconsiderProxyAfterError( 1357 rv = service.ReconsiderProxyAfterError(
1386 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1358 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info,
1387 callback3.callback(), nullptr, nullptr, BoundNetLog()); 1359 callback3.callback(), nullptr, nullptr, BoundNetLog());
1388 EXPECT_THAT(rv, IsOk()); 1360 EXPECT_THAT(rv, IsOk());
1389 1361
1390 // Finally, we get back DIRECT. 1362 // Finally, we get back DIRECT.
1391 EXPECT_TRUE(info.is_direct()); 1363 EXPECT_TRUE(info.is_direct());
1392 1364
1393 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1365 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1394 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1366 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1395 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 1367 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
1396 1368
1397 // Now we tell the proxy service that even DIRECT failed. 1369 // Now we tell the proxy service that even DIRECT failed.
1398 TestCompletionCallback callback4; 1370 TestCompletionCallback callback4;
1399 rv = service.ReconsiderProxyAfterError( 1371 rv = service.ReconsiderProxyAfterError(
1400 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1372 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info,
1401 callback4.callback(), nullptr, nullptr, BoundNetLog()); 1373 callback4.callback(), nullptr, nullptr, BoundNetLog());
1402 // There was nothing left to try after DIRECT, so we are out of 1374 // There was nothing left to try after DIRECT, so we are out of
1403 // choices. 1375 // choices.
1404 EXPECT_THAT(rv, IsError(ERR_FAILED)); 1376 EXPECT_THAT(rv, IsError(ERR_FAILED));
1405 } 1377 }
1406 1378
1407 TEST_F(ProxyServiceTest, ProxyFallback_NewSettings) { 1379 TEST_F(ProxyServiceTest, ProxyFallback_NewSettings) {
1408 // Test proxy failover when new settings are available. 1380 // Test proxy failover when new settings are available.
1409 1381
1410 MockProxyConfigService* config_service = 1382 MockProxyConfigService* config_service =
1411 new MockProxyConfigService("http://foopy/proxy.pac"); 1383 new MockProxyConfigService("http://foopy/proxy.pac");
1412 1384
1413 MockAsyncProxyResolver resolver; 1385 MockAsyncProxyResolver resolver;
1414 MockAsyncProxyResolverFactory* factory = 1386 MockAsyncProxyResolverFactory* factory =
1415 new MockAsyncProxyResolverFactory(false); 1387 new MockAsyncProxyResolverFactory(false);
1416 1388
1417 ProxyService service(base::WrapUnique(config_service), 1389 ProxyService service(base::WrapUnique(config_service),
1418 base::WrapUnique(factory), nullptr); 1390 base::WrapUnique(factory), nullptr);
1419 1391
1420 GURL url("http://www.google.com/"); 1392 GURL url("http://www.google.com/");
1421 1393
1422 // Get the proxy information. 1394 // Get the proxy information.
1423 ProxyInfo info; 1395 ProxyInfo info;
1424 TestCompletionCallback callback1; 1396 TestCompletionCallback callback1;
1425 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1397 int rv = service.ResolveProxy(url, std::string(), &info, callback1.callback(),
1426 callback1.callback(), nullptr, nullptr, 1398 nullptr, nullptr, BoundNetLog());
1427 BoundNetLog());
1428 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1399 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1429 1400
1430 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1401 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1431 factory->pending_requests()[0]->script_data()->url()); 1402 factory->pending_requests()[0]->script_data()->url());
1432 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1403 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1433 1404
1434 ASSERT_EQ(1u, resolver.pending_requests().size()); 1405 ASSERT_EQ(1u, resolver.pending_requests().size());
1435 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1406 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1436 1407
1437 // Set the result in proxy resolver. 1408 // Set the result in proxy resolver.
1438 resolver.pending_requests()[0]->results()->UseNamedProxy( 1409 resolver.pending_requests()[0]->results()->UseNamedProxy(
1439 "foopy1:8080;foopy2:9090"); 1410 "foopy1:8080;foopy2:9090");
1440 resolver.pending_requests()[0]->CompleteNow(OK); 1411 resolver.pending_requests()[0]->CompleteNow(OK);
1441 1412
1442 // The first item is valid. 1413 // The first item is valid.
1443 EXPECT_THAT(callback1.WaitForResult(), IsOk()); 1414 EXPECT_THAT(callback1.WaitForResult(), IsOk());
1444 EXPECT_FALSE(info.is_direct()); 1415 EXPECT_FALSE(info.is_direct());
1445 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1416 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1446 1417
1447 // Fake an error on the proxy, and also a new configuration on the proxy. 1418 // Fake an error on the proxy, and also a new configuration on the proxy.
1448 config_service->SetConfig( 1419 config_service->SetConfig(
1449 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac"))); 1420 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac")));
1450 1421
1451 TestCompletionCallback callback2; 1422 TestCompletionCallback callback2;
1452 rv = service.ReconsiderProxyAfterError( 1423 rv = service.ReconsiderProxyAfterError(
1453 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1424 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info,
1454 callback2.callback(), nullptr, nullptr, BoundNetLog()); 1425 callback2.callback(), nullptr, nullptr, BoundNetLog());
1455 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1426 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1456 1427
1457 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), 1428 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"),
1458 factory->pending_requests()[0]->script_data()->url()); 1429 factory->pending_requests()[0]->script_data()->url());
1459 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1430 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1460 1431
1461 ASSERT_EQ(1u, resolver.pending_requests().size()); 1432 ASSERT_EQ(1u, resolver.pending_requests().size());
1462 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1433 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1463 1434
1464 resolver.pending_requests()[0]->results()->UseNamedProxy( 1435 resolver.pending_requests()[0]->results()->UseNamedProxy(
1465 "foopy1:8080;foopy2:9090"); 1436 "foopy1:8080;foopy2:9090");
1466 resolver.pending_requests()[0]->CompleteNow(OK); 1437 resolver.pending_requests()[0]->CompleteNow(OK);
1467 1438
1468 // The first proxy is still there since the configuration changed. 1439 // The first proxy is still there since the configuration changed.
1469 EXPECT_THAT(callback2.WaitForResult(), IsOk()); 1440 EXPECT_THAT(callback2.WaitForResult(), IsOk());
1470 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1441 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1471 1442
1472 // We fake another error. It should now ignore the first one. 1443 // We fake another error. It should now ignore the first one.
1473 TestCompletionCallback callback3; 1444 TestCompletionCallback callback3;
1474 rv = service.ReconsiderProxyAfterError( 1445 rv = service.ReconsiderProxyAfterError(
1475 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1446 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info,
1476 callback3.callback(), nullptr, nullptr, BoundNetLog()); 1447 callback3.callback(), nullptr, nullptr, BoundNetLog());
1477 EXPECT_THAT(rv, IsOk()); 1448 EXPECT_THAT(rv, IsOk());
1478 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1449 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1479 1450
1480 // We simulate a new configuration. 1451 // We simulate a new configuration.
1481 config_service->SetConfig( 1452 config_service->SetConfig(
1482 ProxyConfig::CreateFromCustomPacURL( 1453 ProxyConfig::CreateFromCustomPacURL(
1483 GURL("http://foopy-new2/proxy.pac"))); 1454 GURL("http://foopy-new2/proxy.pac")));
1484 1455
1485 // We fake another error. It should go back to the first proxy. 1456 // We fake another error. It should go back to the first proxy.
1486 TestCompletionCallback callback4; 1457 TestCompletionCallback callback4;
1487 rv = service.ReconsiderProxyAfterError( 1458 rv = service.ReconsiderProxyAfterError(
1488 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1459 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info,
1489 callback4.callback(), nullptr, nullptr, BoundNetLog()); 1460 callback4.callback(), nullptr, nullptr, BoundNetLog());
1490 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1461 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1491 1462
1492 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), 1463 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"),
1493 factory->pending_requests()[0]->script_data()->url()); 1464 factory->pending_requests()[0]->script_data()->url());
1494 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1465 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1495 1466
1496 ASSERT_EQ(1u, resolver.pending_requests().size()); 1467 ASSERT_EQ(1u, resolver.pending_requests().size());
1497 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1468 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1498 1469
(...skipping 20 matching lines...) Expand all
1519 new MockAsyncProxyResolverFactory(false); 1490 new MockAsyncProxyResolverFactory(false);
1520 1491
1521 ProxyService service(base::WrapUnique(config_service), 1492 ProxyService service(base::WrapUnique(config_service),
1522 base::WrapUnique(factory), nullptr); 1493 base::WrapUnique(factory), nullptr);
1523 1494
1524 GURL url("http://www.google.com/"); 1495 GURL url("http://www.google.com/");
1525 1496
1526 // Get the proxy information. 1497 // Get the proxy information.
1527 ProxyInfo info; 1498 ProxyInfo info;
1528 TestCompletionCallback callback1; 1499 TestCompletionCallback callback1;
1529 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1500 int rv = service.ResolveProxy(url, std::string(), &info, callback1.callback(),
1530 callback1.callback(), nullptr, nullptr, 1501 nullptr, nullptr, BoundNetLog());
1531 BoundNetLog());
1532 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1502 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1533 1503
1534 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1504 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1535 factory->pending_requests()[0]->script_data()->url()); 1505 factory->pending_requests()[0]->script_data()->url());
1536 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1506 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1537 ASSERT_EQ(1u, resolver.pending_requests().size()); 1507 ASSERT_EQ(1u, resolver.pending_requests().size());
1538 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1508 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1539 1509
1540 resolver.pending_requests()[0]->results()->UseNamedProxy( 1510 resolver.pending_requests()[0]->results()->UseNamedProxy(
1541 "foopy1:8080;foopy2:9090"); 1511 "foopy1:8080;foopy2:9090");
1542 resolver.pending_requests()[0]->CompleteNow(OK); 1512 resolver.pending_requests()[0]->CompleteNow(OK);
1543 1513
1544 // The first item is valid. 1514 // The first item is valid.
1545 EXPECT_THAT(callback1.WaitForResult(), IsOk()); 1515 EXPECT_THAT(callback1.WaitForResult(), IsOk());
1546 EXPECT_FALSE(info.is_direct()); 1516 EXPECT_FALSE(info.is_direct());
1547 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1517 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1548 1518
1549 // Fake a proxy error. 1519 // Fake a proxy error.
1550 TestCompletionCallback callback2; 1520 TestCompletionCallback callback2;
1551 rv = service.ReconsiderProxyAfterError( 1521 rv = service.ReconsiderProxyAfterError(
1552 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1522 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info,
1553 callback2.callback(), nullptr, nullptr, BoundNetLog()); 1523 callback2.callback(), nullptr, nullptr, BoundNetLog());
1554 EXPECT_THAT(rv, IsOk()); 1524 EXPECT_THAT(rv, IsOk());
1555 1525
1556 // The first proxy is ignored, and the second one is selected. 1526 // The first proxy is ignored, and the second one is selected.
1557 EXPECT_FALSE(info.is_direct()); 1527 EXPECT_FALSE(info.is_direct());
1558 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1528 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1559 1529
1560 // Fake a PAC failure. 1530 // Fake a PAC failure.
1561 ProxyInfo info2; 1531 ProxyInfo info2;
1562 TestCompletionCallback callback3; 1532 TestCompletionCallback callback3;
1563 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info2, 1533 rv = service.ResolveProxy(url, std::string(), &info2, callback3.callback(),
1564 callback3.callback(), nullptr, nullptr, 1534 nullptr, nullptr, BoundNetLog());
1565 BoundNetLog());
1566 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1535 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1567 1536
1568 ASSERT_EQ(1u, resolver.pending_requests().size()); 1537 ASSERT_EQ(1u, resolver.pending_requests().size());
1569 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1538 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1570 1539
1571 // This simulates a javascript runtime error in the PAC script. 1540 // This simulates a javascript runtime error in the PAC script.
1572 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); 1541 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED);
1573 1542
1574 // Although the resolver failed, the ProxyService will implicitly fall-back 1543 // Although the resolver failed, the ProxyService will implicitly fall-back
1575 // to a DIRECT connection. 1544 // to a DIRECT connection.
1576 EXPECT_THAT(callback3.WaitForResult(), IsOk()); 1545 EXPECT_THAT(callback3.WaitForResult(), IsOk());
1577 EXPECT_TRUE(info2.is_direct()); 1546 EXPECT_TRUE(info2.is_direct());
1578 EXPECT_FALSE(info2.is_empty()); 1547 EXPECT_FALSE(info2.is_empty());
1579 1548
1580 // The PAC script will work properly next time and successfully return a 1549 // The PAC script will work properly next time and successfully return a
1581 // proxy list. Since we have not marked the configuration as bad, it should 1550 // proxy list. Since we have not marked the configuration as bad, it should
1582 // "just work" the next time we call it. 1551 // "just work" the next time we call it.
1583 ProxyInfo info3; 1552 ProxyInfo info3;
1584 TestCompletionCallback callback4; 1553 TestCompletionCallback callback4;
1585 rv = service.ReconsiderProxyAfterError( 1554 rv = service.ReconsiderProxyAfterError(
1586 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, 1555 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info3,
1587 callback4.callback(), nullptr, nullptr, BoundNetLog()); 1556 callback4.callback(), nullptr, nullptr, BoundNetLog());
1588 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1557 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1589 1558
1590 ASSERT_EQ(1u, resolver.pending_requests().size()); 1559 ASSERT_EQ(1u, resolver.pending_requests().size());
1591 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1560 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1592 1561
1593 resolver.pending_requests()[0]->results()->UseNamedProxy( 1562 resolver.pending_requests()[0]->results()->UseNamedProxy(
1594 "foopy1:8080;foopy2:9090"); 1563 "foopy1:8080;foopy2:9090");
1595 resolver.pending_requests()[0]->CompleteNow(OK); 1564 resolver.pending_requests()[0]->CompleteNow(OK);
1596 1565
(...skipping 22 matching lines...) Expand all
1619 new MockAsyncProxyResolverFactory(false); 1588 new MockAsyncProxyResolverFactory(false);
1620 1589
1621 ProxyService service(base::WrapUnique(config_service), 1590 ProxyService service(base::WrapUnique(config_service),
1622 base::WrapUnique(factory), nullptr); 1591 base::WrapUnique(factory), nullptr);
1623 1592
1624 GURL url("http://www.google.com/"); 1593 GURL url("http://www.google.com/");
1625 1594
1626 // Get the proxy information. 1595 // Get the proxy information.
1627 ProxyInfo info; 1596 ProxyInfo info;
1628 TestCompletionCallback callback1; 1597 TestCompletionCallback callback1;
1629 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 1598 int rv = service.ResolveProxy(url, std::string(), &info, callback1.callback(),
1630 callback1.callback(), nullptr, nullptr, 1599 nullptr, nullptr, BoundNetLog());
1631 BoundNetLog());
1632 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1600 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1633 1601
1634 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1602 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1635 factory->pending_requests()[0]->script_data()->url()); 1603 factory->pending_requests()[0]->script_data()->url());
1636 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1604 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1637 ASSERT_EQ(1u, resolver.pending_requests().size()); 1605 ASSERT_EQ(1u, resolver.pending_requests().size());
1638 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1606 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1639 1607
1640 resolver.pending_requests()[0]->results()->UseNamedProxy( 1608 resolver.pending_requests()[0]->results()->UseNamedProxy(
1641 "foopy1:8080;foopy2:9090"); 1609 "foopy1:8080;foopy2:9090");
1642 resolver.pending_requests()[0]->CompleteNow(OK); 1610 resolver.pending_requests()[0]->CompleteNow(OK);
1643 1611
1644 // The first item is valid. 1612 // The first item is valid.
1645 EXPECT_THAT(callback1.WaitForResult(), IsOk()); 1613 EXPECT_THAT(callback1.WaitForResult(), IsOk());
1646 EXPECT_FALSE(info.is_direct()); 1614 EXPECT_FALSE(info.is_direct());
1647 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1615 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1648 1616
1649 // Fake a proxy error. 1617 // Fake a proxy error.
1650 TestCompletionCallback callback2; 1618 TestCompletionCallback callback2;
1651 rv = service.ReconsiderProxyAfterError( 1619 rv = service.ReconsiderProxyAfterError(
1652 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1620 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info,
1653 callback2.callback(), nullptr, nullptr, BoundNetLog()); 1621 callback2.callback(), nullptr, nullptr, BoundNetLog());
1654 EXPECT_THAT(rv, IsOk()); 1622 EXPECT_THAT(rv, IsOk());
1655 1623
1656 // The first proxy is ignored, and the second one is selected. 1624 // The first proxy is ignored, and the second one is selected.
1657 EXPECT_FALSE(info.is_direct()); 1625 EXPECT_FALSE(info.is_direct());
1658 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1626 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1659 1627
1660 // Fake a PAC failure. 1628 // Fake a PAC failure.
1661 ProxyInfo info2; 1629 ProxyInfo info2;
1662 TestCompletionCallback callback3; 1630 TestCompletionCallback callback3;
1663 rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info2, 1631 rv = service.ResolveProxy(url, std::string(), &info2, callback3.callback(),
1664 callback3.callback(), nullptr, nullptr, 1632 nullptr, nullptr, BoundNetLog());
1665 BoundNetLog());
1666 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1633 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1667 1634
1668 ASSERT_EQ(1u, resolver.pending_requests().size()); 1635 ASSERT_EQ(1u, resolver.pending_requests().size());
1669 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1636 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1670 1637
1671 // This simulates a javascript runtime error in the PAC script. 1638 // This simulates a javascript runtime error in the PAC script.
1672 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); 1639 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED);
1673 1640
1674 // Although the resolver failed, the ProxyService will NOT fall-back 1641 // Although the resolver failed, the ProxyService will NOT fall-back
1675 // to a DIRECT connection as it is configured as mandatory. 1642 // to a DIRECT connection as it is configured as mandatory.
1676 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, 1643 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED,
1677 callback3.WaitForResult()); 1644 callback3.WaitForResult());
1678 EXPECT_FALSE(info2.is_direct()); 1645 EXPECT_FALSE(info2.is_direct());
1679 EXPECT_TRUE(info2.is_empty()); 1646 EXPECT_TRUE(info2.is_empty());
1680 1647
1681 // The PAC script will work properly next time and successfully return a 1648 // The PAC script will work properly next time and successfully return a
1682 // proxy list. Since we have not marked the configuration as bad, it should 1649 // proxy list. Since we have not marked the configuration as bad, it should
1683 // "just work" the next time we call it. 1650 // "just work" the next time we call it.
1684 ProxyInfo info3; 1651 ProxyInfo info3;
1685 TestCompletionCallback callback4; 1652 TestCompletionCallback callback4;
1686 rv = service.ReconsiderProxyAfterError( 1653 rv = service.ReconsiderProxyAfterError(
1687 url, std::string(), LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, 1654 url, std::string(), ERR_PROXY_CONNECTION_FAILED, &info3,
1688 callback4.callback(), nullptr, nullptr, BoundNetLog()); 1655 callback4.callback(), nullptr, nullptr, BoundNetLog());
1689 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1656 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1690 1657
1691 ASSERT_EQ(1u, resolver.pending_requests().size()); 1658 ASSERT_EQ(1u, resolver.pending_requests().size());
1692 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1659 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
1693 1660
1694 resolver.pending_requests()[0]->results()->UseNamedProxy( 1661 resolver.pending_requests()[0]->results()->UseNamedProxy(
1695 "foopy1:8080;foopy2:9090"); 1662 "foopy1:8080;foopy2:9090");
1696 resolver.pending_requests()[0]->CompleteNow(OK); 1663 resolver.pending_requests()[0]->CompleteNow(OK);
1697 1664
(...skipping 15 matching lines...) Expand all
1713 config.proxy_rules().bypass_rules.ParseFromString("*.org"); 1680 config.proxy_rules().bypass_rules.ParseFromString("*.org");
1714 1681
1715 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1682 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1716 nullptr, nullptr); 1683 nullptr, nullptr);
1717 1684
1718 int rv; 1685 int rv;
1719 GURL url1("http://www.webkit.org"); 1686 GURL url1("http://www.webkit.org");
1720 GURL url2("http://www.webkit.com"); 1687 GURL url2("http://www.webkit.com");
1721 1688
1722 // Request for a .org domain should bypass proxy. 1689 // Request for a .org domain should bypass proxy.
1723 rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info[0], 1690 rv = service.ResolveProxy(url1, std::string(), &info[0],
1724 callback[0].callback(), nullptr, nullptr, 1691 callback[0].callback(), nullptr, nullptr,
1725 BoundNetLog()); 1692 BoundNetLog());
1726 EXPECT_THAT(rv, IsOk()); 1693 EXPECT_THAT(rv, IsOk());
1727 EXPECT_TRUE(info[0].is_direct()); 1694 EXPECT_TRUE(info[0].is_direct());
1728 1695
1729 // Request for a .com domain hits the proxy. 1696 // Request for a .com domain hits the proxy.
1730 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info[1], 1697 rv = service.ResolveProxy(url2, std::string(), &info[1],
1731 callback[1].callback(), nullptr, nullptr, 1698 callback[1].callback(), nullptr, nullptr,
1732 BoundNetLog()); 1699 BoundNetLog());
1733 EXPECT_THAT(rv, IsOk()); 1700 EXPECT_THAT(rv, IsOk());
1734 EXPECT_EQ("foopy1:8080", info[1].proxy_server().ToURI()); 1701 EXPECT_EQ("foopy1:8080", info[1].proxy_server().ToURI());
1735 } 1702 }
1736 1703
1737 TEST_F(ProxyServiceTest, MarkProxiesAsBadTests) { 1704 TEST_F(ProxyServiceTest, MarkProxiesAsBadTests) {
1738 ProxyConfig config; 1705 ProxyConfig config;
1739 config.proxy_rules().ParseFromString( 1706 config.proxy_rules().ParseFromString(
1740 "http=foopy1:8080;http=foopy2:8080;http=foopy3.8080;http=foopy4:8080"); 1707 "http=foopy1:8080;http=foopy2:8080;http=foopy3.8080;http=foopy4:8080");
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1772 TEST_F(ProxyServiceTest, PerProtocolProxyTests) { 1739 TEST_F(ProxyServiceTest, PerProtocolProxyTests) {
1773 ProxyConfig config; 1740 ProxyConfig config;
1774 config.proxy_rules().ParseFromString("http=foopy1:8080;https=foopy2:8080"); 1741 config.proxy_rules().ParseFromString("http=foopy1:8080;https=foopy2:8080");
1775 config.set_auto_detect(false); 1742 config.set_auto_detect(false);
1776 { 1743 {
1777 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1744 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1778 nullptr, nullptr); 1745 nullptr, nullptr);
1779 GURL test_url("http://www.msn.com"); 1746 GURL test_url("http://www.msn.com");
1780 ProxyInfo info; 1747 ProxyInfo info;
1781 TestCompletionCallback callback; 1748 TestCompletionCallback callback;
1782 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1749 int rv = service.ResolveProxy(test_url, std::string(), &info,
1783 callback.callback(), nullptr, nullptr, 1750 callback.callback(), nullptr, nullptr,
1784 BoundNetLog()); 1751 BoundNetLog());
1785 EXPECT_THAT(rv, IsOk()); 1752 EXPECT_THAT(rv, IsOk());
1786 EXPECT_FALSE(info.is_direct()); 1753 EXPECT_FALSE(info.is_direct());
1787 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1754 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1788 } 1755 }
1789 { 1756 {
1790 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1757 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1791 nullptr, nullptr); 1758 nullptr, nullptr);
1792 GURL test_url("ftp://ftp.google.com"); 1759 GURL test_url("ftp://ftp.google.com");
1793 ProxyInfo info; 1760 ProxyInfo info;
1794 TestCompletionCallback callback; 1761 TestCompletionCallback callback;
1795 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1762 int rv = service.ResolveProxy(test_url, std::string(), &info,
1796 callback.callback(), nullptr, nullptr, 1763 callback.callback(), nullptr, nullptr,
1797 BoundNetLog()); 1764 BoundNetLog());
1798 EXPECT_THAT(rv, IsOk()); 1765 EXPECT_THAT(rv, IsOk());
1799 EXPECT_TRUE(info.is_direct()); 1766 EXPECT_TRUE(info.is_direct());
1800 EXPECT_EQ("direct://", info.proxy_server().ToURI()); 1767 EXPECT_EQ("direct://", info.proxy_server().ToURI());
1801 } 1768 }
1802 { 1769 {
1803 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1770 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1804 nullptr, nullptr); 1771 nullptr, nullptr);
1805 GURL test_url("https://webbranch.techcu.com"); 1772 GURL test_url("https://webbranch.techcu.com");
1806 ProxyInfo info; 1773 ProxyInfo info;
1807 TestCompletionCallback callback; 1774 TestCompletionCallback callback;
1808 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1775 int rv = service.ResolveProxy(test_url, std::string(), &info,
1809 callback.callback(), nullptr, nullptr, 1776 callback.callback(), nullptr, nullptr,
1810 BoundNetLog()); 1777 BoundNetLog());
1811 EXPECT_THAT(rv, IsOk()); 1778 EXPECT_THAT(rv, IsOk());
1812 EXPECT_FALSE(info.is_direct()); 1779 EXPECT_FALSE(info.is_direct());
1813 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); 1780 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI());
1814 } 1781 }
1815 { 1782 {
1816 config.proxy_rules().ParseFromString("foopy1:8080"); 1783 config.proxy_rules().ParseFromString("foopy1:8080");
1817 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1784 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1818 nullptr, nullptr); 1785 nullptr, nullptr);
1819 GURL test_url("http://www.microsoft.com"); 1786 GURL test_url("http://www.microsoft.com");
1820 ProxyInfo info; 1787 ProxyInfo info;
1821 TestCompletionCallback callback; 1788 TestCompletionCallback callback;
1822 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1789 int rv = service.ResolveProxy(test_url, std::string(), &info,
1823 callback.callback(), nullptr, nullptr, 1790 callback.callback(), nullptr, nullptr,
1824 BoundNetLog()); 1791 BoundNetLog());
1825 EXPECT_THAT(rv, IsOk()); 1792 EXPECT_THAT(rv, IsOk());
1826 EXPECT_FALSE(info.is_direct()); 1793 EXPECT_FALSE(info.is_direct());
1827 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1794 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1828 } 1795 }
1829 } 1796 }
1830 1797
1831 TEST_F(ProxyServiceTest, ProxyConfigSourcePropagates) { 1798 TEST_F(ProxyServiceTest, ProxyConfigSourcePropagates) {
1832 // Test that the proxy config source is set correctly when resolving proxies 1799 // Test that the proxy config source is set correctly when resolving proxies
1833 // using manual proxy rules. Namely, the config source should only be set if 1800 // using manual proxy rules. Namely, the config source should only be set if
1834 // any of the rules were applied. 1801 // any of the rules were applied.
1835 { 1802 {
1836 ProxyConfig config; 1803 ProxyConfig config;
1837 config.set_source(PROXY_CONFIG_SOURCE_TEST); 1804 config.set_source(PROXY_CONFIG_SOURCE_TEST);
1838 config.proxy_rules().ParseFromString("https=foopy2:8080"); 1805 config.proxy_rules().ParseFromString("https=foopy2:8080");
1839 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1806 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1840 nullptr, nullptr); 1807 nullptr, nullptr);
1841 GURL test_url("http://www.google.com"); 1808 GURL test_url("http://www.google.com");
1842 ProxyInfo info; 1809 ProxyInfo info;
1843 TestCompletionCallback callback; 1810 TestCompletionCallback callback;
1844 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1811 int rv = service.ResolveProxy(test_url, std::string(), &info,
1845 callback.callback(), nullptr, nullptr, 1812 callback.callback(), nullptr, nullptr,
1846 BoundNetLog()); 1813 BoundNetLog());
1847 ASSERT_THAT(rv, IsOk()); 1814 ASSERT_THAT(rv, IsOk());
1848 // Should be SOURCE_TEST, even if there are no HTTP proxies configured. 1815 // Should be SOURCE_TEST, even if there are no HTTP proxies configured.
1849 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); 1816 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source());
1850 } 1817 }
1851 { 1818 {
1852 ProxyConfig config; 1819 ProxyConfig config;
1853 config.set_source(PROXY_CONFIG_SOURCE_TEST); 1820 config.set_source(PROXY_CONFIG_SOURCE_TEST);
1854 config.proxy_rules().ParseFromString("https=foopy2:8080"); 1821 config.proxy_rules().ParseFromString("https=foopy2:8080");
1855 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1822 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1856 nullptr, nullptr); 1823 nullptr, nullptr);
1857 GURL test_url("https://www.google.com"); 1824 GURL test_url("https://www.google.com");
1858 ProxyInfo info; 1825 ProxyInfo info;
1859 TestCompletionCallback callback; 1826 TestCompletionCallback callback;
1860 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1827 int rv = service.ResolveProxy(test_url, std::string(), &info,
1861 callback.callback(), nullptr, nullptr, 1828 callback.callback(), nullptr, nullptr,
1862 BoundNetLog()); 1829 BoundNetLog());
1863 ASSERT_THAT(rv, IsOk()); 1830 ASSERT_THAT(rv, IsOk());
1864 // Used the HTTPS proxy. So source should be TEST. 1831 // Used the HTTPS proxy. So source should be TEST.
1865 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); 1832 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source());
1866 } 1833 }
1867 { 1834 {
1868 ProxyConfig config; 1835 ProxyConfig config;
1869 config.set_source(PROXY_CONFIG_SOURCE_TEST); 1836 config.set_source(PROXY_CONFIG_SOURCE_TEST);
1870 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1837 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1871 nullptr, nullptr); 1838 nullptr, nullptr);
1872 GURL test_url("http://www.google.com"); 1839 GURL test_url("http://www.google.com");
1873 ProxyInfo info; 1840 ProxyInfo info;
1874 TestCompletionCallback callback; 1841 TestCompletionCallback callback;
1875 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1842 int rv = service.ResolveProxy(test_url, std::string(), &info,
1876 callback.callback(), nullptr, nullptr, 1843 callback.callback(), nullptr, nullptr,
1877 BoundNetLog()); 1844 BoundNetLog());
1878 ASSERT_THAT(rv, IsOk()); 1845 ASSERT_THAT(rv, IsOk());
1879 // ProxyConfig is empty. Source should still be TEST. 1846 // ProxyConfig is empty. Source should still be TEST.
1880 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); 1847 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source());
1881 } 1848 }
1882 } 1849 }
1883 1850
1884 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries 1851 // If only HTTP and a SOCKS proxy are specified, check if ftp/https queries
1885 // fall back to the SOCKS proxy. 1852 // fall back to the SOCKS proxy.
1886 TEST_F(ProxyServiceTest, DefaultProxyFallbackToSOCKS) { 1853 TEST_F(ProxyServiceTest, DefaultProxyFallbackToSOCKS) {
1887 ProxyConfig config; 1854 ProxyConfig config;
1888 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080"); 1855 config.proxy_rules().ParseFromString("http=foopy1:8080;socks=foopy2:1080");
1889 config.set_auto_detect(false); 1856 config.set_auto_detect(false);
1890 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME, 1857 EXPECT_EQ(ProxyConfig::ProxyRules::TYPE_PROXY_PER_SCHEME,
1891 config.proxy_rules().type); 1858 config.proxy_rules().type);
1892 1859
1893 { 1860 {
1894 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1861 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1895 nullptr, nullptr); 1862 nullptr, nullptr);
1896 GURL test_url("http://www.msn.com"); 1863 GURL test_url("http://www.msn.com");
1897 ProxyInfo info; 1864 ProxyInfo info;
1898 TestCompletionCallback callback; 1865 TestCompletionCallback callback;
1899 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1866 int rv = service.ResolveProxy(test_url, std::string(), &info,
1900 callback.callback(), nullptr, nullptr, 1867 callback.callback(), nullptr, nullptr,
1901 BoundNetLog()); 1868 BoundNetLog());
1902 EXPECT_THAT(rv, IsOk()); 1869 EXPECT_THAT(rv, IsOk());
1903 EXPECT_FALSE(info.is_direct()); 1870 EXPECT_FALSE(info.is_direct());
1904 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1871 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1905 } 1872 }
1906 { 1873 {
1907 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1874 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1908 nullptr, nullptr); 1875 nullptr, nullptr);
1909 GURL test_url("ftp://ftp.google.com"); 1876 GURL test_url("ftp://ftp.google.com");
1910 ProxyInfo info; 1877 ProxyInfo info;
1911 TestCompletionCallback callback; 1878 TestCompletionCallback callback;
1912 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1879 int rv = service.ResolveProxy(test_url, std::string(), &info,
1913 callback.callback(), nullptr, nullptr, 1880 callback.callback(), nullptr, nullptr,
1914 BoundNetLog()); 1881 BoundNetLog());
1915 EXPECT_THAT(rv, IsOk()); 1882 EXPECT_THAT(rv, IsOk());
1916 EXPECT_FALSE(info.is_direct()); 1883 EXPECT_FALSE(info.is_direct());
1917 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); 1884 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI());
1918 } 1885 }
1919 { 1886 {
1920 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1887 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1921 nullptr, nullptr); 1888 nullptr, nullptr);
1922 GURL test_url("https://webbranch.techcu.com"); 1889 GURL test_url("https://webbranch.techcu.com");
1923 ProxyInfo info; 1890 ProxyInfo info;
1924 TestCompletionCallback callback; 1891 TestCompletionCallback callback;
1925 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1892 int rv = service.ResolveProxy(test_url, std::string(), &info,
1926 callback.callback(), nullptr, nullptr, 1893 callback.callback(), nullptr, nullptr,
1927 BoundNetLog()); 1894 BoundNetLog());
1928 EXPECT_THAT(rv, IsOk()); 1895 EXPECT_THAT(rv, IsOk());
1929 EXPECT_FALSE(info.is_direct()); 1896 EXPECT_FALSE(info.is_direct());
1930 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); 1897 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI());
1931 } 1898 }
1932 { 1899 {
1933 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 1900 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
1934 nullptr, nullptr); 1901 nullptr, nullptr);
1935 GURL test_url("unknown://www.microsoft.com"); 1902 GURL test_url("unknown://www.microsoft.com");
1936 ProxyInfo info; 1903 ProxyInfo info;
1937 TestCompletionCallback callback; 1904 TestCompletionCallback callback;
1938 int rv = service.ResolveProxy(test_url, std::string(), LOAD_NORMAL, &info, 1905 int rv = service.ResolveProxy(test_url, std::string(), &info,
1939 callback.callback(), nullptr, nullptr, 1906 callback.callback(), nullptr, nullptr,
1940 BoundNetLog()); 1907 BoundNetLog());
1941 EXPECT_THAT(rv, IsOk()); 1908 EXPECT_THAT(rv, IsOk());
1942 EXPECT_FALSE(info.is_direct()); 1909 EXPECT_FALSE(info.is_direct());
1943 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI()); 1910 EXPECT_EQ("socks4://foopy2:1080", info.proxy_server().ToURI());
1944 } 1911 }
1945 } 1912 }
1946 1913
1947 // Test cancellation of an in-progress request. 1914 // Test cancellation of an in-progress request.
1948 TEST_F(ProxyServiceTest, CancelInProgressRequest) { 1915 TEST_F(ProxyServiceTest, CancelInProgressRequest) {
1949 const GURL url1("http://request1"); 1916 const GURL url1("http://request1");
1950 const GURL url2("http://request2"); 1917 const GURL url2("http://request2");
1951 const GURL url3("http://request3"); 1918 const GURL url3("http://request3");
1952 MockProxyConfigService* config_service = 1919 MockProxyConfigService* config_service =
1953 new MockProxyConfigService("http://foopy/proxy.pac"); 1920 new MockProxyConfigService("http://foopy/proxy.pac");
1954 1921
1955 MockAsyncProxyResolver resolver; 1922 MockAsyncProxyResolver resolver;
1956 MockAsyncProxyResolverFactory* factory = 1923 MockAsyncProxyResolverFactory* factory =
1957 new MockAsyncProxyResolverFactory(false); 1924 new MockAsyncProxyResolverFactory(false);
1958 1925
1959 ProxyService service(base::WrapUnique(config_service), 1926 ProxyService service(base::WrapUnique(config_service),
1960 base::WrapUnique(factory), nullptr); 1927 base::WrapUnique(factory), nullptr);
1961 1928
1962 // Start 3 requests. 1929 // Start 3 requests.
1963 1930
1964 ProxyInfo info1; 1931 ProxyInfo info1;
1965 TestCompletionCallback callback1; 1932 TestCompletionCallback callback1;
1966 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, 1933 int rv =
1967 callback1.callback(), nullptr, nullptr, 1934 service.ResolveProxy(url1, std::string(), &info1, callback1.callback(),
1968 BoundNetLog()); 1935 nullptr, nullptr, BoundNetLog());
1969 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1936 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1970 1937
1971 // Successfully initialize the PAC script. 1938 // Successfully initialize the PAC script.
1972 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1939 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1973 factory->pending_requests()[0]->script_data()->url()); 1940 factory->pending_requests()[0]->script_data()->url());
1974 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1941 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1975 1942
1976 GetPendingRequestsForURLs(resolver, url1); 1943 GetPendingRequestsForURLs(resolver, url1);
1977 1944
1978 ProxyInfo info2; 1945 ProxyInfo info2;
1979 TestCompletionCallback callback2; 1946 TestCompletionCallback callback2;
1980 ProxyService::PacRequest* request2; 1947 ProxyService::PacRequest* request2;
1981 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, 1948 rv = service.ResolveProxy(url2, std::string(), &info2, callback2.callback(),
1982 callback2.callback(), &request2, nullptr, 1949 &request2, nullptr, BoundNetLog());
1983 BoundNetLog());
1984 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1950 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1985 1951
1986 GetPendingRequestsForURLs(resolver, url1, url2); 1952 GetPendingRequestsForURLs(resolver, url1, url2);
1987 1953
1988 ProxyInfo info3; 1954 ProxyInfo info3;
1989 TestCompletionCallback callback3; 1955 TestCompletionCallback callback3;
1990 rv = service.ResolveProxy(url3, std::string(), LOAD_NORMAL, &info3, 1956 rv = service.ResolveProxy(url3, std::string(), &info3, callback3.callback(),
1991 callback3.callback(), nullptr, nullptr, 1957 nullptr, nullptr, BoundNetLog());
1992 BoundNetLog());
1993 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 1958 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
1994 GetPendingRequestsForURLs(resolver, url1, url2, url3); 1959 GetPendingRequestsForURLs(resolver, url1, url2, url3);
1995 1960
1996 // Cancel the second request 1961 // Cancel the second request
1997 service.CancelPacRequest(request2); 1962 service.CancelPacRequest(request2);
1998 1963
1999 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url3); 1964 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url3);
2000 1965
2001 // Complete the two un-cancelled requests. 1966 // Complete the two un-cancelled requests.
2002 // We complete the last one first, just to mix it up a bit. 1967 // We complete the last one first, just to mix it up a bit.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2034 1999
2035 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2000 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2036 service.SetProxyScriptFetchers( 2001 service.SetProxyScriptFetchers(
2037 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2002 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2038 2003
2039 // Start 3 requests. 2004 // Start 3 requests.
2040 2005
2041 ProxyInfo info1; 2006 ProxyInfo info1;
2042 TestCompletionCallback callback1; 2007 TestCompletionCallback callback1;
2043 ProxyService::PacRequest* request1; 2008 ProxyService::PacRequest* request1;
2044 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, 2009 int rv =
2045 callback1.callback(), &request1, nullptr, 2010 service.ResolveProxy(url1, std::string(), &info1, callback1.callback(),
2046 BoundNetLog()); 2011 &request1, nullptr, BoundNetLog());
2047 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2012 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2048 2013
2049 // The first request should have triggered download of PAC script. 2014 // The first request should have triggered download of PAC script.
2050 EXPECT_TRUE(fetcher->has_pending_request()); 2015 EXPECT_TRUE(fetcher->has_pending_request());
2051 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2016 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2052 2017
2053 ProxyInfo info2; 2018 ProxyInfo info2;
2054 TestCompletionCallback callback2; 2019 TestCompletionCallback callback2;
2055 ProxyService::PacRequest* request2; 2020 ProxyService::PacRequest* request2;
2056 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, 2021 rv = service.ResolveProxy(url2, std::string(), &info2, callback2.callback(),
2057 callback2.callback(), &request2, nullptr, 2022 &request2, nullptr, BoundNetLog());
2058 BoundNetLog());
2059 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2023 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2060 2024
2061 ProxyInfo info3; 2025 ProxyInfo info3;
2062 TestCompletionCallback callback3; 2026 TestCompletionCallback callback3;
2063 ProxyService::PacRequest* request3; 2027 ProxyService::PacRequest* request3;
2064 rv = service.ResolveProxy(url3, std::string(), LOAD_NORMAL, &info3, 2028 rv = service.ResolveProxy(url3, std::string(), &info3, callback3.callback(),
2065 callback3.callback(), &request3, nullptr, 2029 &request3, nullptr, BoundNetLog());
2066 BoundNetLog());
2067 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2030 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2068 2031
2069 // Nothing has been sent to the factory yet. 2032 // Nothing has been sent to the factory yet.
2070 EXPECT_TRUE(factory->pending_requests().empty()); 2033 EXPECT_TRUE(factory->pending_requests().empty());
2071 2034
2072 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, 2035 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT,
2073 service.GetLoadState(request1)); 2036 service.GetLoadState(request1));
2074 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, 2037 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT,
2075 service.GetLoadState(request2)); 2038 service.GetLoadState(request2));
2076 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT, 2039 EXPECT_EQ(LOAD_STATE_DOWNLOADING_PROXY_SCRIPT,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
2139 base::WrapUnique(factory), nullptr); 2102 base::WrapUnique(factory), nullptr);
2140 2103
2141 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2104 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2142 service.SetProxyScriptFetchers( 2105 service.SetProxyScriptFetchers(
2143 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2106 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2144 2107
2145 // Start 2 requests. 2108 // Start 2 requests.
2146 2109
2147 ProxyInfo info1; 2110 ProxyInfo info1;
2148 TestCompletionCallback callback1; 2111 TestCompletionCallback callback1;
2149 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, 2112 int rv =
2150 callback1.callback(), nullptr, nullptr, 2113 service.ResolveProxy(url1, std::string(), &info1, callback1.callback(),
2151 BoundNetLog()); 2114 nullptr, nullptr, BoundNetLog());
2152 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2115 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2153 2116
2154 // The first request should have triggered download of PAC script. 2117 // The first request should have triggered download of PAC script.
2155 EXPECT_TRUE(fetcher->has_pending_request()); 2118 EXPECT_TRUE(fetcher->has_pending_request());
2156 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2119 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2157 2120
2158 ProxyInfo info2; 2121 ProxyInfo info2;
2159 TestCompletionCallback callback2; 2122 TestCompletionCallback callback2;
2160 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, 2123 rv = service.ResolveProxy(url2, std::string(), &info2, callback2.callback(),
2161 callback2.callback(), nullptr, nullptr, 2124 nullptr, nullptr, BoundNetLog());
2162 BoundNetLog());
2163 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2125 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2164 2126
2165 // At this point the ProxyService should be waiting for the 2127 // At this point the ProxyService should be waiting for the
2166 // ProxyScriptFetcher to invoke its completion callback, notifying it of 2128 // ProxyScriptFetcher to invoke its completion callback, notifying it of
2167 // PAC script download completion. 2129 // PAC script download completion.
2168 2130
2169 // We now change out the ProxyService's script fetcher. We should restart 2131 // We now change out the ProxyService's script fetcher. We should restart
2170 // the initialization with the new fetcher. 2132 // the initialization with the new fetcher.
2171 2133
2172 fetcher = new MockProxyScriptFetcher; 2134 fetcher = new MockProxyScriptFetcher;
(...skipping 28 matching lines...) Expand all
2201 2163
2202 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2164 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2203 service.SetProxyScriptFetchers( 2165 service.SetProxyScriptFetchers(
2204 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2166 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2205 2167
2206 // Start 3 requests. 2168 // Start 3 requests.
2207 ProxyInfo info1; 2169 ProxyInfo info1;
2208 TestCompletionCallback callback1; 2170 TestCompletionCallback callback1;
2209 ProxyService::PacRequest* request1; 2171 ProxyService::PacRequest* request1;
2210 BoundTestNetLog log1; 2172 BoundTestNetLog log1;
2211 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 2173 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), &info1,
2212 LOAD_NORMAL, &info1, callback1.callback(), 2174 callback1.callback(), &request1, nullptr,
2213 &request1, nullptr, log1.bound()); 2175 log1.bound());
2214 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2176 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2215 2177
2216 // The first request should have triggered download of PAC script. 2178 // The first request should have triggered download of PAC script.
2217 EXPECT_TRUE(fetcher->has_pending_request()); 2179 EXPECT_TRUE(fetcher->has_pending_request());
2218 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2180 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2219 2181
2220 ProxyInfo info2; 2182 ProxyInfo info2;
2221 TestCompletionCallback callback2; 2183 TestCompletionCallback callback2;
2222 ProxyService::PacRequest* request2; 2184 ProxyService::PacRequest* request2;
2223 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 2185 rv = service.ResolveProxy(GURL("http://request2"), std::string(), &info2,
2224 &info2, callback2.callback(), &request2, nullptr, 2186 callback2.callback(), &request2, nullptr,
2225 BoundNetLog()); 2187 BoundNetLog());
2226 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2188 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2227 2189
2228 ProxyInfo info3; 2190 ProxyInfo info3;
2229 TestCompletionCallback callback3; 2191 TestCompletionCallback callback3;
2230 rv = service.ResolveProxy(GURL("http://request3"), std::string(), LOAD_NORMAL, 2192 rv = service.ResolveProxy(GURL("http://request3"), std::string(), &info3,
2231 &info3, callback3.callback(), nullptr, nullptr, 2193 callback3.callback(), nullptr, nullptr,
2232 BoundNetLog()); 2194 BoundNetLog());
2233 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2195 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2234 2196
2235 // Nothing has been sent to the factory yet. 2197 // Nothing has been sent to the factory yet.
2236 EXPECT_TRUE(factory->pending_requests().empty()); 2198 EXPECT_TRUE(factory->pending_requests().empty());
2237 2199
2238 // Cancel the first 2 requests. 2200 // Cancel the first 2 requests.
2239 service.CancelPacRequest(request1); 2201 service.CancelPacRequest(request1);
2240 service.CancelPacRequest(request2); 2202 service.CancelPacRequest(request2);
2241 2203
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2299 base::WrapUnique(factory), nullptr); 2261 base::WrapUnique(factory), nullptr);
2300 2262
2301 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2263 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2302 service.SetProxyScriptFetchers( 2264 service.SetProxyScriptFetchers(
2303 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2265 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2304 2266
2305 // Start 2 requests. 2267 // Start 2 requests.
2306 2268
2307 ProxyInfo info1; 2269 ProxyInfo info1;
2308 TestCompletionCallback callback1; 2270 TestCompletionCallback callback1;
2309 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, 2271 int rv =
2310 callback1.callback(), nullptr, nullptr, 2272 service.ResolveProxy(url1, std::string(), &info1, callback1.callback(),
2311 BoundNetLog()); 2273 nullptr, nullptr, BoundNetLog());
2312 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2274 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2313 2275
2314 ProxyInfo info2; 2276 ProxyInfo info2;
2315 TestCompletionCallback callback2; 2277 TestCompletionCallback callback2;
2316 ProxyService::PacRequest* request2; 2278 ProxyService::PacRequest* request2;
2317 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, 2279 rv = service.ResolveProxy(url2, std::string(), &info2, callback2.callback(),
2318 callback2.callback(), &request2, nullptr, 2280 &request2, nullptr, BoundNetLog());
2319 BoundNetLog());
2320 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2281 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2321 2282
2322 // Check that nothing has been sent to the proxy resolver factory yet. 2283 // Check that nothing has been sent to the proxy resolver factory yet.
2323 ASSERT_EQ(0u, factory->pending_requests().size()); 2284 ASSERT_EQ(0u, factory->pending_requests().size());
2324 2285
2325 // It should be trying to auto-detect first -- FAIL the autodetect during 2286 // It should be trying to auto-detect first -- FAIL the autodetect during
2326 // the script download. 2287 // the script download.
2327 EXPECT_TRUE(fetcher->has_pending_request()); 2288 EXPECT_TRUE(fetcher->has_pending_request());
2328 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); 2289 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url());
2329 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); 2290 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string());
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
2380 base::WrapUnique(factory), nullptr); 2341 base::WrapUnique(factory), nullptr);
2381 2342
2382 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2343 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2383 service.SetProxyScriptFetchers( 2344 service.SetProxyScriptFetchers(
2384 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2345 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2385 2346
2386 // Start 2 requests. 2347 // Start 2 requests.
2387 2348
2388 ProxyInfo info1; 2349 ProxyInfo info1;
2389 TestCompletionCallback callback1; 2350 TestCompletionCallback callback1;
2390 int rv = service.ResolveProxy(url1, std::string(), LOAD_NORMAL, &info1, 2351 int rv =
2391 callback1.callback(), nullptr, nullptr, 2352 service.ResolveProxy(url1, std::string(), &info1, callback1.callback(),
2392 BoundNetLog()); 2353 nullptr, nullptr, BoundNetLog());
2393 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2354 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2394 2355
2395 ProxyInfo info2; 2356 ProxyInfo info2;
2396 TestCompletionCallback callback2; 2357 TestCompletionCallback callback2;
2397 ProxyService::PacRequest* request2; 2358 ProxyService::PacRequest* request2;
2398 rv = service.ResolveProxy(url2, std::string(), LOAD_NORMAL, &info2, 2359 rv = service.ResolveProxy(url2, std::string(), &info2, callback2.callback(),
2399 callback2.callback(), &request2, nullptr, 2360 &request2, nullptr, BoundNetLog());
2400 BoundNetLog());
2401 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2361 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2402 2362
2403 // Check that nothing has been sent to the proxy resolver factory yet. 2363 // Check that nothing has been sent to the proxy resolver factory yet.
2404 ASSERT_EQ(0u, factory->pending_requests().size()); 2364 ASSERT_EQ(0u, factory->pending_requests().size());
2405 2365
2406 // It should be trying to auto-detect first -- succeed the download. 2366 // It should be trying to auto-detect first -- succeed the download.
2407 EXPECT_TRUE(fetcher->has_pending_request()); 2367 EXPECT_TRUE(fetcher->has_pending_request());
2408 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); 2368 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url());
2409 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents"); 2369 fetcher->NotifyFetchCompletion(OK, "invalid-script-contents");
2410 2370
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2454 base::WrapUnique(factory), nullptr); 2414 base::WrapUnique(factory), nullptr);
2455 2415
2456 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2416 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2457 service.SetProxyScriptFetchers( 2417 service.SetProxyScriptFetchers(
2458 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2418 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2459 2419
2460 // Start 2 requests. 2420 // Start 2 requests.
2461 2421
2462 ProxyInfo info1; 2422 ProxyInfo info1;
2463 TestCompletionCallback callback1; 2423 TestCompletionCallback callback1;
2464 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 2424 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), &info1,
2465 LOAD_NORMAL, &info1, callback1.callback(), 2425 callback1.callback(), nullptr, nullptr,
2466 nullptr, nullptr, BoundNetLog()); 2426 BoundNetLog());
2467 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2427 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2468 2428
2469 ProxyInfo info2; 2429 ProxyInfo info2;
2470 TestCompletionCallback callback2; 2430 TestCompletionCallback callback2;
2471 ProxyService::PacRequest* request2; 2431 ProxyService::PacRequest* request2;
2472 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 2432 rv = service.ResolveProxy(GURL("http://request2"), std::string(), &info2,
2473 &info2, callback2.callback(), &request2, nullptr, 2433 callback2.callback(), &request2, nullptr,
2474 BoundNetLog()); 2434 BoundNetLog());
2475 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2435 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2476 2436
2477 // Check that nothing has been sent to the proxy resolver factory yet. 2437 // Check that nothing has been sent to the proxy resolver factory yet.
2478 ASSERT_EQ(0u, factory->pending_requests().size()); 2438 ASSERT_EQ(0u, factory->pending_requests().size());
2479 2439
2480 // It should be trying to auto-detect first -- fail the download. 2440 // It should be trying to auto-detect first -- fail the download.
2481 EXPECT_TRUE(fetcher->has_pending_request()); 2441 EXPECT_TRUE(fetcher->has_pending_request());
2482 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); 2442 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url());
2483 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); 2443 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string());
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2517 2477
2518 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2478 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2519 service.SetProxyScriptFetchers( 2479 service.SetProxyScriptFetchers(
2520 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2480 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2521 2481
2522 // Start 1 requests. 2482 // Start 1 requests.
2523 2483
2524 ProxyInfo info1; 2484 ProxyInfo info1;
2525 TestCompletionCallback callback1; 2485 TestCompletionCallback callback1;
2526 int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), 2486 int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(),
2527 LOAD_NORMAL, &info1, callback1.callback(), 2487 &info1, callback1.callback(), nullptr, nullptr,
2528 nullptr, nullptr, BoundNetLog()); 2488 BoundNetLog());
2529 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2489 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2530 2490
2531 // Check that nothing has been sent to the proxy resolver factory yet. 2491 // Check that nothing has been sent to the proxy resolver factory yet.
2532 ASSERT_EQ(0u, factory->pending_requests().size()); 2492 ASSERT_EQ(0u, factory->pending_requests().size());
2533 2493
2534 // It should be trying to auto-detect first -- succeed the download. 2494 // It should be trying to auto-detect first -- succeed the download.
2535 EXPECT_TRUE(fetcher->has_pending_request()); 2495 EXPECT_TRUE(fetcher->has_pending_request());
2536 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); 2496 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url());
2537 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2497 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
2538 2498
(...skipping 10 matching lines...) Expand all
2549 resolver.pending_requests()[0]->CompleteNow(OK); 2509 resolver.pending_requests()[0]->CompleteNow(OK);
2550 2510
2551 // Verify that request ran as expected. 2511 // Verify that request ran as expected.
2552 EXPECT_THAT(callback1.WaitForResult(), IsOk()); 2512 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2553 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2513 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2554 2514
2555 // Start another request, it should pickup the bypass item. 2515 // Start another request, it should pickup the bypass item.
2556 ProxyInfo info2; 2516 ProxyInfo info2;
2557 TestCompletionCallback callback2; 2517 TestCompletionCallback callback2;
2558 rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), 2518 rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(),
2559 LOAD_NORMAL, &info2, callback2.callback(), nullptr, 2519 &info2, callback2.callback(), nullptr, nullptr,
2560 nullptr, BoundNetLog()); 2520 BoundNetLog());
2561 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2521 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2562 2522
2563 ASSERT_EQ(1u, resolver.pending_requests().size()); 2523 ASSERT_EQ(1u, resolver.pending_requests().size());
2564 EXPECT_EQ(GURL("http://www.google.com"), 2524 EXPECT_EQ(GURL("http://www.google.com"),
2565 resolver.pending_requests()[0]->url()); 2525 resolver.pending_requests()[0]->url());
2566 2526
2567 // Complete the pending request. 2527 // Complete the pending request.
2568 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 2528 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80");
2569 resolver.pending_requests()[0]->CompleteNow(OK); 2529 resolver.pending_requests()[0]->CompleteNow(OK);
2570 2530
(...skipping 17 matching lines...) Expand all
2588 2548
2589 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2549 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2590 service.SetProxyScriptFetchers( 2550 service.SetProxyScriptFetchers(
2591 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2551 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2592 2552
2593 // Start 1 request. 2553 // Start 1 request.
2594 2554
2595 ProxyInfo info1; 2555 ProxyInfo info1;
2596 TestCompletionCallback callback1; 2556 TestCompletionCallback callback1;
2597 int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), 2557 int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(),
2598 LOAD_NORMAL, &info1, callback1.callback(), 2558 &info1, callback1.callback(), nullptr, nullptr,
2599 nullptr, nullptr, BoundNetLog()); 2559 BoundNetLog());
2600 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2560 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2601 2561
2602 // Check that nothing has been sent to the proxy resolver factory yet. 2562 // Check that nothing has been sent to the proxy resolver factory yet.
2603 ASSERT_EQ(0u, factory->pending_requests().size()); 2563 ASSERT_EQ(0u, factory->pending_requests().size());
2604 2564
2605 // InitProxyResolver should have issued a request to the ProxyScriptFetcher 2565 // InitProxyResolver should have issued a request to the ProxyScriptFetcher
2606 // and be waiting on that to complete. 2566 // and be waiting on that to complete.
2607 EXPECT_TRUE(fetcher->has_pending_request()); 2567 EXPECT_TRUE(fetcher->has_pending_request());
2608 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2568 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2609 } 2569 }
2610 2570
2611 // Delete the ProxyService while InitProxyResolver has an outstanding 2571 // Delete the ProxyService while InitProxyResolver has an outstanding
2612 // request to the proxy resolver. When run under valgrind, should not 2572 // request to the proxy resolver. When run under valgrind, should not
2613 // have any memory errors (used to be that the ProxyResolver was 2573 // have any memory errors (used to be that the ProxyResolver was
2614 // being deleted prior to the InitProxyResolver). 2574 // being deleted prior to the InitProxyResolver).
2615 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingSet) { 2575 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingSet) {
2616 MockProxyConfigService* config_service = 2576 MockProxyConfigService* config_service =
2617 new MockProxyConfigService("http://foopy/proxy.pac"); 2577 new MockProxyConfigService("http://foopy/proxy.pac");
2618 2578
2619 MockAsyncProxyResolverFactory* factory = 2579 MockAsyncProxyResolverFactory* factory =
2620 new MockAsyncProxyResolverFactory(false); 2580 new MockAsyncProxyResolverFactory(false);
2621 2581
2622 ProxyService service(base::WrapUnique(config_service), 2582 ProxyService service(base::WrapUnique(config_service),
2623 base::WrapUnique(factory), nullptr); 2583 base::WrapUnique(factory), nullptr);
2624 2584
2625 GURL url("http://www.google.com/"); 2585 GURL url("http://www.google.com/");
2626 2586
2627 ProxyInfo info; 2587 ProxyInfo info;
2628 TestCompletionCallback callback; 2588 TestCompletionCallback callback;
2629 int rv = service.ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 2589 int rv = service.ResolveProxy(url, std::string(), &info, callback.callback(),
2630 callback.callback(), nullptr, nullptr, 2590 nullptr, nullptr, BoundNetLog());
2631 BoundNetLog());
2632 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2591 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2633 2592
2634 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 2593 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
2635 factory->pending_requests()[0]->script_data()->url()); 2594 factory->pending_requests()[0]->script_data()->url());
2636 } 2595 }
2637 2596
2638 TEST_F(ProxyServiceTest, ResetProxyConfigService) { 2597 TEST_F(ProxyServiceTest, ResetProxyConfigService) {
2639 ProxyConfig config1; 2598 ProxyConfig config1;
2640 config1.proxy_rules().ParseFromString("foopy1:8080"); 2599 config1.proxy_rules().ParseFromString("foopy1:8080");
2641 config1.set_auto_detect(false); 2600 config1.set_auto_detect(false);
2642 ProxyService service(base::WrapUnique(new MockProxyConfigService(config1)), 2601 ProxyService service(base::WrapUnique(new MockProxyConfigService(config1)),
2643 nullptr, nullptr); 2602 nullptr, nullptr);
2644 2603
2645 ProxyInfo info; 2604 ProxyInfo info;
2646 TestCompletionCallback callback1; 2605 TestCompletionCallback callback1;
2647 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 2606 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), &info,
2648 LOAD_NORMAL, &info, callback1.callback(), 2607 callback1.callback(), nullptr, nullptr,
2649 nullptr, nullptr, BoundNetLog()); 2608 BoundNetLog());
2650 EXPECT_THAT(rv, IsOk()); 2609 EXPECT_THAT(rv, IsOk());
2651 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 2610 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
2652 2611
2653 ProxyConfig config2; 2612 ProxyConfig config2;
2654 config2.proxy_rules().ParseFromString("foopy2:8080"); 2613 config2.proxy_rules().ParseFromString("foopy2:8080");
2655 config2.set_auto_detect(false); 2614 config2.set_auto_detect(false);
2656 service.ResetConfigService( 2615 service.ResetConfigService(
2657 base::WrapUnique(new MockProxyConfigService(config2))); 2616 base::WrapUnique(new MockProxyConfigService(config2)));
2658 TestCompletionCallback callback2; 2617 TestCompletionCallback callback2;
2659 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 2618 rv = service.ResolveProxy(GURL("http://request2"), std::string(), &info,
2660 &info, callback2.callback(), nullptr, nullptr, 2619 callback2.callback(), nullptr, nullptr,
2661 BoundNetLog()); 2620 BoundNetLog());
2662 EXPECT_THAT(rv, IsOk()); 2621 EXPECT_THAT(rv, IsOk());
2663 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI()); 2622 EXPECT_EQ("foopy2:8080", info.proxy_server().ToURI());
2664 } 2623 }
2665 2624
2666 // Test that when going from a configuration that required PAC to one 2625 // Test that when going from a configuration that required PAC to one
2667 // that does NOT, we unset the variable |should_use_proxy_resolver_|. 2626 // that does NOT, we unset the variable |should_use_proxy_resolver_|.
2668 TEST_F(ProxyServiceTest, UpdateConfigFromPACToDirect) { 2627 TEST_F(ProxyServiceTest, UpdateConfigFromPACToDirect) {
2669 ProxyConfig config = ProxyConfig::CreateAutoDetect(); 2628 ProxyConfig config = ProxyConfig::CreateAutoDetect();
2670 2629
2671 MockProxyConfigService* config_service = new MockProxyConfigService(config); 2630 MockProxyConfigService* config_service = new MockProxyConfigService(config);
2672 MockAsyncProxyResolver resolver; 2631 MockAsyncProxyResolver resolver;
2673 MockAsyncProxyResolverFactory* factory = 2632 MockAsyncProxyResolverFactory* factory =
2674 new MockAsyncProxyResolverFactory(false); 2633 new MockAsyncProxyResolverFactory(false);
2675 ProxyService service(base::WrapUnique(config_service), 2634 ProxyService service(base::WrapUnique(config_service),
2676 base::WrapUnique(factory), nullptr); 2635 base::WrapUnique(factory), nullptr);
2677 2636
2678 // Start 1 request. 2637 // Start 1 request.
2679 2638
2680 ProxyInfo info1; 2639 ProxyInfo info1;
2681 TestCompletionCallback callback1; 2640 TestCompletionCallback callback1;
2682 int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), 2641 int rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(),
2683 LOAD_NORMAL, &info1, callback1.callback(), 2642 &info1, callback1.callback(), nullptr, nullptr,
2684 nullptr, nullptr, BoundNetLog()); 2643 BoundNetLog());
2685 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2644 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2686 2645
2687 // Successfully set the autodetect script. 2646 // Successfully set the autodetect script.
2688 EXPECT_EQ(ProxyResolverScriptData::TYPE_AUTO_DETECT, 2647 EXPECT_EQ(ProxyResolverScriptData::TYPE_AUTO_DETECT,
2689 factory->pending_requests()[0]->script_data()->type()); 2648 factory->pending_requests()[0]->script_data()->type());
2690 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2649 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2691 2650
2692 // Complete the pending request. 2651 // Complete the pending request.
2693 ASSERT_EQ(1u, resolver.pending_requests().size()); 2652 ASSERT_EQ(1u, resolver.pending_requests().size());
2694 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 2653 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80");
2695 resolver.pending_requests()[0]->CompleteNow(OK); 2654 resolver.pending_requests()[0]->CompleteNow(OK);
2696 2655
2697 // Verify that request ran as expected. 2656 // Verify that request ran as expected.
2698 EXPECT_THAT(callback1.WaitForResult(), IsOk()); 2657 EXPECT_THAT(callback1.WaitForResult(), IsOk());
2699 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2658 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2700 2659
2701 // Force the ProxyService to pull down a new proxy configuration. 2660 // Force the ProxyService to pull down a new proxy configuration.
2702 // (Even though the configuration isn't old/bad). 2661 // (Even though the configuration isn't old/bad).
2703 // 2662 //
2704 // This new configuration no longer has auto_detect set, so 2663 // This new configuration no longer has auto_detect set, so
2705 // requests should complete synchronously now as direct-connect. 2664 // requests should complete synchronously now as direct-connect.
2706 config_service->SetConfig(ProxyConfig::CreateDirect()); 2665 config_service->SetConfig(ProxyConfig::CreateDirect());
2707 2666
2708 // Start another request -- the effective configuration has changed. 2667 // Start another request -- the effective configuration has changed.
2709 ProxyInfo info2; 2668 ProxyInfo info2;
2710 TestCompletionCallback callback2; 2669 TestCompletionCallback callback2;
2711 rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(), 2670 rv = service.ResolveProxy(GURL("http://www.google.com"), std::string(),
2712 LOAD_NORMAL, &info2, callback2.callback(), nullptr, 2671 &info2, callback2.callback(), nullptr, nullptr,
2713 nullptr, BoundNetLog()); 2672 BoundNetLog());
2714 EXPECT_THAT(rv, IsOk()); 2673 EXPECT_THAT(rv, IsOk());
2715 2674
2716 EXPECT_TRUE(info2.is_direct()); 2675 EXPECT_TRUE(info2.is_direct());
2717 } 2676 }
2718 2677
2719 TEST_F(ProxyServiceTest, NetworkChangeTriggersPacRefetch) { 2678 TEST_F(ProxyServiceTest, NetworkChangeTriggersPacRefetch) {
2720 MockProxyConfigService* config_service = 2679 MockProxyConfigService* config_service =
2721 new MockProxyConfigService("http://foopy/proxy.pac"); 2680 new MockProxyConfigService("http://foopy/proxy.pac");
2722 2681
2723 MockAsyncProxyResolver resolver; 2682 MockAsyncProxyResolver resolver;
(...skipping 10 matching lines...) Expand all
2734 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2693 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2735 2694
2736 // Disable the "wait after IP address changes" hack, so this unit-test can 2695 // Disable the "wait after IP address changes" hack, so this unit-test can
2737 // complete quickly. 2696 // complete quickly.
2738 service.set_stall_proxy_auto_config_delay(base::TimeDelta()); 2697 service.set_stall_proxy_auto_config_delay(base::TimeDelta());
2739 2698
2740 // Start 1 request. 2699 // Start 1 request.
2741 2700
2742 ProxyInfo info1; 2701 ProxyInfo info1;
2743 TestCompletionCallback callback1; 2702 TestCompletionCallback callback1;
2744 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 2703 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), &info1,
2745 LOAD_NORMAL, &info1, callback1.callback(), 2704 callback1.callback(), nullptr, nullptr,
2746 nullptr, nullptr, BoundNetLog()); 2705 BoundNetLog());
2747 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2706 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2748 2707
2749 // The first request should have triggered initial download of PAC script. 2708 // The first request should have triggered initial download of PAC script.
2750 EXPECT_TRUE(fetcher->has_pending_request()); 2709 EXPECT_TRUE(fetcher->has_pending_request());
2751 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2710 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2752 2711
2753 // Nothing has been sent to the factory yet. 2712 // Nothing has been sent to the factory yet.
2754 EXPECT_TRUE(factory->pending_requests().empty()); 2713 EXPECT_TRUE(factory->pending_requests().empty());
2755 2714
2756 // At this point the ProxyService should be waiting for the 2715 // At this point the ProxyService should be waiting for the
(...skipping 20 matching lines...) Expand all
2777 2736
2778 // Now simluate a change in the network. The ProxyConfigService is still 2737 // Now simluate a change in the network. The ProxyConfigService is still
2779 // going to return the same PAC URL as before, but this URL needs to be 2738 // going to return the same PAC URL as before, but this URL needs to be
2780 // refetched on the new network. 2739 // refetched on the new network.
2781 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); 2740 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
2782 base::RunLoop().RunUntilIdle(); // Notification happens async. 2741 base::RunLoop().RunUntilIdle(); // Notification happens async.
2783 2742
2784 // Start a second request. 2743 // Start a second request.
2785 ProxyInfo info2; 2744 ProxyInfo info2;
2786 TestCompletionCallback callback2; 2745 TestCompletionCallback callback2;
2787 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 2746 rv = service.ResolveProxy(GURL("http://request2"), std::string(), &info2,
2788 &info2, callback2.callback(), nullptr, nullptr, 2747 callback2.callback(), nullptr, nullptr,
2789 BoundNetLog()); 2748 BoundNetLog());
2790 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2749 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2791 2750
2792 // This second request should have triggered the re-download of the PAC 2751 // This second request should have triggered the re-download of the PAC
2793 // script (since we marked the network as having changed). 2752 // script (since we marked the network as having changed).
2794 EXPECT_TRUE(fetcher->has_pending_request()); 2753 EXPECT_TRUE(fetcher->has_pending_request());
2795 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2754 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2796 2755
2797 // Nothing has been sent to the factory yet. 2756 // Nothing has been sent to the factory yet.
2798 EXPECT_TRUE(factory->pending_requests().empty()); 2757 EXPECT_TRUE(factory->pending_requests().empty());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
2852 base::WrapUnique(factory), nullptr); 2811 base::WrapUnique(factory), nullptr);
2853 2812
2854 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2813 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2855 service.SetProxyScriptFetchers( 2814 service.SetProxyScriptFetchers(
2856 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2815 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2857 2816
2858 // Start 1 request. 2817 // Start 1 request.
2859 2818
2860 ProxyInfo info1; 2819 ProxyInfo info1;
2861 TestCompletionCallback callback1; 2820 TestCompletionCallback callback1;
2862 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 2821 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), &info1,
2863 LOAD_NORMAL, &info1, callback1.callback(), 2822 callback1.callback(), nullptr, nullptr,
2864 nullptr, nullptr, BoundNetLog()); 2823 BoundNetLog());
2865 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2824 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2866 2825
2867 // The first request should have triggered initial download of PAC script. 2826 // The first request should have triggered initial download of PAC script.
2868 EXPECT_TRUE(fetcher->has_pending_request()); 2827 EXPECT_TRUE(fetcher->has_pending_request());
2869 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2828 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2870 2829
2871 // Nothing has been sent to the factory yet. 2830 // Nothing has been sent to the factory yet.
2872 EXPECT_TRUE(factory->pending_requests().empty()); 2831 EXPECT_TRUE(factory->pending_requests().empty());
2873 2832
2874 // At this point the ProxyService should be waiting for the 2833 // At this point the ProxyService should be waiting for the
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2913 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2872 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2914 2873
2915 // At this point the ProxyService should have re-configured itself to use the 2874 // At this point the ProxyService should have re-configured itself to use the
2916 // PAC script (thereby recovering from the initial fetch failure). We will 2875 // PAC script (thereby recovering from the initial fetch failure). We will
2917 // verify that the next Resolve request uses the resolver rather than 2876 // verify that the next Resolve request uses the resolver rather than
2918 // DIRECT. 2877 // DIRECT.
2919 2878
2920 // Start a second request. 2879 // Start a second request.
2921 ProxyInfo info2; 2880 ProxyInfo info2;
2922 TestCompletionCallback callback2; 2881 TestCompletionCallback callback2;
2923 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 2882 rv = service.ResolveProxy(GURL("http://request2"), std::string(), &info2,
2924 &info2, callback2.callback(), nullptr, nullptr, 2883 callback2.callback(), nullptr, nullptr,
2925 BoundNetLog()); 2884 BoundNetLog());
2926 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2885 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2927 2886
2928 // Check that it was sent to the resolver. 2887 // Check that it was sent to the resolver.
2929 ASSERT_EQ(1u, resolver.pending_requests().size()); 2888 ASSERT_EQ(1u, resolver.pending_requests().size());
2930 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 2889 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url());
2931 2890
2932 // Complete the pending second request. 2891 // Complete the pending second request.
2933 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 2892 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80");
2934 resolver.pending_requests()[0]->CompleteNow(OK); 2893 resolver.pending_requests()[0]->CompleteNow(OK);
(...skipping 24 matching lines...) Expand all
2959 base::WrapUnique(factory), nullptr); 2918 base::WrapUnique(factory), nullptr);
2960 2919
2961 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2920 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2962 service.SetProxyScriptFetchers( 2921 service.SetProxyScriptFetchers(
2963 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 2922 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
2964 2923
2965 // Start 1 request. 2924 // Start 1 request.
2966 2925
2967 ProxyInfo info1; 2926 ProxyInfo info1;
2968 TestCompletionCallback callback1; 2927 TestCompletionCallback callback1;
2969 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 2928 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), &info1,
2970 LOAD_NORMAL, &info1, callback1.callback(), 2929 callback1.callback(), nullptr, nullptr,
2971 nullptr, nullptr, BoundNetLog()); 2930 BoundNetLog());
2972 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2931 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
2973 2932
2974 // The first request should have triggered initial download of PAC script. 2933 // The first request should have triggered initial download of PAC script.
2975 EXPECT_TRUE(fetcher->has_pending_request()); 2934 EXPECT_TRUE(fetcher->has_pending_request());
2976 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2935 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2977 2936
2978 // Nothing has been sent to the factory yet. 2937 // Nothing has been sent to the factory yet.
2979 EXPECT_TRUE(factory->pending_requests().empty()); 2938 EXPECT_TRUE(factory->pending_requests().empty());
2980 2939
2981 // At this point the ProxyService should be waiting for the 2940 // At this point the ProxyService should be waiting for the
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
3026 EXPECT_EQ(ASCIIToUTF16(kValidPacScript2), 2985 EXPECT_EQ(ASCIIToUTF16(kValidPacScript2),
3027 factory->pending_requests()[0]->script_data()->utf16()); 2986 factory->pending_requests()[0]->script_data()->utf16());
3028 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2987 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
3029 2988
3030 // At this point the ProxyService should have re-configured itself to use the 2989 // At this point the ProxyService should have re-configured itself to use the
3031 // new PAC script. 2990 // new PAC script.
3032 2991
3033 // Start a second request. 2992 // Start a second request.
3034 ProxyInfo info2; 2993 ProxyInfo info2;
3035 TestCompletionCallback callback2; 2994 TestCompletionCallback callback2;
3036 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 2995 rv = service.ResolveProxy(GURL("http://request2"), std::string(), &info2,
3037 &info2, callback2.callback(), nullptr, nullptr, 2996 callback2.callback(), nullptr, nullptr,
3038 BoundNetLog()); 2997 BoundNetLog());
3039 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 2998 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3040 2999
3041 // Check that it was sent to the resolver. 3000 // Check that it was sent to the resolver.
3042 ASSERT_EQ(1u, resolver.pending_requests().size()); 3001 ASSERT_EQ(1u, resolver.pending_requests().size());
3043 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 3002 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url());
3044 3003
3045 // Complete the pending second request. 3004 // Complete the pending second request.
3046 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 3005 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80");
3047 resolver.pending_requests()[0]->CompleteNow(OK); 3006 resolver.pending_requests()[0]->CompleteNow(OK);
(...skipping 24 matching lines...) Expand all
3072 base::WrapUnique(factory), nullptr); 3031 base::WrapUnique(factory), nullptr);
3073 3032
3074 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 3033 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
3075 service.SetProxyScriptFetchers( 3034 service.SetProxyScriptFetchers(
3076 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 3035 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
3077 3036
3078 // Start 1 request. 3037 // Start 1 request.
3079 3038
3080 ProxyInfo info1; 3039 ProxyInfo info1;
3081 TestCompletionCallback callback1; 3040 TestCompletionCallback callback1;
3082 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 3041 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), &info1,
3083 LOAD_NORMAL, &info1, callback1.callback(), 3042 callback1.callback(), nullptr, nullptr,
3084 nullptr, nullptr, BoundNetLog()); 3043 BoundNetLog());
3085 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 3044 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3086 3045
3087 // The first request should have triggered initial download of PAC script. 3046 // The first request should have triggered initial download of PAC script.
3088 EXPECT_TRUE(fetcher->has_pending_request()); 3047 EXPECT_TRUE(fetcher->has_pending_request());
3089 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 3048 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
3090 3049
3091 // Nothing has been sent to the factory yet. 3050 // Nothing has been sent to the factory yet.
3092 EXPECT_TRUE(factory->pending_requests().empty()); 3051 EXPECT_TRUE(factory->pending_requests().empty());
3093 3052
3094 // At this point the ProxyService should be waiting for the 3053 // At this point the ProxyService should be waiting for the
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
3136 3095
3137 ASSERT_TRUE(factory->pending_requests().empty()); 3096 ASSERT_TRUE(factory->pending_requests().empty());
3138 ASSERT_TRUE(resolver.pending_requests().empty()); 3097 ASSERT_TRUE(resolver.pending_requests().empty());
3139 3098
3140 // At this point the ProxyService is still running the same PAC script as 3099 // At this point the ProxyService is still running the same PAC script as
3141 // before. 3100 // before.
3142 3101
3143 // Start a second request. 3102 // Start a second request.
3144 ProxyInfo info2; 3103 ProxyInfo info2;
3145 TestCompletionCallback callback2; 3104 TestCompletionCallback callback2;
3146 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 3105 rv = service.ResolveProxy(GURL("http://request2"), std::string(), &info2,
3147 &info2, callback2.callback(), nullptr, nullptr, 3106 callback2.callback(), nullptr, nullptr,
3148 BoundNetLog()); 3107 BoundNetLog());
3149 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 3108 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3150 3109
3151 // Check that it was sent to the resolver. 3110 // Check that it was sent to the resolver.
3152 ASSERT_EQ(1u, resolver.pending_requests().size()); 3111 ASSERT_EQ(1u, resolver.pending_requests().size());
3153 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 3112 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url());
3154 3113
3155 // Complete the pending second request. 3114 // Complete the pending second request.
3156 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 3115 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80");
3157 resolver.pending_requests()[0]->CompleteNow(OK); 3116 resolver.pending_requests()[0]->CompleteNow(OK);
(...skipping 24 matching lines...) Expand all
3182 base::WrapUnique(factory), nullptr); 3141 base::WrapUnique(factory), nullptr);
3183 3142
3184 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 3143 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
3185 service.SetProxyScriptFetchers( 3144 service.SetProxyScriptFetchers(
3186 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 3145 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
3187 3146
3188 // Start 1 request. 3147 // Start 1 request.
3189 3148
3190 ProxyInfo info1; 3149 ProxyInfo info1;
3191 TestCompletionCallback callback1; 3150 TestCompletionCallback callback1;
3192 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 3151 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), &info1,
3193 LOAD_NORMAL, &info1, callback1.callback(), 3152 callback1.callback(), nullptr, nullptr,
3194 nullptr, nullptr, BoundNetLog()); 3153 BoundNetLog());
3195 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 3154 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3196 3155
3197 // The first request should have triggered initial download of PAC script. 3156 // The first request should have triggered initial download of PAC script.
3198 EXPECT_TRUE(fetcher->has_pending_request()); 3157 EXPECT_TRUE(fetcher->has_pending_request());
3199 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 3158 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
3200 3159
3201 // Nothing has been sent to the factory yet. 3160 // Nothing has been sent to the factory yet.
3202 EXPECT_TRUE(factory->pending_requests().empty()); 3161 EXPECT_TRUE(factory->pending_requests().empty());
3203 3162
3204 // At this point the ProxyService should be waiting for the 3163 // At this point the ProxyService should be waiting for the
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
3243 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); 3202 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string());
3244 3203
3245 base::RunLoop().RunUntilIdle(); 3204 base::RunLoop().RunUntilIdle();
3246 3205
3247 // At this point the ProxyService should have re-configured itself to use 3206 // At this point the ProxyService should have re-configured itself to use
3248 // DIRECT connections rather than the given proxy resolver. 3207 // DIRECT connections rather than the given proxy resolver.
3249 3208
3250 // Start a second request. 3209 // Start a second request.
3251 ProxyInfo info2; 3210 ProxyInfo info2;
3252 TestCompletionCallback callback2; 3211 TestCompletionCallback callback2;
3253 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 3212 rv = service.ResolveProxy(GURL("http://request2"), std::string(), &info2,
3254 &info2, callback2.callback(), nullptr, nullptr, 3213 callback2.callback(), nullptr, nullptr,
3255 BoundNetLog()); 3214 BoundNetLog());
3256 EXPECT_THAT(rv, IsOk()); 3215 EXPECT_THAT(rv, IsOk());
3257 EXPECT_TRUE(info2.is_direct()); 3216 EXPECT_TRUE(info2.is_direct());
3258 } 3217 }
3259 3218
3260 // Tests that the code which decides at what times to poll the PAC 3219 // Tests that the code which decides at what times to poll the PAC
3261 // script follows the expected policy. 3220 // script follows the expected policy.
3262 TEST_F(ProxyServiceTest, PACScriptPollingPolicy) { 3221 TEST_F(ProxyServiceTest, PACScriptPollingPolicy) {
3263 // Retrieve the internal polling policy implementation used by ProxyService. 3222 // Retrieve the internal polling policy implementation used by ProxyService.
3264 std::unique_ptr<ProxyService::PacPollPolicy> policy = 3223 std::unique_ptr<ProxyService::PacPollPolicy> policy =
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
3337 base::WrapUnique(factory), nullptr); 3296 base::WrapUnique(factory), nullptr);
3338 3297
3339 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 3298 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
3340 service.SetProxyScriptFetchers( 3299 service.SetProxyScriptFetchers(
3341 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher())); 3300 fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
3342 3301
3343 // Start 1 request. 3302 // Start 1 request.
3344 3303
3345 ProxyInfo info1; 3304 ProxyInfo info1;
3346 TestCompletionCallback callback1; 3305 TestCompletionCallback callback1;
3347 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), 3306 int rv = service.ResolveProxy(GURL("http://request1"), std::string(), &info1,
3348 LOAD_NORMAL, &info1, callback1.callback(), 3307 callback1.callback(), nullptr, nullptr,
3349 nullptr, nullptr, BoundNetLog()); 3308 BoundNetLog());
3350 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 3309 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3351 3310
3352 // The first request should have triggered initial download of PAC script. 3311 // The first request should have triggered initial download of PAC script.
3353 EXPECT_TRUE(fetcher->has_pending_request()); 3312 EXPECT_TRUE(fetcher->has_pending_request());
3354 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 3313 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
3355 3314
3356 // Nothing has been sent to the factory yet. 3315 // Nothing has been sent to the factory yet.
3357 EXPECT_TRUE(factory->pending_requests().empty()); 3316 EXPECT_TRUE(factory->pending_requests().empty());
3358 3317
3359 // At this point the ProxyService should be waiting for the 3318 // At this point the ProxyService should be waiting for the
(...skipping 22 matching lines...) Expand all
3382 // Our PAC poller is set to update ONLY in response to network activity, 3341 // Our PAC poller is set to update ONLY in response to network activity,
3383 // (i.e. another call to ResolveProxy()). 3342 // (i.e. another call to ResolveProxy()).
3384 3343
3385 ASSERT_FALSE(fetcher->has_pending_request()); 3344 ASSERT_FALSE(fetcher->has_pending_request());
3386 ASSERT_TRUE(factory->pending_requests().empty()); 3345 ASSERT_TRUE(factory->pending_requests().empty());
3387 ASSERT_TRUE(resolver.pending_requests().empty()); 3346 ASSERT_TRUE(resolver.pending_requests().empty());
3388 3347
3389 // Start a second request. 3348 // Start a second request.
3390 ProxyInfo info2; 3349 ProxyInfo info2;
3391 TestCompletionCallback callback2; 3350 TestCompletionCallback callback2;
3392 rv = service.ResolveProxy(GURL("http://request2"), std::string(), LOAD_NORMAL, 3351 rv = service.ResolveProxy(GURL("http://request2"), std::string(), &info2,
3393 &info2, callback2.callback(), nullptr, nullptr, 3352 callback2.callback(), nullptr, nullptr,
3394 BoundNetLog()); 3353 BoundNetLog());
3395 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 3354 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3396 3355
3397 // This request should have sent work to the resolver; complete it. 3356 // This request should have sent work to the resolver; complete it.
3398 ASSERT_EQ(1u, resolver.pending_requests().size()); 3357 ASSERT_EQ(1u, resolver.pending_requests().size());
3399 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 3358 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url());
3400 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 3359 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80");
3401 resolver.pending_requests()[0]->CompleteNow(OK); 3360 resolver.pending_requests()[0]->CompleteNow(OK);
3402 3361
3403 EXPECT_THAT(callback2.WaitForResult(), IsOk()); 3362 EXPECT_THAT(callback2.WaitForResult(), IsOk());
3404 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 3363 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
3405 3364
3406 // In response to getting that resolve request, the poller should have 3365 // In response to getting that resolve request, the poller should have
3407 // started the next poll, and made it as far as to request the download. 3366 // started the next poll, and made it as far as to request the download.
3408 3367
3409 EXPECT_TRUE(fetcher->has_pending_request()); 3368 EXPECT_TRUE(fetcher->has_pending_request());
3410 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 3369 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
3411 3370
3412 // This time we will fail the download, to simulate a PAC script change. 3371 // This time we will fail the download, to simulate a PAC script change.
3413 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); 3372 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string());
3414 3373
3415 // Drain the message loop, so ProxyService is notified of the change 3374 // Drain the message loop, so ProxyService is notified of the change
3416 // and has a chance to re-configure itself. 3375 // and has a chance to re-configure itself.
3417 base::RunLoop().RunUntilIdle(); 3376 base::RunLoop().RunUntilIdle();
3418 3377
3419 // Start a third request -- this time we expect to get a direct connection 3378 // Start a third request -- this time we expect to get a direct connection
3420 // since the PAC script poller experienced a failure. 3379 // since the PAC script poller experienced a failure.
3421 ProxyInfo info3; 3380 ProxyInfo info3;
3422 TestCompletionCallback callback3; 3381 TestCompletionCallback callback3;
3423 rv = service.ResolveProxy(GURL("http://request3"), std::string(), LOAD_NORMAL, 3382 rv = service.ResolveProxy(GURL("http://request3"), std::string(), &info3,
3424 &info3, callback3.callback(), nullptr, nullptr, 3383 callback3.callback(), nullptr, nullptr,
3425 BoundNetLog()); 3384 BoundNetLog());
3426 EXPECT_THAT(rv, IsOk()); 3385 EXPECT_THAT(rv, IsOk());
3427 EXPECT_TRUE(info3.is_direct()); 3386 EXPECT_TRUE(info3.is_direct());
3428 } 3387 }
3429 3388
3430 // Test that the synchronous resolution fails when a PAC script is active. 3389 // Test that the synchronous resolution fails when a PAC script is active.
3431 TEST_F(ProxyServiceTest, SynchronousWithPAC) { 3390 TEST_F(ProxyServiceTest, SynchronousWithPAC) {
3432 MockProxyConfigService* config_service = 3391 MockProxyConfigService* config_service =
3433 new MockProxyConfigService("http://foopy/proxy.pac"); 3392 new MockProxyConfigService("http://foopy/proxy.pac");
3434 3393
3435 MockAsyncProxyResolverFactory* factory = 3394 MockAsyncProxyResolverFactory* factory =
3436 new MockAsyncProxyResolverFactory(false); 3395 new MockAsyncProxyResolverFactory(false);
3437 3396
3438 ProxyService service(base::WrapUnique(config_service), 3397 ProxyService service(base::WrapUnique(config_service),
3439 base::WrapUnique(factory), nullptr); 3398 base::WrapUnique(factory), nullptr);
3440 3399
3441 GURL url("http://www.google.com/"); 3400 GURL url("http://www.google.com/");
3442 3401
3443 ProxyInfo info; 3402 ProxyInfo info;
3444 info.UseDirect(); 3403 info.UseDirect();
3445 BoundTestNetLog log; 3404 BoundTestNetLog log;
3446 3405
3447 bool synchronous_success = service.TryResolveProxySynchronously( 3406 bool synchronous_success = service.TryResolveProxySynchronously(
3448 url, std::string(), LOAD_NORMAL, &info, nullptr, log.bound()); 3407 url, std::string(), &info, nullptr, log.bound());
3449 EXPECT_FALSE(synchronous_success); 3408 EXPECT_FALSE(synchronous_success);
3450 3409
3451 // |info| should not have been modified. 3410 // |info| should not have been modified.
3452 EXPECT_TRUE(info.is_direct()); 3411 EXPECT_TRUE(info.is_direct());
3453 } 3412 }
3454 3413
3455 // Test that synchronous results are returned correctly if a fixed proxy 3414 // Test that synchronous results are returned correctly if a fixed proxy
3456 // configuration is active. 3415 // configuration is active.
3457 TEST_F(ProxyServiceTest, SynchronousWithFixedConfiguration) { 3416 TEST_F(ProxyServiceTest, SynchronousWithFixedConfiguration) {
3458 ProxyConfig config; 3417 ProxyConfig config;
3459 config.proxy_rules().ParseFromString("foopy1:8080"); 3418 config.proxy_rules().ParseFromString("foopy1:8080");
3460 config.set_auto_detect(false); 3419 config.set_auto_detect(false);
3461 3420
3462 MockAsyncProxyResolverFactory* factory = 3421 MockAsyncProxyResolverFactory* factory =
3463 new MockAsyncProxyResolverFactory(false); 3422 new MockAsyncProxyResolverFactory(false);
3464 3423
3465 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)), 3424 ProxyService service(base::WrapUnique(new MockProxyConfigService(config)),
3466 base::WrapUnique(factory), nullptr); 3425 base::WrapUnique(factory), nullptr);
3467 3426
3468 GURL url("http://www.google.com/"); 3427 GURL url("http://www.google.com/");
3469 3428
3470 ProxyInfo info; 3429 ProxyInfo info;
3471 BoundTestNetLog log; 3430 BoundTestNetLog log;
3472 3431
3473 bool synchronous_success = service.TryResolveProxySynchronously( 3432 bool synchronous_success = service.TryResolveProxySynchronously(
3474 url, std::string(), LOAD_NORMAL, &info, nullptr, log.bound()); 3433 url, std::string(), &info, nullptr, log.bound());
3475 EXPECT_TRUE(synchronous_success); 3434 EXPECT_TRUE(synchronous_success);
3476 EXPECT_FALSE(info.is_direct()); 3435 EXPECT_FALSE(info.is_direct());
3477 EXPECT_EQ("foopy1", info.proxy_server().host_port_pair().host()); 3436 EXPECT_EQ("foopy1", info.proxy_server().host_port_pair().host());
3478 3437
3479 // No request should have been queued. 3438 // No request should have been queued.
3480 EXPECT_EQ(0u, factory->pending_requests().size()); 3439 EXPECT_EQ(0u, factory->pending_requests().size());
3481 } 3440 }
3482 3441
3483 // Helper class to exercise URL sanitization using the different policies. This 3442 // Helper class to exercise URL sanitization using the different policies. This
3484 // works by submitted URLs to the ProxyService. In turn the ProxyService 3443 // works by submitted URLs to the ProxyService. In turn the ProxyService
3485 // sanitizes the URL and then passes it along to the ProxyResolver. This helper 3444 // sanitizes the URL and then passes it along to the ProxyResolver. This helper
3486 // returns the URL seen by the ProxyResolver. 3445 // returns the URL seen by the ProxyResolver.
3487 class SanitizeUrlHelper { 3446 class SanitizeUrlHelper {
3488 public: 3447 public:
3489 SanitizeUrlHelper() { 3448 SanitizeUrlHelper() {
3490 std::unique_ptr<MockProxyConfigService> config_service( 3449 std::unique_ptr<MockProxyConfigService> config_service(
3491 new MockProxyConfigService("http://foopy/proxy.pac")); 3450 new MockProxyConfigService("http://foopy/proxy.pac"));
3492 3451
3493 factory = new MockAsyncProxyResolverFactory(false); 3452 factory = new MockAsyncProxyResolverFactory(false);
3494 3453
3495 service_.reset(new ProxyService(std::move(config_service), 3454 service_.reset(new ProxyService(std::move(config_service),
3496 base::WrapUnique(factory), nullptr)); 3455 base::WrapUnique(factory), nullptr));
3497 3456
3498 // Do an initial request to initialize the service (configure the PAC 3457 // Do an initial request to initialize the service (configure the PAC
3499 // script). 3458 // script).
3500 GURL url("http://example.com"); 3459 GURL url("http://example.com");
3501 3460
3502 ProxyInfo info; 3461 ProxyInfo info;
3503 TestCompletionCallback callback; 3462 TestCompletionCallback callback;
3504 int rv = service_->ResolveProxy(url, std::string(), LOAD_NORMAL, &info, 3463 int rv =
3505 callback.callback(), nullptr, nullptr, 3464 service_->ResolveProxy(url, std::string(), &info, callback.callback(),
3506 BoundNetLog()); 3465 nullptr, nullptr, BoundNetLog());
3507 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 3466 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3508 3467
3509 // First step is to download the PAC script. 3468 // First step is to download the PAC script.
3510 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 3469 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
3511 factory->pending_requests()[0]->script_data()->url()); 3470 factory->pending_requests()[0]->script_data()->url());
3512 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 3471 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
3513 3472
3514 EXPECT_EQ(1u, resolver.pending_requests().size()); 3473 EXPECT_EQ(1u, resolver.pending_requests().size());
3515 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 3474 EXPECT_EQ(url, resolver.pending_requests()[0]->url());
3516 3475
3517 // Complete the request. 3476 // Complete the request.
3518 resolver.pending_requests()[0]->results()->UsePacString("DIRECT"); 3477 resolver.pending_requests()[0]->results()->UsePacString("DIRECT");
3519 resolver.pending_requests()[0]->CompleteNow(OK); 3478 resolver.pending_requests()[0]->CompleteNow(OK);
3520 EXPECT_THAT(callback.WaitForResult(), IsOk()); 3479 EXPECT_THAT(callback.WaitForResult(), IsOk());
3521 EXPECT_TRUE(info.is_direct()); 3480 EXPECT_TRUE(info.is_direct());
3522 } 3481 }
3523 3482
3524 // Changes the URL sanitization policy for the underlying ProxyService. This 3483 // Changes the URL sanitization policy for the underlying ProxyService. This
3525 // will affect subsequent calls to SanitizeUrl. 3484 // will affect subsequent calls to SanitizeUrl.
3526 void SetSanitizeUrlPolicy(ProxyService::SanitizeUrlPolicy policy) { 3485 void SetSanitizeUrlPolicy(ProxyService::SanitizeUrlPolicy policy) {
3527 service_->set_sanitize_url_policy(policy); 3486 service_->set_sanitize_url_policy(policy);
3528 } 3487 }
3529 3488
3530 // Makes a proxy resolution request through the ProxyService, and returns the 3489 // Makes a proxy resolution request through the ProxyService, and returns the
3531 // URL that was submitted to the Proxy Resolver. 3490 // URL that was submitted to the Proxy Resolver.
3532 GURL SanitizeUrl(const GURL& raw_url) { 3491 GURL SanitizeUrl(const GURL& raw_url) {
3533 // Issue a request and see what URL is sent to the proxy resolver. 3492 // Issue a request and see what URL is sent to the proxy resolver.
3534 ProxyInfo info; 3493 ProxyInfo info;
3535 TestCompletionCallback callback; 3494 TestCompletionCallback callback;
3536 int rv = service_->ResolveProxy(raw_url, std::string(), LOAD_NORMAL, &info, 3495 int rv = service_->ResolveProxy(raw_url, std::string(), &info,
3537 callback.callback(), nullptr, nullptr, 3496 callback.callback(), nullptr, nullptr,
3538 BoundNetLog()); 3497 BoundNetLog());
3539 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 3498 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
3540 3499
3541 EXPECT_EQ(1u, resolver.pending_requests().size()); 3500 EXPECT_EQ(1u, resolver.pending_requests().size());
3542 3501
3543 GURL sanitized_url = resolver.pending_requests()[0]->url(); 3502 GURL sanitized_url = resolver.pending_requests()[0]->url();
3544 3503
3545 // Complete the request. 3504 // Complete the request.
3546 resolver.pending_requests()[0]->results()->UsePacString("DIRECT"); 3505 resolver.pending_requests()[0]->results()->UsePacString("DIRECT");
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
3694 GURL(test.sanitized_url_unstripped), 3653 GURL(test.sanitized_url_unstripped),
3695 helper.SanitizeUrl(raw_url, ProxyService::SanitizeUrlPolicy::UNSAFE)); 3654 helper.SanitizeUrl(raw_url, ProxyService::SanitizeUrlPolicy::UNSAFE));
3696 3655
3697 EXPECT_EQ( 3656 EXPECT_EQ(
3698 GURL(test.sanitized_url), 3657 GURL(test.sanitized_url),
3699 helper.SanitizeUrl(raw_url, ProxyService::SanitizeUrlPolicy::SAFE)); 3658 helper.SanitizeUrl(raw_url, ProxyService::SanitizeUrlPolicy::SAFE));
3700 } 3659 }
3701 } 3660 }
3702 3661
3703 } // namespace net 3662 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_service_mojo_unittest.cc ('k') | net/url_request/url_request_ftp_job.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698