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

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

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

Powered by Google App Engine
This is Rietveld 408576698