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

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

Powered by Google App Engine
This is Rietveld 408576698