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

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

Powered by Google App Engine
This is Rietveld 408576698