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

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

Powered by Google App Engine
This is Rietveld 408576698