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