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