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