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

Side by Side Diff: net/proxy/proxy_service_unittest.cc

Issue 1439053002: Change ProxyResolver::GetProxyForURL() to take a scoped_ptr<Request>* rather than a RequestHandle* (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/proxy/proxy_service.h" 5 #include "net/proxy/proxy_service.h"
6 6
7 #include <cstdarg> 7 #include <cstdarg>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/format_macros.h" 10 #include "base/format_macros.h"
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 int proxy_fallback_net_error() const { 233 int proxy_fallback_net_error() const {
234 return proxy_fallback_net_error_; 234 return proxy_fallback_net_error_;
235 } 235 }
236 236
237 private: 237 private:
238 bool on_proxy_fallback_called_; 238 bool on_proxy_fallback_called_;
239 ProxyServer proxy_server_; 239 ProxyServer proxy_server_;
240 int proxy_fallback_net_error_; 240 int proxy_fallback_net_error_;
241 }; 241 };
242 242
243 using RequestMap = 243 using JobMap = std::map<GURL, scoped_refptr<MockAsyncProxyResolver::Job>>;
244 std::map<GURL, scoped_refptr<MockAsyncProxyResolver::Request>>;
245 244
246 // Given a list of requests |list| from a MockAsyncProxyResolver and a list of 245 // Given a list of jobs |list| from a MockAsyncProxyResolver and a list of
247 // target URLs |_urls|, asserts that the set of URLs of the requests appearing 246 // target URLs |_urls|, asserts that the set of URLs of the jobs appearing
248 // in |list| is exactly the set of URLs in |_urls|, and produces a RequestMap in 247 // in |list| is exactly the set of URLs in |_urls|, and produces a JobMap in
249 // |*map| containing the requests corresponding to those target |_urls|. 248 // |*map| containing the jobs corresponding to those target |_urls|.
250 // 249 //
251 // Note that this function must return void to allow use of gtest's ASSERT_* 250 // Note that this function must return void to allow use of gtest's ASSERT_*
252 // macros inside it. 251 // macros inside it.
253 RequestMap GetRequestsForURLs( 252 JobMap GetJobsForURLs(const MockAsyncProxyResolver::JobsList& jobs,
254 const MockAsyncProxyResolver::RequestsList& requests, 253 const std::vector<GURL>& urls) {
255 const std::vector<GURL>& urls) { 254 JobMap map;
256 RequestMap map;
257 255
258 for (const auto& it : requests) 256 for (const auto& it : jobs)
259 map[it->url()] = it; 257 map[it->url()] = it;
260 258
261 if (urls.size() != map.size()) { 259 if (urls.size() != map.size()) {
262 ADD_FAILURE() << "map size (" << map.size() << ") != urls size (" 260 ADD_FAILURE() << "map size (" << map.size() << ") != urls size ("
263 << urls.size() << ")"; 261 << urls.size() << ")";
264 return map; 262 return map;
265 } 263 }
266 for (const auto& it : urls) { 264 for (const auto& it : urls) {
267 if (map.count(it) != 1U) { 265 if (map.count(it) != 1U) {
268 ADD_FAILURE() << "url not in map: " << it.spec(); 266 ADD_FAILURE() << "url not in map: " << it.spec();
269 break; 267 break;
270 } 268 }
271 } 269 }
272 return map; 270 return map;
273 } 271 }
274 272
275 // Given a MockAsyncProxyResolver |resolver| and some GURLs, validates that the 273 // Given a MockAsyncProxyResolver |resolver| and some GURLs, validates that the
276 // set of pending request URLs for |resolver| is exactly the supplied list of 274 // set of pending request URLs for |resolver| is exactly the supplied list of
277 // URLs and returns a map from URLs to the corresponding pending requests. 275 // URLs and returns a map from URLs to the corresponding pending jobs.
278 RequestMap GetPendingRequestsForURLs(const MockAsyncProxyResolver& resolver, 276 JobMap GetPendingJobsForURLs(const MockAsyncProxyResolver& resolver,
279 const GURL& url1 = GURL(), 277 const GURL& url1 = GURL(),
280 const GURL& url2 = GURL(), 278 const GURL& url2 = GURL(),
281 const GURL& url3 = GURL()) { 279 const GURL& url3 = GURL()) {
282 std::vector<GURL> urls; 280 std::vector<GURL> urls;
283 if (!url1.is_empty()) 281 if (!url1.is_empty())
284 urls.push_back(url1); 282 urls.push_back(url1);
285 if (!url2.is_empty()) 283 if (!url2.is_empty())
286 urls.push_back(url2); 284 urls.push_back(url2);
287 if (!url3.is_empty()) 285 if (!url3.is_empty())
288 urls.push_back(url3); 286 urls.push_back(url3);
289 return GetRequestsForURLs(resolver.pending_requests(), urls); 287 return GetJobsForURLs(resolver.pending_jobs(), urls);
290 } 288 }
291 289
292 // Given a MockAsyncProxyResolver |resolver| and some GURLs, validates that the 290 // Given a MockAsyncProxyResolver |resolver| and some GURLs, validates that the
293 // set of cancelled request URLs for |resolver| is exactly the supplied list of 291 // set of cancelled request URLs for |resolver| is exactly the supplied list of
294 // URLs and returns a map from URLs to the corresponding cancelled requests. 292 // URLs and returns a map from URLs to the corresponding cancelled jobs.
295 RequestMap GetCancelledRequestsForURLs(const MockAsyncProxyResolver& resolver, 293 JobMap GetCancelledJobsForURLs(const MockAsyncProxyResolver& resolver,
296 const GURL& url1 = GURL(), 294 const GURL& url1 = GURL(),
297 const GURL& url2 = GURL(), 295 const GURL& url2 = GURL(),
298 const GURL& url3 = GURL()) { 296 const GURL& url3 = GURL()) {
299 std::vector<GURL> urls; 297 std::vector<GURL> urls;
300 if (!url1.is_empty()) 298 if (!url1.is_empty())
301 urls.push_back(url1); 299 urls.push_back(url1);
302 if (!url2.is_empty()) 300 if (!url2.is_empty())
303 urls.push_back(url2); 301 urls.push_back(url2);
304 if (!url3.is_empty()) 302 if (!url3.is_empty())
305 urls.push_back(url3); 303 urls.push_back(url3);
306 return GetRequestsForURLs(resolver.cancelled_requests(), urls); 304 return GetJobsForURLs(resolver.cancelled_jobs(), urls);
307 } 305 }
308 306
309 } // namespace 307 } // namespace
310 308
311 TEST_F(ProxyServiceTest, Direct) { 309 TEST_F(ProxyServiceTest, Direct) {
312 MockAsyncProxyResolverFactory* factory = 310 MockAsyncProxyResolverFactory* factory =
313 new MockAsyncProxyResolverFactory(false); 311 new MockAsyncProxyResolverFactory(false);
314 ProxyService service( 312 ProxyService service(
315 make_scoped_ptr(new MockProxyConfigService(ProxyConfig::CreateDirect())), 313 make_scoped_ptr(new MockProxyConfigService(ProxyConfig::CreateDirect())),
316 make_scoped_ptr(factory), NULL); 314 make_scoped_ptr(factory), NULL);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 364
367 // Verify that network delegate is invoked. 365 // Verify that network delegate is invoked.
368 TestResolveProxyNetworkDelegate delegate; 366 TestResolveProxyNetworkDelegate delegate;
369 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL, 367 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL,
370 &delegate, log.bound()); 368 &delegate, log.bound());
371 EXPECT_TRUE(delegate.on_resolve_proxy_called()); 369 EXPECT_TRUE(delegate.on_resolve_proxy_called());
372 EXPECT_EQ(&service, delegate.proxy_service()); 370 EXPECT_EQ(&service, delegate.proxy_service());
373 371
374 // Verify that the NetworkDelegate's behavior is stateless across 372 // Verify that the NetworkDelegate's behavior is stateless across
375 // invocations of ResolveProxy. Start by having the callback add a proxy 373 // invocations of ResolveProxy. Start by having the callback add a proxy
376 // and checking that subsequent requests are not affected. 374 // and checking that subsequent jobs are not affected.
377 delegate.set_add_proxy(true); 375 delegate.set_add_proxy(true);
378 376
379 // Callback should interpose: 377 // Callback should interpose:
380 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL, 378 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), NULL,
381 &delegate, log.bound()); 379 &delegate, log.bound());
382 EXPECT_FALSE(info.is_direct()); 380 EXPECT_FALSE(info.is_direct());
383 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "delegate_proxy.com"); 381 EXPECT_EQ(info.proxy_server().host_port_pair().host(), "delegate_proxy.com");
384 delegate.set_add_proxy(false); 382 delegate.set_add_proxy(false);
385 383
386 // Check non-bypassed URL: 384 // Check non-bypassed URL:
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 &request, NULL, log.bound()); 460 &request, NULL, log.bound());
463 EXPECT_EQ(ERR_IO_PENDING, rv); 461 EXPECT_EQ(ERR_IO_PENDING, rv);
464 462
465 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request)); 463 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request));
466 464
467 ASSERT_EQ(1u, factory->pending_requests().size()); 465 ASSERT_EQ(1u, factory->pending_requests().size());
468 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 466 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
469 factory->pending_requests()[0]->script_data()->url()); 467 factory->pending_requests()[0]->script_data()->url());
470 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 468 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
471 469
472 ASSERT_EQ(1u, resolver.pending_requests().size()); 470 ASSERT_EQ(1u, resolver.pending_jobs().size());
473 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 471 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
474 472
475 // Set the result in proxy resolver. 473 // Set the result in proxy resolver.
476 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy"); 474 resolver.pending_jobs()[0]->results()->UseNamedProxy("foopy");
477 resolver.pending_requests()[0]->CompleteNow(OK); 475 resolver.pending_jobs()[0]->CompleteNow(OK);
478 476
479 EXPECT_EQ(OK, callback.WaitForResult()); 477 EXPECT_EQ(OK, callback.WaitForResult());
480 EXPECT_FALSE(info.is_direct()); 478 EXPECT_FALSE(info.is_direct());
481 EXPECT_EQ("foopy:80", info.proxy_server().ToURI()); 479 EXPECT_EQ("foopy:80", info.proxy_server().ToURI());
482 EXPECT_TRUE(info.did_use_pac_script()); 480 EXPECT_TRUE(info.did_use_pac_script());
483 481
484 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 482 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
485 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 483 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
486 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 484 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
487 485
(...skipping 30 matching lines...) Expand all
518 ProxyInfo info; 516 ProxyInfo info;
519 TestCompletionCallback callback; 517 TestCompletionCallback callback;
520 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), 518 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(),
521 NULL, NULL, BoundNetLog()); 519 NULL, NULL, BoundNetLog());
522 EXPECT_EQ(ERR_IO_PENDING, rv); 520 EXPECT_EQ(ERR_IO_PENDING, rv);
523 521
524 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 522 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
525 factory->pending_requests()[0]->script_data()->url()); 523 factory->pending_requests()[0]->script_data()->url());
526 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 524 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
527 525
528 ASSERT_EQ(1u, resolver.pending_requests().size()); 526 ASSERT_EQ(1u, resolver.pending_jobs().size());
529 // The URL should have been simplified, stripping the username/password/hash. 527 // The URL should have been simplified, stripping the username/password/hash.
530 EXPECT_EQ(GURL("http://www.google.com/?ref"), 528 EXPECT_EQ(GURL("http://www.google.com/?ref"),
531 resolver.pending_requests()[0]->url()); 529 resolver.pending_jobs()[0]->url());
532 530
533 // We end here without ever completing the request -- destruction of 531 // We end here without ever completing the request -- destruction of
534 // ProxyService will cancel the outstanding request. 532 // ProxyService will cancel the outstanding request.
535 } 533 }
536 534
537 TEST_F(ProxyServiceTest, PAC_FailoverWithoutDirect) { 535 TEST_F(ProxyServiceTest, PAC_FailoverWithoutDirect) {
538 MockProxyConfigService* config_service = 536 MockProxyConfigService* config_service =
539 new MockProxyConfigService("http://foopy/proxy.pac"); 537 new MockProxyConfigService("http://foopy/proxy.pac");
540 MockAsyncProxyResolver resolver; 538 MockAsyncProxyResolver resolver;
541 MockAsyncProxyResolverFactory* factory = 539 MockAsyncProxyResolverFactory* factory =
542 new MockAsyncProxyResolverFactory(false); 540 new MockAsyncProxyResolverFactory(false);
543 541
544 ProxyService service(make_scoped_ptr(config_service), 542 ProxyService service(make_scoped_ptr(config_service),
545 make_scoped_ptr(factory), NULL); 543 make_scoped_ptr(factory), NULL);
546 544
547 GURL url("http://www.google.com/"); 545 GURL url("http://www.google.com/");
548 546
549 ProxyInfo info; 547 ProxyInfo info;
550 TestCompletionCallback callback1; 548 TestCompletionCallback callback1;
551 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), 549 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(),
552 NULL, NULL, BoundNetLog()); 550 NULL, NULL, BoundNetLog());
553 EXPECT_EQ(ERR_IO_PENDING, rv); 551 EXPECT_EQ(ERR_IO_PENDING, rv);
554 552
555 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 553 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
556 factory->pending_requests()[0]->script_data()->url()); 554 factory->pending_requests()[0]->script_data()->url());
557 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 555 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
558 556
559 ASSERT_EQ(1u, resolver.pending_requests().size()); 557 ASSERT_EQ(1u, resolver.pending_jobs().size());
560 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 558 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
561 559
562 // Set the result in proxy resolver. 560 // Set the result in proxy resolver.
563 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy:8080"); 561 resolver.pending_jobs()[0]->results()->UseNamedProxy("foopy:8080");
564 resolver.pending_requests()[0]->CompleteNow(OK); 562 resolver.pending_jobs()[0]->CompleteNow(OK);
565 563
566 EXPECT_EQ(OK, callback1.WaitForResult()); 564 EXPECT_EQ(OK, callback1.WaitForResult());
567 EXPECT_FALSE(info.is_direct()); 565 EXPECT_FALSE(info.is_direct());
568 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI()); 566 EXPECT_EQ("foopy:8080", info.proxy_server().ToURI());
569 EXPECT_TRUE(info.did_use_pac_script()); 567 EXPECT_TRUE(info.did_use_pac_script());
570 568
571 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 569 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
572 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 570 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
573 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 571 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
574 572
(...skipping 28 matching lines...) Expand all
603 ProxyInfo info; 601 ProxyInfo info;
604 TestCompletionCallback callback1; 602 TestCompletionCallback callback1;
605 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), 603 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(),
606 NULL, NULL, BoundNetLog()); 604 NULL, NULL, BoundNetLog());
607 EXPECT_EQ(ERR_IO_PENDING, rv); 605 EXPECT_EQ(ERR_IO_PENDING, rv);
608 606
609 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 607 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
610 factory->pending_requests()[0]->script_data()->url()); 608 factory->pending_requests()[0]->script_data()->url());
611 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 609 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
612 610
613 ASSERT_EQ(1u, resolver.pending_requests().size()); 611 ASSERT_EQ(1u, resolver.pending_jobs().size());
614 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 612 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
615 613
616 // Simulate a failure in the PAC executor. 614 // Simulate a failure in the PAC executor.
617 resolver.pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_FAILED); 615 resolver.pending_jobs()[0]->CompleteNow(ERR_PAC_SCRIPT_FAILED);
618 616
619 EXPECT_EQ(OK, callback1.WaitForResult()); 617 EXPECT_EQ(OK, callback1.WaitForResult());
620 618
621 // Since the PAC script was non-mandatory, we should have fallen-back to 619 // Since the PAC script was non-mandatory, we should have fallen-back to
622 // DIRECT. 620 // DIRECT.
623 EXPECT_TRUE(info.is_direct()); 621 EXPECT_TRUE(info.is_direct());
624 EXPECT_TRUE(info.did_use_pac_script()); 622 EXPECT_TRUE(info.did_use_pac_script());
625 EXPECT_EQ(1, info.config_id()); 623 EXPECT_EQ(1, info.config_id());
626 624
627 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 625 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 ProxyInfo info; 659 ProxyInfo info;
662 TestCompletionCallback callback1; 660 TestCompletionCallback callback1;
663 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), 661 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(),
664 NULL, NULL, BoundNetLog()); 662 NULL, NULL, BoundNetLog());
665 EXPECT_EQ(ERR_IO_PENDING, rv); 663 EXPECT_EQ(ERR_IO_PENDING, rv);
666 664
667 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 665 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
668 factory->pending_requests()[0]->script_data()->url()); 666 factory->pending_requests()[0]->script_data()->url());
669 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 667 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
670 668
671 ASSERT_EQ(1u, resolver.pending_requests().size()); 669 ASSERT_EQ(1u, resolver.pending_jobs().size());
672 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 670 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
673 671
674 // Set the result in proxy resolver. 672 // Set the result in proxy resolver.
675 resolver.pending_requests()[0]->results()->UsePacString( 673 resolver.pending_jobs()[0]->results()->UsePacString(
676 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20"); 674 "DIRECT ; PROXY foobar:10 ; DIRECT ; PROXY foobar:20");
677 resolver.pending_requests()[0]->CompleteNow(OK); 675 resolver.pending_jobs()[0]->CompleteNow(OK);
678 676
679 EXPECT_EQ(OK, callback1.WaitForResult()); 677 EXPECT_EQ(OK, callback1.WaitForResult());
680 EXPECT_TRUE(info.is_direct()); 678 EXPECT_TRUE(info.is_direct());
681 679
682 // Fallback 1. 680 // Fallback 1.
683 TestCompletionCallback callback2; 681 TestCompletionCallback callback2;
684 rv = service.ReconsiderProxyAfterError( 682 rv = service.ReconsiderProxyAfterError(
685 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 683 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
686 callback2.callback(), NULL, NULL, BoundNetLog()); 684 callback2.callback(), NULL, NULL, BoundNetLog());
687 EXPECT_EQ(OK, rv); 685 EXPECT_EQ(OK, rv);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 make_scoped_ptr(factory), NULL); 731 make_scoped_ptr(factory), NULL);
734 732
735 // Resolve something. 733 // Resolve something.
736 GURL url("http://www.google.com/"); 734 GURL url("http://www.google.com/");
737 ProxyInfo info; 735 ProxyInfo info;
738 TestCompletionCallback callback; 736 TestCompletionCallback callback;
739 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(), 737 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback.callback(),
740 NULL, NULL, BoundNetLog()); 738 NULL, NULL, BoundNetLog());
741 ASSERT_EQ(ERR_IO_PENDING, rv); 739 ASSERT_EQ(ERR_IO_PENDING, rv);
742 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 740 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
743 ASSERT_EQ(1u, resolver.pending_requests().size()); 741 ASSERT_EQ(1u, resolver.pending_jobs().size());
744 742
745 // Set the result in proxy resolver. 743 // Set the result in proxy resolver.
746 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy"); 744 resolver.pending_jobs()[0]->results()->UseNamedProxy("foopy");
747 resolver.pending_requests()[0]->CompleteNow(OK); 745 resolver.pending_jobs()[0]->CompleteNow(OK);
748 746
749 EXPECT_EQ(OK, callback.WaitForResult()); 747 EXPECT_EQ(OK, callback.WaitForResult());
750 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source()); 748 EXPECT_EQ(PROXY_CONFIG_SOURCE_TEST, info.config_source());
751 EXPECT_TRUE(info.did_use_pac_script()); 749 EXPECT_TRUE(info.did_use_pac_script());
752 750
753 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 751 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
754 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 752 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
755 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 753 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
756 } 754 }
757 755
(...skipping 17 matching lines...) Expand all
775 ProxyInfo info; 773 ProxyInfo info;
776 TestCompletionCallback callback1; 774 TestCompletionCallback callback1;
777 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), 775 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(),
778 NULL, NULL, BoundNetLog()); 776 NULL, NULL, BoundNetLog());
779 EXPECT_EQ(ERR_IO_PENDING, rv); 777 EXPECT_EQ(ERR_IO_PENDING, rv);
780 778
781 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 779 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
782 factory->pending_requests()[0]->script_data()->url()); 780 factory->pending_requests()[0]->script_data()->url());
783 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 781 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
784 782
785 ASSERT_EQ(1u, resolver.pending_requests().size()); 783 ASSERT_EQ(1u, resolver.pending_jobs().size());
786 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 784 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
787 785
788 // Fail the first resolve request in MockAsyncProxyResolver. 786 // Fail the first resolve request in MockAsyncProxyResolver.
789 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); 787 resolver.pending_jobs()[0]->CompleteNow(ERR_FAILED);
790 788
791 // Although the proxy resolver failed the request, ProxyService implicitly 789 // Although the proxy resolver failed the request, ProxyService implicitly
792 // falls-back to DIRECT. 790 // falls-back to DIRECT.
793 EXPECT_EQ(OK, callback1.WaitForResult()); 791 EXPECT_EQ(OK, callback1.WaitForResult());
794 EXPECT_TRUE(info.is_direct()); 792 EXPECT_TRUE(info.is_direct());
795 793
796 // Failed PAC executions still have proxy resolution times. 794 // Failed PAC executions still have proxy resolution times.
797 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 795 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
798 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 796 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
799 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 797 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
800 798
801 // The second resolve request will try to run through the proxy resolver, 799 // The second resolve request will try to run through the proxy resolver,
802 // regardless of whether the first request failed in it. 800 // regardless of whether the first request failed in it.
803 TestCompletionCallback callback2; 801 TestCompletionCallback callback2;
804 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback2.callback(), NULL, 802 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback2.callback(), NULL,
805 NULL, BoundNetLog()); 803 NULL, BoundNetLog());
806 EXPECT_EQ(ERR_IO_PENDING, rv); 804 EXPECT_EQ(ERR_IO_PENDING, rv);
807 805
808 ASSERT_EQ(1u, resolver.pending_requests().size()); 806 ASSERT_EQ(1u, resolver.pending_jobs().size());
809 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 807 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
810 808
811 // This time we will have the resolver succeed (perhaps the PAC script has 809 // This time we will have the resolver succeed (perhaps the PAC script has
812 // a dependency on the current time). 810 // a dependency on the current time).
813 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); 811 resolver.pending_jobs()[0]->results()->UseNamedProxy("foopy_valid:8080");
814 resolver.pending_requests()[0]->CompleteNow(OK); 812 resolver.pending_jobs()[0]->CompleteNow(OK);
815 813
816 EXPECT_EQ(OK, callback2.WaitForResult()); 814 EXPECT_EQ(OK, callback2.WaitForResult());
817 EXPECT_FALSE(info.is_direct()); 815 EXPECT_FALSE(info.is_direct());
818 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); 816 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI());
819 } 817 }
820 818
821 TEST_F(ProxyServiceTest, ProxyResolverTerminatedDuringRequest) { 819 TEST_F(ProxyServiceTest, ProxyResolverTerminatedDuringRequest) {
822 // Test what happens when the ProxyResolver fails with a fatal error while 820 // Test what happens when the ProxyResolver fails with a fatal error while
823 // a GetProxyForURL() call is in progress. 821 // a GetProxyForURL() call is in progress.
824 822
(...skipping 14 matching lines...) Expand all
839 int rv = 837 int rv =
840 service.ResolveProxy(url, net::LOAD_NORMAL, &info, callback1.callback(), 838 service.ResolveProxy(url, net::LOAD_NORMAL, &info, callback1.callback(),
841 nullptr, nullptr, BoundNetLog()); 839 nullptr, nullptr, BoundNetLog());
842 EXPECT_EQ(ERR_IO_PENDING, rv); 840 EXPECT_EQ(ERR_IO_PENDING, rv);
843 841
844 ASSERT_EQ(1u, factory->pending_requests().size()); 842 ASSERT_EQ(1u, factory->pending_requests().size());
845 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 843 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
846 factory->pending_requests()[0]->script_data()->url()); 844 factory->pending_requests()[0]->script_data()->url());
847 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 845 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
848 846
849 ASSERT_EQ(1u, resolver.pending_requests().size()); 847 ASSERT_EQ(1u, resolver.pending_jobs().size());
850 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 848 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
851 849
852 // Fail the first resolve request in MockAsyncProxyResolver. 850 // Fail the first resolve request in MockAsyncProxyResolver.
853 resolver.pending_requests()[0]->CompleteNow(ERR_PAC_SCRIPT_TERMINATED); 851 resolver.pending_jobs()[0]->CompleteNow(ERR_PAC_SCRIPT_TERMINATED);
854 852
855 // Although the proxy resolver failed the request, ProxyService implicitly 853 // Although the proxy resolver failed the request, ProxyService implicitly
856 // falls-back to DIRECT. 854 // falls-back to DIRECT.
857 EXPECT_EQ(OK, callback1.WaitForResult()); 855 EXPECT_EQ(OK, callback1.WaitForResult());
858 EXPECT_TRUE(info.is_direct()); 856 EXPECT_TRUE(info.is_direct());
859 857
860 // Failed PAC executions still have proxy resolution times. 858 // Failed PAC executions still have proxy resolution times.
861 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 859 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
862 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 860 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
863 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 861 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
864 862
865 // With no other requests, the ProxyService waits for a new request before 863 // With no other requests, the ProxyService waits for a new request before
866 // initializing a new ProxyResolver. 864 // initializing a new ProxyResolver.
867 EXPECT_TRUE(factory->pending_requests().empty()); 865 EXPECT_TRUE(factory->pending_requests().empty());
868 866
869 TestCompletionCallback callback2; 867 TestCompletionCallback callback2;
870 rv = service.ResolveProxy(url, net::LOAD_NORMAL, &info, callback2.callback(), 868 rv = service.ResolveProxy(url, net::LOAD_NORMAL, &info, callback2.callback(),
871 nullptr, nullptr, BoundNetLog()); 869 nullptr, nullptr, BoundNetLog());
872 EXPECT_EQ(ERR_IO_PENDING, rv); 870 EXPECT_EQ(ERR_IO_PENDING, rv);
873 871
874 ASSERT_EQ(1u, factory->pending_requests().size()); 872 ASSERT_EQ(1u, factory->pending_requests().size());
875 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 873 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
876 factory->pending_requests()[0]->script_data()->url()); 874 factory->pending_requests()[0]->script_data()->url());
877 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 875 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
878 876
879 ASSERT_EQ(1u, resolver.pending_requests().size()); 877 ASSERT_EQ(1u, resolver.pending_jobs().size());
880 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 878 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
881 879
882 // This time we will have the resolver succeed. 880 // This time we will have the resolver succeed.
883 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); 881 resolver.pending_jobs()[0]->results()->UseNamedProxy("foopy_valid:8080");
884 resolver.pending_requests()[0]->CompleteNow(OK); 882 resolver.pending_jobs()[0]->CompleteNow(OK);
885 883
886 EXPECT_EQ(OK, callback2.WaitForResult()); 884 EXPECT_EQ(OK, callback2.WaitForResult());
887 EXPECT_FALSE(info.is_direct()); 885 EXPECT_FALSE(info.is_direct());
888 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); 886 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI());
889 } 887 }
890 888
891 TEST_F(ProxyServiceTest, 889 TEST_F(ProxyServiceTest,
892 ProxyResolverTerminatedDuringRequestWithConcurrentRequest) { 890 ProxyResolverTerminatedDuringRequestWithConcurrentRequest) {
893 // Test what happens when the ProxyResolver fails with a fatal error while 891 // Test what happens when the ProxyResolver fails with a fatal error while
894 // a GetProxyForURL() call is in progress. 892 // a GetProxyForURL() call is in progress.
(...skipping 20 matching lines...) Expand all
915 TestCompletionCallback callback2; 913 TestCompletionCallback callback2;
916 rv = service.ResolveProxy(url2, net::LOAD_NORMAL, &info, callback2.callback(), 914 rv = service.ResolveProxy(url2, net::LOAD_NORMAL, &info, callback2.callback(),
917 nullptr, nullptr, BoundNetLog()); 915 nullptr, nullptr, BoundNetLog());
918 EXPECT_EQ(ERR_IO_PENDING, rv); 916 EXPECT_EQ(ERR_IO_PENDING, rv);
919 917
920 ASSERT_EQ(1u, factory->pending_requests().size()); 918 ASSERT_EQ(1u, factory->pending_requests().size());
921 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 919 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
922 factory->pending_requests()[0]->script_data()->url()); 920 factory->pending_requests()[0]->script_data()->url());
923 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 921 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
924 922
925 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2); 923 JobMap jobs = GetPendingJobsForURLs(resolver, url1, url2);
926 924
927 // Fail the first resolve request in MockAsyncProxyResolver. 925 // Fail the first resolve request in MockAsyncProxyResolver.
928 requests[url1]->CompleteNow(ERR_PAC_SCRIPT_TERMINATED); 926 jobs[url1]->CompleteNow(ERR_PAC_SCRIPT_TERMINATED);
929 927
930 // Although the proxy resolver failed the request, ProxyService implicitly 928 // Although the proxy resolver failed the request, ProxyService implicitly
931 // falls-back to DIRECT. 929 // falls-back to DIRECT.
932 EXPECT_EQ(OK, callback1.WaitForResult()); 930 EXPECT_EQ(OK, callback1.WaitForResult());
933 EXPECT_TRUE(info.is_direct()); 931 EXPECT_TRUE(info.is_direct());
934 932
935 // Failed PAC executions still have proxy resolution times. 933 // Failed PAC executions still have proxy resolution times.
936 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 934 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
937 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 935 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
938 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 936 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
939 937
940 // The second request is cancelled when the proxy resolver terminates. 938 // The second request is cancelled when the proxy resolver terminates.
941 requests = GetCancelledRequestsForURLs(resolver, url2); 939 jobs = GetCancelledJobsForURLs(resolver, url2);
942 940
943 // Since a second request was in progress, the ProxyService starts 941 // Since a second request was in progress, the ProxyService starts
944 // initializating a new ProxyResolver. 942 // initializating a new ProxyResolver.
945 ASSERT_EQ(1u, factory->pending_requests().size()); 943 ASSERT_EQ(1u, factory->pending_requests().size());
946 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 944 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
947 factory->pending_requests()[0]->script_data()->url()); 945 factory->pending_requests()[0]->script_data()->url());
948 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 946 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
949 947
950 requests = GetPendingRequestsForURLs(resolver, url2); 948 jobs = GetPendingJobsForURLs(resolver, url2);
951 949
952 // This request succeeds. 950 // This request succeeds.
953 requests[url2]->results()->UseNamedProxy("foopy_valid:8080"); 951 jobs[url2]->results()->UseNamedProxy("foopy_valid:8080");
954 requests[url2]->CompleteNow(OK); 952 jobs[url2]->CompleteNow(OK);
955 953
956 EXPECT_EQ(OK, callback2.WaitForResult()); 954 EXPECT_EQ(OK, callback2.WaitForResult());
957 EXPECT_FALSE(info.is_direct()); 955 EXPECT_FALSE(info.is_direct());
958 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); 956 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI());
959 } 957 }
960 958
961 TEST_F(ProxyServiceTest, ProxyScriptFetcherFailsDownloadingMandatoryPac) { 959 TEST_F(ProxyServiceTest, ProxyScriptFetcherFailsDownloadingMandatoryPac) {
962 // Test what happens when the ProxyScriptResolver fails to download a 960 // Test what happens when the ProxyScriptResolver fails to download a
963 // mandatory PAC script. 961 // mandatory PAC script.
964 962
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1074 ProxyInfo info; 1072 ProxyInfo info;
1075 TestCompletionCallback callback1; 1073 TestCompletionCallback callback1;
1076 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), 1074 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(),
1077 NULL, NULL, BoundNetLog()); 1075 NULL, NULL, BoundNetLog());
1078 EXPECT_EQ(ERR_IO_PENDING, rv); 1076 EXPECT_EQ(ERR_IO_PENDING, rv);
1079 1077
1080 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1078 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1081 factory->pending_requests()[0]->script_data()->url()); 1079 factory->pending_requests()[0]->script_data()->url());
1082 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1080 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1083 1081
1084 ASSERT_EQ(1u, resolver.pending_requests().size()); 1082 ASSERT_EQ(1u, resolver.pending_jobs().size());
1085 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1083 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1086 1084
1087 // Fail the first resolve request in MockAsyncProxyResolver. 1085 // Fail the first resolve request in MockAsyncProxyResolver.
1088 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); 1086 resolver.pending_jobs()[0]->CompleteNow(ERR_FAILED);
1089 1087
1090 // As the proxy resolver failed the request and is configured for a mandatory 1088 // As the proxy resolver failed the request and is configured for a mandatory
1091 // PAC script, ProxyService must not implicitly fall-back to DIRECT. 1089 // PAC script, ProxyService must not implicitly fall-back to DIRECT.
1092 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, 1090 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED,
1093 callback1.WaitForResult()); 1091 callback1.WaitForResult());
1094 EXPECT_FALSE(info.is_direct()); 1092 EXPECT_FALSE(info.is_direct());
1095 1093
1096 // The second resolve request will try to run through the proxy resolver, 1094 // The second resolve request will try to run through the proxy resolver,
1097 // regardless of whether the first request failed in it. 1095 // regardless of whether the first request failed in it.
1098 TestCompletionCallback callback2; 1096 TestCompletionCallback callback2;
1099 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback2.callback(), NULL, 1097 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback2.callback(), NULL,
1100 NULL, BoundNetLog()); 1098 NULL, BoundNetLog());
1101 EXPECT_EQ(ERR_IO_PENDING, rv); 1099 EXPECT_EQ(ERR_IO_PENDING, rv);
1102 1100
1103 ASSERT_EQ(1u, resolver.pending_requests().size()); 1101 ASSERT_EQ(1u, resolver.pending_jobs().size());
1104 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1102 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1105 1103
1106 // This time we will have the resolver succeed (perhaps the PAC script has 1104 // This time we will have the resolver succeed (perhaps the PAC script has
1107 // a dependency on the current time). 1105 // a dependency on the current time).
1108 resolver.pending_requests()[0]->results()->UseNamedProxy("foopy_valid:8080"); 1106 resolver.pending_jobs()[0]->results()->UseNamedProxy("foopy_valid:8080");
1109 resolver.pending_requests()[0]->CompleteNow(OK); 1107 resolver.pending_jobs()[0]->CompleteNow(OK);
1110 1108
1111 EXPECT_EQ(OK, callback2.WaitForResult()); 1109 EXPECT_EQ(OK, callback2.WaitForResult());
1112 EXPECT_FALSE(info.is_direct()); 1110 EXPECT_FALSE(info.is_direct());
1113 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI()); 1111 EXPECT_EQ("foopy_valid:8080", info.proxy_server().ToURI());
1114 } 1112 }
1115 1113
1116 TEST_F(ProxyServiceTest, ProxyFallback) { 1114 TEST_F(ProxyServiceTest, ProxyFallback) {
1117 // Test what happens when we specify multiple proxy servers and some of them 1115 // Test what happens when we specify multiple proxy servers and some of them
1118 // are bad. 1116 // are bad.
1119 1117
(...skipping 13 matching lines...) Expand all
1133 ProxyInfo info; 1131 ProxyInfo info;
1134 TestCompletionCallback callback1; 1132 TestCompletionCallback callback1;
1135 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), 1133 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(),
1136 NULL, NULL, BoundNetLog()); 1134 NULL, NULL, BoundNetLog());
1137 EXPECT_EQ(ERR_IO_PENDING, rv); 1135 EXPECT_EQ(ERR_IO_PENDING, rv);
1138 1136
1139 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1137 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1140 factory->pending_requests()[0]->script_data()->url()); 1138 factory->pending_requests()[0]->script_data()->url());
1141 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1139 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1142 1140
1143 ASSERT_EQ(1u, resolver.pending_requests().size()); 1141 ASSERT_EQ(1u, resolver.pending_jobs().size());
1144 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1142 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1145 1143
1146 // Set the result in proxy resolver. 1144 // Set the result in proxy resolver.
1147 resolver.pending_requests()[0]->results()->UseNamedProxy( 1145 resolver.pending_jobs()[0]->results()->UseNamedProxy(
1148 "foopy1:8080;foopy2:9090"); 1146 "foopy1:8080;foopy2:9090");
1149 resolver.pending_requests()[0]->CompleteNow(OK); 1147 resolver.pending_jobs()[0]->CompleteNow(OK);
1150 1148
1151 // The first item is valid. 1149 // The first item is valid.
1152 EXPECT_EQ(OK, callback1.WaitForResult()); 1150 EXPECT_EQ(OK, callback1.WaitForResult());
1153 EXPECT_FALSE(info.is_direct()); 1151 EXPECT_FALSE(info.is_direct());
1154 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1152 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1155 1153
1156 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1154 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1157 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1155 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1158 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 1156 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
1159 base::TimeTicks proxy_resolve_start_time = info.proxy_resolve_start_time(); 1157 base::TimeTicks proxy_resolve_start_time = info.proxy_resolve_start_time();
(...skipping 18 matching lines...) Expand all
1178 service.ReportSuccess(info, &test_delegate); 1176 service.ReportSuccess(info, &test_delegate);
1179 EXPECT_EQ("foopy1:8080", test_delegate.proxy_server().ToURI()); 1177 EXPECT_EQ("foopy1:8080", test_delegate.proxy_server().ToURI());
1180 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, 1178 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED,
1181 test_delegate.proxy_fallback_net_error()); 1179 test_delegate.proxy_fallback_net_error());
1182 1180
1183 TestCompletionCallback callback3; 1181 TestCompletionCallback callback3;
1184 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback3.callback(), NULL, 1182 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback3.callback(), NULL,
1185 NULL, BoundNetLog()); 1183 NULL, BoundNetLog());
1186 EXPECT_EQ(ERR_IO_PENDING, rv); 1184 EXPECT_EQ(ERR_IO_PENDING, rv);
1187 1185
1188 ASSERT_EQ(1u, resolver.pending_requests().size()); 1186 ASSERT_EQ(1u, resolver.pending_jobs().size());
1189 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1187 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1190 1188
1191 // Set the result in proxy resolver -- the second result is already known 1189 // Set the result in proxy resolver -- the second result is already known
1192 // to be bad, so we will not try to use it initially. 1190 // to be bad, so we will not try to use it initially.
1193 resolver.pending_requests()[0]->results()->UseNamedProxy( 1191 resolver.pending_jobs()[0]->results()->UseNamedProxy(
1194 "foopy3:7070;foopy1:8080;foopy2:9090"); 1192 "foopy3:7070;foopy1:8080;foopy2:9090");
1195 resolver.pending_requests()[0]->CompleteNow(OK); 1193 resolver.pending_jobs()[0]->CompleteNow(OK);
1196 1194
1197 EXPECT_EQ(OK, callback3.WaitForResult()); 1195 EXPECT_EQ(OK, callback3.WaitForResult());
1198 EXPECT_FALSE(info.is_direct()); 1196 EXPECT_FALSE(info.is_direct());
1199 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); 1197 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI());
1200 1198
1201 // Proxy times should have been updated, so get them again. 1199 // Proxy times should have been updated, so get them again.
1202 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time()); 1200 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time());
1203 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1201 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1204 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1202 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1205 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 1203 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 // Proxy times should not have been modified by fallback. 1235 // Proxy times should not have been modified by fallback.
1238 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time()); 1236 EXPECT_EQ(proxy_resolve_start_time, info.proxy_resolve_start_time());
1239 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time()); 1237 EXPECT_EQ(proxy_resolve_end_time, info.proxy_resolve_end_time());
1240 1238
1241 // Look up proxies again 1239 // Look up proxies again
1242 TestCompletionCallback callback7; 1240 TestCompletionCallback callback7;
1243 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback7.callback(), NULL, 1241 rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback7.callback(), NULL,
1244 NULL, BoundNetLog()); 1242 NULL, BoundNetLog());
1245 EXPECT_EQ(ERR_IO_PENDING, rv); 1243 EXPECT_EQ(ERR_IO_PENDING, rv);
1246 1244
1247 ASSERT_EQ(1u, resolver.pending_requests().size()); 1245 ASSERT_EQ(1u, resolver.pending_jobs().size());
1248 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1246 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1249 1247
1250 // This time, the first 3 results have been found to be bad, but only the 1248 // This time, the first 3 results have been found to be bad, but only the
1251 // first proxy has been confirmed ... 1249 // first proxy has been confirmed ...
1252 resolver.pending_requests()[0]->results()->UseNamedProxy( 1250 resolver.pending_jobs()[0]->results()->UseNamedProxy(
1253 "foopy1:8080;foopy3:7070;foopy2:9090;foopy4:9091"); 1251 "foopy1:8080;foopy3:7070;foopy2:9090;foopy4:9091");
1254 resolver.pending_requests()[0]->CompleteNow(OK); 1252 resolver.pending_jobs()[0]->CompleteNow(OK);
1255 1253
1256 // ... therefore, we should see the second proxy first. 1254 // ... therefore, we should see the second proxy first.
1257 EXPECT_EQ(OK, callback7.WaitForResult()); 1255 EXPECT_EQ(OK, callback7.WaitForResult());
1258 EXPECT_FALSE(info.is_direct()); 1256 EXPECT_FALSE(info.is_direct());
1259 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI()); 1257 EXPECT_EQ("foopy3:7070", info.proxy_server().ToURI());
1260 1258
1261 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time()); 1259 EXPECT_LE(proxy_resolve_end_time, info.proxy_resolve_start_time());
1262 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1260 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1263 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1261 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1264 // TODO(nsylvain): Test that the proxy can be retried after the delay. 1262 // TODO(nsylvain): Test that the proxy can be retried after the delay.
(...skipping 18 matching lines...) Expand all
1283 ProxyInfo info; 1281 ProxyInfo info;
1284 TestCompletionCallback callback1; 1282 TestCompletionCallback callback1;
1285 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), 1283 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(),
1286 NULL, NULL, BoundNetLog()); 1284 NULL, NULL, BoundNetLog());
1287 EXPECT_EQ(ERR_IO_PENDING, rv); 1285 EXPECT_EQ(ERR_IO_PENDING, rv);
1288 1286
1289 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1287 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1290 factory->pending_requests()[0]->script_data()->url()); 1288 factory->pending_requests()[0]->script_data()->url());
1291 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1289 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1292 1290
1293 ASSERT_EQ(1u, resolver.pending_requests().size()); 1291 ASSERT_EQ(1u, resolver.pending_jobs().size());
1294 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1292 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1295 1293
1296 // Set the result in proxy resolver. 1294 // Set the result in proxy resolver.
1297 resolver.pending_requests()[0]->results()->UsePacString( 1295 resolver.pending_jobs()[0]->results()->UsePacString(
1298 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT"); 1296 "PROXY foopy1:8080; PROXY foopy2:9090; DIRECT");
1299 resolver.pending_requests()[0]->CompleteNow(OK); 1297 resolver.pending_jobs()[0]->CompleteNow(OK);
1300 1298
1301 // Get the first result. 1299 // Get the first result.
1302 EXPECT_EQ(OK, callback1.WaitForResult()); 1300 EXPECT_EQ(OK, callback1.WaitForResult());
1303 EXPECT_FALSE(info.is_direct()); 1301 EXPECT_FALSE(info.is_direct());
1304 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1302 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1305 1303
1306 // Fake an error on the proxy. 1304 // Fake an error on the proxy.
1307 TestCompletionCallback callback2; 1305 TestCompletionCallback callback2;
1308 rv = service.ReconsiderProxyAfterError( 1306 rv = service.ReconsiderProxyAfterError(
1309 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1307 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1356 ProxyInfo info; 1354 ProxyInfo info;
1357 TestCompletionCallback callback1; 1355 TestCompletionCallback callback1;
1358 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), 1356 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(),
1359 NULL, NULL, BoundNetLog()); 1357 NULL, NULL, BoundNetLog());
1360 EXPECT_EQ(ERR_IO_PENDING, rv); 1358 EXPECT_EQ(ERR_IO_PENDING, rv);
1361 1359
1362 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1360 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1363 factory->pending_requests()[0]->script_data()->url()); 1361 factory->pending_requests()[0]->script_data()->url());
1364 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1362 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1365 1363
1366 ASSERT_EQ(1u, resolver.pending_requests().size()); 1364 ASSERT_EQ(1u, resolver.pending_jobs().size());
1367 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1365 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1368 1366
1369 // Set the result in proxy resolver. 1367 // Set the result in proxy resolver.
1370 resolver.pending_requests()[0]->results()->UseNamedProxy( 1368 resolver.pending_jobs()[0]->results()->UseNamedProxy(
1371 "foopy1:8080;foopy2:9090"); 1369 "foopy1:8080;foopy2:9090");
1372 resolver.pending_requests()[0]->CompleteNow(OK); 1370 resolver.pending_jobs()[0]->CompleteNow(OK);
1373 1371
1374 // The first item is valid. 1372 // The first item is valid.
1375 EXPECT_EQ(OK, callback1.WaitForResult()); 1373 EXPECT_EQ(OK, callback1.WaitForResult());
1376 EXPECT_FALSE(info.is_direct()); 1374 EXPECT_FALSE(info.is_direct());
1377 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1375 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1378 1376
1379 // Fake an error on the proxy, and also a new configuration on the proxy. 1377 // Fake an error on the proxy, and also a new configuration on the proxy.
1380 config_service->SetConfig( 1378 config_service->SetConfig(
1381 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac"))); 1379 ProxyConfig::CreateFromCustomPacURL(GURL("http://foopy-new/proxy.pac")));
1382 1380
1383 TestCompletionCallback callback2; 1381 TestCompletionCallback callback2;
1384 rv = service.ReconsiderProxyAfterError( 1382 rv = service.ReconsiderProxyAfterError(
1385 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1383 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1386 callback2.callback(), NULL, NULL, BoundNetLog()); 1384 callback2.callback(), NULL, NULL, BoundNetLog());
1387 EXPECT_EQ(ERR_IO_PENDING, rv); 1385 EXPECT_EQ(ERR_IO_PENDING, rv);
1388 1386
1389 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"), 1387 EXPECT_EQ(GURL("http://foopy-new/proxy.pac"),
1390 factory->pending_requests()[0]->script_data()->url()); 1388 factory->pending_requests()[0]->script_data()->url());
1391 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1389 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1392 1390
1393 ASSERT_EQ(1u, resolver.pending_requests().size()); 1391 ASSERT_EQ(1u, resolver.pending_jobs().size());
1394 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1392 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1395 1393
1396 resolver.pending_requests()[0]->results()->UseNamedProxy( 1394 resolver.pending_jobs()[0]->results()->UseNamedProxy(
1397 "foopy1:8080;foopy2:9090"); 1395 "foopy1:8080;foopy2:9090");
1398 resolver.pending_requests()[0]->CompleteNow(OK); 1396 resolver.pending_jobs()[0]->CompleteNow(OK);
1399 1397
1400 // The first proxy is still there since the configuration changed. 1398 // The first proxy is still there since the configuration changed.
1401 EXPECT_EQ(OK, callback2.WaitForResult()); 1399 EXPECT_EQ(OK, callback2.WaitForResult());
1402 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1400 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1403 1401
1404 // We fake another error. It should now ignore the first one. 1402 // We fake another error. It should now ignore the first one.
1405 TestCompletionCallback callback3; 1403 TestCompletionCallback callback3;
1406 rv = service.ReconsiderProxyAfterError( 1404 rv = service.ReconsiderProxyAfterError(
1407 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1405 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1408 callback3.callback(), NULL, NULL, BoundNetLog()); 1406 callback3.callback(), NULL, NULL, BoundNetLog());
1409 EXPECT_EQ(OK, rv); 1407 EXPECT_EQ(OK, rv);
1410 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1408 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1411 1409
1412 // We simulate a new configuration. 1410 // We simulate a new configuration.
1413 config_service->SetConfig( 1411 config_service->SetConfig(
1414 ProxyConfig::CreateFromCustomPacURL( 1412 ProxyConfig::CreateFromCustomPacURL(
1415 GURL("http://foopy-new2/proxy.pac"))); 1413 GURL("http://foopy-new2/proxy.pac")));
1416 1414
1417 // We fake another error. It should go back to the first proxy. 1415 // We fake another error. It should go back to the first proxy.
1418 TestCompletionCallback callback4; 1416 TestCompletionCallback callback4;
1419 rv = service.ReconsiderProxyAfterError( 1417 rv = service.ReconsiderProxyAfterError(
1420 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1418 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1421 callback4.callback(), NULL, NULL, BoundNetLog()); 1419 callback4.callback(), NULL, NULL, BoundNetLog());
1422 EXPECT_EQ(ERR_IO_PENDING, rv); 1420 EXPECT_EQ(ERR_IO_PENDING, rv);
1423 1421
1424 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"), 1422 EXPECT_EQ(GURL("http://foopy-new2/proxy.pac"),
1425 factory->pending_requests()[0]->script_data()->url()); 1423 factory->pending_requests()[0]->script_data()->url());
1426 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1424 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1427 1425
1428 ASSERT_EQ(1u, resolver.pending_requests().size()); 1426 ASSERT_EQ(1u, resolver.pending_jobs().size());
1429 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1427 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1430 1428
1431 resolver.pending_requests()[0]->results()->UseNamedProxy( 1429 resolver.pending_jobs()[0]->results()->UseNamedProxy(
1432 "foopy1:8080;foopy2:9090"); 1430 "foopy1:8080;foopy2:9090");
1433 resolver.pending_requests()[0]->CompleteNow(OK); 1431 resolver.pending_jobs()[0]->CompleteNow(OK);
1434 1432
1435 EXPECT_EQ(OK, callback4.WaitForResult()); 1433 EXPECT_EQ(OK, callback4.WaitForResult());
1436 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1434 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1437 1435
1438 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1436 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1439 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1437 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1440 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 1438 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
1441 } 1439 }
1442 1440
1443 TEST_F(ProxyServiceTest, ProxyFallback_BadConfig) { 1441 TEST_F(ProxyServiceTest, ProxyFallback_BadConfig) {
(...skipping 14 matching lines...) Expand all
1458 // Get the proxy information. 1456 // Get the proxy information.
1459 ProxyInfo info; 1457 ProxyInfo info;
1460 TestCompletionCallback callback1; 1458 TestCompletionCallback callback1;
1461 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), 1459 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(),
1462 NULL, NULL, BoundNetLog()); 1460 NULL, NULL, BoundNetLog());
1463 EXPECT_EQ(ERR_IO_PENDING, rv); 1461 EXPECT_EQ(ERR_IO_PENDING, rv);
1464 1462
1465 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1463 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1466 factory->pending_requests()[0]->script_data()->url()); 1464 factory->pending_requests()[0]->script_data()->url());
1467 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1465 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1468 ASSERT_EQ(1u, resolver.pending_requests().size()); 1466 ASSERT_EQ(1u, resolver.pending_jobs().size());
1469 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1467 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1470 1468
1471 resolver.pending_requests()[0]->results()->UseNamedProxy( 1469 resolver.pending_jobs()[0]->results()->UseNamedProxy(
1472 "foopy1:8080;foopy2:9090"); 1470 "foopy1:8080;foopy2:9090");
1473 resolver.pending_requests()[0]->CompleteNow(OK); 1471 resolver.pending_jobs()[0]->CompleteNow(OK);
1474 1472
1475 // The first item is valid. 1473 // The first item is valid.
1476 EXPECT_EQ(OK, callback1.WaitForResult()); 1474 EXPECT_EQ(OK, callback1.WaitForResult());
1477 EXPECT_FALSE(info.is_direct()); 1475 EXPECT_FALSE(info.is_direct());
1478 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1476 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1479 1477
1480 // Fake a proxy error. 1478 // Fake a proxy error.
1481 TestCompletionCallback callback2; 1479 TestCompletionCallback callback2;
1482 rv = service.ReconsiderProxyAfterError( 1480 rv = service.ReconsiderProxyAfterError(
1483 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1481 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1484 callback2.callback(), NULL, NULL, BoundNetLog()); 1482 callback2.callback(), NULL, NULL, BoundNetLog());
1485 EXPECT_EQ(OK, rv); 1483 EXPECT_EQ(OK, rv);
1486 1484
1487 // The first proxy is ignored, and the second one is selected. 1485 // The first proxy is ignored, and the second one is selected.
1488 EXPECT_FALSE(info.is_direct()); 1486 EXPECT_FALSE(info.is_direct());
1489 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1487 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1490 1488
1491 // Fake a PAC failure. 1489 // Fake a PAC failure.
1492 ProxyInfo info2; 1490 ProxyInfo info2;
1493 TestCompletionCallback callback3; 1491 TestCompletionCallback callback3;
1494 rv = service.ResolveProxy(url, LOAD_NORMAL, &info2, callback3.callback(), 1492 rv = service.ResolveProxy(url, LOAD_NORMAL, &info2, callback3.callback(),
1495 NULL, NULL, BoundNetLog()); 1493 NULL, NULL, BoundNetLog());
1496 EXPECT_EQ(ERR_IO_PENDING, rv); 1494 EXPECT_EQ(ERR_IO_PENDING, rv);
1497 1495
1498 ASSERT_EQ(1u, resolver.pending_requests().size()); 1496 ASSERT_EQ(1u, resolver.pending_jobs().size());
1499 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1497 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1500 1498
1501 // This simulates a javascript runtime error in the PAC script. 1499 // This simulates a javascript runtime error in the PAC script.
1502 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); 1500 resolver.pending_jobs()[0]->CompleteNow(ERR_FAILED);
1503 1501
1504 // Although the resolver failed, the ProxyService will implicitly fall-back 1502 // Although the resolver failed, the ProxyService will implicitly fall-back
1505 // to a DIRECT connection. 1503 // to a DIRECT connection.
1506 EXPECT_EQ(OK, callback3.WaitForResult()); 1504 EXPECT_EQ(OK, callback3.WaitForResult());
1507 EXPECT_TRUE(info2.is_direct()); 1505 EXPECT_TRUE(info2.is_direct());
1508 EXPECT_FALSE(info2.is_empty()); 1506 EXPECT_FALSE(info2.is_empty());
1509 1507
1510 // The PAC script will work properly next time and successfully return a 1508 // The PAC script will work properly next time and successfully return a
1511 // proxy list. Since we have not marked the configuration as bad, it should 1509 // proxy list. Since we have not marked the configuration as bad, it should
1512 // "just work" the next time we call it. 1510 // "just work" the next time we call it.
1513 ProxyInfo info3; 1511 ProxyInfo info3;
1514 TestCompletionCallback callback4; 1512 TestCompletionCallback callback4;
1515 rv = service.ReconsiderProxyAfterError( 1513 rv = service.ReconsiderProxyAfterError(
1516 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, 1514 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3,
1517 callback4.callback(), NULL, NULL, BoundNetLog()); 1515 callback4.callback(), NULL, NULL, BoundNetLog());
1518 EXPECT_EQ(ERR_IO_PENDING, rv); 1516 EXPECT_EQ(ERR_IO_PENDING, rv);
1519 1517
1520 ASSERT_EQ(1u, resolver.pending_requests().size()); 1518 ASSERT_EQ(1u, resolver.pending_jobs().size());
1521 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1519 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1522 1520
1523 resolver.pending_requests()[0]->results()->UseNamedProxy( 1521 resolver.pending_jobs()[0]->results()->UseNamedProxy(
1524 "foopy1:8080;foopy2:9090"); 1522 "foopy1:8080;foopy2:9090");
1525 resolver.pending_requests()[0]->CompleteNow(OK); 1523 resolver.pending_jobs()[0]->CompleteNow(OK);
1526 1524
1527 // The first proxy is not there since the it was added to the bad proxies 1525 // The first proxy is not there since the it was added to the bad proxies
1528 // list by the earlier ReconsiderProxyAfterError(). 1526 // list by the earlier ReconsiderProxyAfterError().
1529 EXPECT_EQ(OK, callback4.WaitForResult()); 1527 EXPECT_EQ(OK, callback4.WaitForResult());
1530 EXPECT_FALSE(info3.is_direct()); 1528 EXPECT_FALSE(info3.is_direct());
1531 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI()); 1529 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI());
1532 1530
1533 EXPECT_FALSE(info.proxy_resolve_start_time().is_null()); 1531 EXPECT_FALSE(info.proxy_resolve_start_time().is_null());
1534 EXPECT_FALSE(info.proxy_resolve_end_time().is_null()); 1532 EXPECT_FALSE(info.proxy_resolve_end_time().is_null());
1535 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time()); 1533 EXPECT_LE(info.proxy_resolve_start_time(), info.proxy_resolve_end_time());
(...skipping 20 matching lines...) Expand all
1556 // Get the proxy information. 1554 // Get the proxy information.
1557 ProxyInfo info; 1555 ProxyInfo info;
1558 TestCompletionCallback callback1; 1556 TestCompletionCallback callback1;
1559 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(), 1557 int rv = service.ResolveProxy(url, LOAD_NORMAL, &info, callback1.callback(),
1560 NULL, NULL, BoundNetLog()); 1558 NULL, NULL, BoundNetLog());
1561 EXPECT_EQ(ERR_IO_PENDING, rv); 1559 EXPECT_EQ(ERR_IO_PENDING, rv);
1562 1560
1563 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1561 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1564 factory->pending_requests()[0]->script_data()->url()); 1562 factory->pending_requests()[0]->script_data()->url());
1565 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1563 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1566 ASSERT_EQ(1u, resolver.pending_requests().size()); 1564 ASSERT_EQ(1u, resolver.pending_jobs().size());
1567 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1565 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1568 1566
1569 resolver.pending_requests()[0]->results()->UseNamedProxy( 1567 resolver.pending_jobs()[0]->results()->UseNamedProxy(
1570 "foopy1:8080;foopy2:9090"); 1568 "foopy1:8080;foopy2:9090");
1571 resolver.pending_requests()[0]->CompleteNow(OK); 1569 resolver.pending_jobs()[0]->CompleteNow(OK);
1572 1570
1573 // The first item is valid. 1571 // The first item is valid.
1574 EXPECT_EQ(OK, callback1.WaitForResult()); 1572 EXPECT_EQ(OK, callback1.WaitForResult());
1575 EXPECT_FALSE(info.is_direct()); 1573 EXPECT_FALSE(info.is_direct());
1576 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI()); 1574 EXPECT_EQ("foopy1:8080", info.proxy_server().ToURI());
1577 1575
1578 // Fake a proxy error. 1576 // Fake a proxy error.
1579 TestCompletionCallback callback2; 1577 TestCompletionCallback callback2;
1580 rv = service.ReconsiderProxyAfterError( 1578 rv = service.ReconsiderProxyAfterError(
1581 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info, 1579 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info,
1582 callback2.callback(), NULL, NULL, BoundNetLog()); 1580 callback2.callback(), NULL, NULL, BoundNetLog());
1583 EXPECT_EQ(OK, rv); 1581 EXPECT_EQ(OK, rv);
1584 1582
1585 // The first proxy is ignored, and the second one is selected. 1583 // The first proxy is ignored, and the second one is selected.
1586 EXPECT_FALSE(info.is_direct()); 1584 EXPECT_FALSE(info.is_direct());
1587 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI()); 1585 EXPECT_EQ("foopy2:9090", info.proxy_server().ToURI());
1588 1586
1589 // Fake a PAC failure. 1587 // Fake a PAC failure.
1590 ProxyInfo info2; 1588 ProxyInfo info2;
1591 TestCompletionCallback callback3; 1589 TestCompletionCallback callback3;
1592 rv = service.ResolveProxy(url, LOAD_NORMAL, &info2, callback3.callback(), 1590 rv = service.ResolveProxy(url, LOAD_NORMAL, &info2, callback3.callback(),
1593 NULL, NULL, BoundNetLog()); 1591 NULL, NULL, BoundNetLog());
1594 EXPECT_EQ(ERR_IO_PENDING, rv); 1592 EXPECT_EQ(ERR_IO_PENDING, rv);
1595 1593
1596 ASSERT_EQ(1u, resolver.pending_requests().size()); 1594 ASSERT_EQ(1u, resolver.pending_jobs().size());
1597 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1595 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1598 1596
1599 // This simulates a javascript runtime error in the PAC script. 1597 // This simulates a javascript runtime error in the PAC script.
1600 resolver.pending_requests()[0]->CompleteNow(ERR_FAILED); 1598 resolver.pending_jobs()[0]->CompleteNow(ERR_FAILED);
1601 1599
1602 // Although the resolver failed, the ProxyService will NOT fall-back 1600 // Although the resolver failed, the ProxyService will NOT fall-back
1603 // to a DIRECT connection as it is configured as mandatory. 1601 // to a DIRECT connection as it is configured as mandatory.
1604 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED, 1602 EXPECT_EQ(ERR_MANDATORY_PROXY_CONFIGURATION_FAILED,
1605 callback3.WaitForResult()); 1603 callback3.WaitForResult());
1606 EXPECT_FALSE(info2.is_direct()); 1604 EXPECT_FALSE(info2.is_direct());
1607 EXPECT_TRUE(info2.is_empty()); 1605 EXPECT_TRUE(info2.is_empty());
1608 1606
1609 // The PAC script will work properly next time and successfully return a 1607 // The PAC script will work properly next time and successfully return a
1610 // proxy list. Since we have not marked the configuration as bad, it should 1608 // proxy list. Since we have not marked the configuration as bad, it should
1611 // "just work" the next time we call it. 1609 // "just work" the next time we call it.
1612 ProxyInfo info3; 1610 ProxyInfo info3;
1613 TestCompletionCallback callback4; 1611 TestCompletionCallback callback4;
1614 rv = service.ReconsiderProxyAfterError( 1612 rv = service.ReconsiderProxyAfterError(
1615 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3, 1613 url, LOAD_NORMAL, ERR_PROXY_CONNECTION_FAILED, &info3,
1616 callback4.callback(), NULL, NULL, BoundNetLog()); 1614 callback4.callback(), NULL, NULL, BoundNetLog());
1617 EXPECT_EQ(ERR_IO_PENDING, rv); 1615 EXPECT_EQ(ERR_IO_PENDING, rv);
1618 1616
1619 ASSERT_EQ(1u, resolver.pending_requests().size()); 1617 ASSERT_EQ(1u, resolver.pending_jobs().size());
1620 EXPECT_EQ(url, resolver.pending_requests()[0]->url()); 1618 EXPECT_EQ(url, resolver.pending_jobs()[0]->url());
1621 1619
1622 resolver.pending_requests()[0]->results()->UseNamedProxy( 1620 resolver.pending_jobs()[0]->results()->UseNamedProxy(
1623 "foopy1:8080;foopy2:9090"); 1621 "foopy1:8080;foopy2:9090");
1624 resolver.pending_requests()[0]->CompleteNow(OK); 1622 resolver.pending_jobs()[0]->CompleteNow(OK);
1625 1623
1626 // The first proxy is not there since the it was added to the bad proxies 1624 // The first proxy is not there since the it was added to the bad proxies
1627 // list by the earlier ReconsiderProxyAfterError(). 1625 // list by the earlier ReconsiderProxyAfterError().
1628 EXPECT_EQ(OK, callback4.WaitForResult()); 1626 EXPECT_EQ(OK, callback4.WaitForResult());
1629 EXPECT_FALSE(info3.is_direct()); 1627 EXPECT_FALSE(info3.is_direct());
1630 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI()); 1628 EXPECT_EQ("foopy1:8080", info3.proxy_server().ToURI());
1631 } 1629 }
1632 1630
1633 TEST_F(ProxyServiceTest, ProxyBypassList) { 1631 TEST_F(ProxyServiceTest, ProxyBypassList) {
1634 // Test that the proxy bypass rules are consulted. 1632 // Test that the proxy bypass rules are consulted.
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
1891 TestCompletionCallback callback1; 1889 TestCompletionCallback callback1;
1892 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), 1890 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(),
1893 NULL, NULL, BoundNetLog()); 1891 NULL, NULL, BoundNetLog());
1894 EXPECT_EQ(ERR_IO_PENDING, rv); 1892 EXPECT_EQ(ERR_IO_PENDING, rv);
1895 1893
1896 // Successfully initialize the PAC script. 1894 // Successfully initialize the PAC script.
1897 EXPECT_EQ(GURL("http://foopy/proxy.pac"), 1895 EXPECT_EQ(GURL("http://foopy/proxy.pac"),
1898 factory->pending_requests()[0]->script_data()->url()); 1896 factory->pending_requests()[0]->script_data()->url());
1899 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 1897 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
1900 1898
1901 GetPendingRequestsForURLs(resolver, url1); 1899 GetPendingJobsForURLs(resolver, url1);
1902 1900
1903 ProxyInfo info2; 1901 ProxyInfo info2;
1904 TestCompletionCallback callback2; 1902 TestCompletionCallback callback2;
1905 ProxyService::PacRequest* request2; 1903 ProxyService::PacRequest* request2;
1906 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(), 1904 rv = service.ResolveProxy(url2, LOAD_NORMAL, &info2, callback2.callback(),
1907 &request2, NULL, BoundNetLog()); 1905 &request2, NULL, BoundNetLog());
1908 EXPECT_EQ(ERR_IO_PENDING, rv); 1906 EXPECT_EQ(ERR_IO_PENDING, rv);
1909 1907
1910 GetPendingRequestsForURLs(resolver, url1, url2); 1908 GetPendingJobsForURLs(resolver, url1, url2);
1911 1909
1912 ProxyInfo info3; 1910 ProxyInfo info3;
1913 TestCompletionCallback callback3; 1911 TestCompletionCallback callback3;
1914 rv = service.ResolveProxy(url3, LOAD_NORMAL, &info3, callback3.callback(), 1912 rv = service.ResolveProxy(url3, LOAD_NORMAL, &info3, callback3.callback(),
1915 NULL, NULL, BoundNetLog()); 1913 NULL, NULL, BoundNetLog());
1916 EXPECT_EQ(ERR_IO_PENDING, rv); 1914 EXPECT_EQ(ERR_IO_PENDING, rv);
1917 GetPendingRequestsForURLs(resolver, url1, url2, url3); 1915 GetPendingJobsForURLs(resolver, url1, url2, url3);
1918 1916
1919 // Cancel the second request 1917 // Cancel the second request
1920 service.CancelPacRequest(request2); 1918 service.CancelPacRequest(request2);
1921 1919
1922 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url3); 1920 JobMap jobs = GetPendingJobsForURLs(resolver, url1, url3);
1923 1921
1924 // Complete the two un-cancelled requests. 1922 // Complete the two un-cancelled jobs.
1925 // We complete the last one first, just to mix it up a bit. 1923 // We complete the last one first, just to mix it up a bit.
1926 requests[url3]->results()->UseNamedProxy("request3:80"); 1924 jobs[url3]->results()->UseNamedProxy("request3:80");
1927 requests[url3]->CompleteNow(OK); 1925 jobs[url3]->CompleteNow(OK);
1928 1926
1929 requests[url1]->results()->UseNamedProxy("request1:80"); 1927 jobs[url1]->results()->UseNamedProxy("request1:80");
1930 requests[url1]->CompleteNow(OK); 1928 jobs[url1]->CompleteNow(OK);
1931 1929
1932 // Complete and verify that requests ran as expected. 1930 // Complete and verify that jobs ran as expected.
1933 EXPECT_EQ(OK, callback1.WaitForResult()); 1931 EXPECT_EQ(OK, callback1.WaitForResult());
1934 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 1932 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
1935 1933
1936 EXPECT_FALSE(callback2.have_result()); // Cancelled. 1934 EXPECT_FALSE(callback2.have_result()); // Cancelled.
1937 GetCancelledRequestsForURLs(resolver, url2); 1935 GetCancelledJobsForURLs(resolver, url2);
1938 1936
1939 EXPECT_EQ(OK, callback3.WaitForResult()); 1937 EXPECT_EQ(OK, callback3.WaitForResult());
1940 EXPECT_EQ("request3:80", info3.proxy_server().ToURI()); 1938 EXPECT_EQ("request3:80", info3.proxy_server().ToURI());
1941 } 1939 }
1942 1940
1943 // Test the initial PAC download for resolver that expects bytes. 1941 // Test the initial PAC download for resolver that expects bytes.
1944 TEST_F(ProxyServiceTest, InitialPACScriptDownload) { 1942 TEST_F(ProxyServiceTest, InitialPACScriptDownload) {
1945 const GURL url1("http://request1"); 1943 const GURL url1("http://request1");
1946 const GURL url2("http://request2"); 1944 const GURL url2("http://request2");
1947 const GURL url3("http://request3"); 1945 const GURL url3("http://request3");
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
2000 // ProxyScriptFetcher to invoke its completion callback, notifying it of 1998 // ProxyScriptFetcher to invoke its completion callback, notifying it of
2001 // PAC script download completion. 1999 // PAC script download completion.
2002 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2000 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
2003 2001
2004 // Now that the PAC script is downloaded, it will have been sent to the proxy 2002 // Now that the PAC script is downloaded, it will have been sent to the proxy
2005 // resolver. 2003 // resolver.
2006 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 2004 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
2007 factory->pending_requests()[0]->script_data()->utf16()); 2005 factory->pending_requests()[0]->script_data()->utf16());
2008 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2006 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2009 2007
2010 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2, url3); 2008 JobMap jobs = GetPendingJobsForURLs(resolver, url1, url2, url3);
2011 2009
2012 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request1)); 2010 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request1));
2013 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request2)); 2011 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request2));
2014 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request3)); 2012 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, service.GetLoadState(request3));
2015 2013
2016 // Complete all the requests (in some order). 2014 // Complete all the jobs (in some order).
2017 2015
2018 requests[url3]->results()->UseNamedProxy("request3:80"); 2016 jobs[url3]->results()->UseNamedProxy("request3:80");
2019 requests[url3]->CompleteNow(OK); 2017 jobs[url3]->CompleteNow(OK);
2020 2018
2021 requests[url1]->results()->UseNamedProxy("request1:80"); 2019 jobs[url1]->results()->UseNamedProxy("request1:80");
2022 requests[url1]->CompleteNow(OK); 2020 jobs[url1]->CompleteNow(OK);
2023 2021
2024 requests[url2]->results()->UseNamedProxy("request2:80"); 2022 jobs[url2]->results()->UseNamedProxy("request2:80");
2025 requests[url2]->CompleteNow(OK); 2023 jobs[url2]->CompleteNow(OK);
2026 2024
2027 // Complete and verify that requests ran as expected. 2025 // Complete and verify that jobs ran as expected.
2028 EXPECT_EQ(OK, callback1.WaitForResult()); 2026 EXPECT_EQ(OK, callback1.WaitForResult());
2029 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2027 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2030 EXPECT_FALSE(info1.proxy_resolve_start_time().is_null()); 2028 EXPECT_FALSE(info1.proxy_resolve_start_time().is_null());
2031 EXPECT_FALSE(info1.proxy_resolve_end_time().is_null()); 2029 EXPECT_FALSE(info1.proxy_resolve_end_time().is_null());
2032 EXPECT_LE(info1.proxy_resolve_start_time(), info1.proxy_resolve_end_time()); 2030 EXPECT_LE(info1.proxy_resolve_start_time(), info1.proxy_resolve_end_time());
2033 2031
2034 EXPECT_EQ(OK, callback2.WaitForResult()); 2032 EXPECT_EQ(OK, callback2.WaitForResult());
2035 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 2033 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
2036 EXPECT_FALSE(info2.proxy_resolve_start_time().is_null()); 2034 EXPECT_FALSE(info2.proxy_resolve_start_time().is_null());
2037 EXPECT_FALSE(info2.proxy_resolve_end_time().is_null()); 2035 EXPECT_FALSE(info2.proxy_resolve_end_time().is_null());
(...skipping 17 matching lines...) Expand all
2055 MockAsyncProxyResolverFactory* factory = 2053 MockAsyncProxyResolverFactory* factory =
2056 new MockAsyncProxyResolverFactory(true); 2054 new MockAsyncProxyResolverFactory(true);
2057 2055
2058 ProxyService service(make_scoped_ptr(config_service), 2056 ProxyService service(make_scoped_ptr(config_service),
2059 make_scoped_ptr(factory), NULL); 2057 make_scoped_ptr(factory), NULL);
2060 2058
2061 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2059 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2062 service.SetProxyScriptFetchers( 2060 service.SetProxyScriptFetchers(
2063 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); 2061 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher()));
2064 2062
2065 // Start 2 requests. 2063 // Start 2 jobs.
2066 2064
2067 ProxyInfo info1; 2065 ProxyInfo info1;
2068 TestCompletionCallback callback1; 2066 TestCompletionCallback callback1;
2069 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(), 2067 int rv = service.ResolveProxy(url1, LOAD_NORMAL, &info1, callback1.callback(),
2070 NULL, NULL, BoundNetLog()); 2068 NULL, NULL, BoundNetLog());
2071 EXPECT_EQ(ERR_IO_PENDING, rv); 2069 EXPECT_EQ(ERR_IO_PENDING, rv);
2072 2070
2073 // The first request should have triggered download of PAC script. 2071 // The first request should have triggered download of PAC script.
2074 EXPECT_TRUE(fetcher->has_pending_request()); 2072 EXPECT_TRUE(fetcher->has_pending_request());
2075 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2073 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
(...skipping 19 matching lines...) Expand all
2095 EXPECT_TRUE(factory->pending_requests().empty()); 2093 EXPECT_TRUE(factory->pending_requests().empty());
2096 2094
2097 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2095 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
2098 2096
2099 // Now that the PAC script is downloaded, it will have been sent to the proxy 2097 // Now that the PAC script is downloaded, it will have been sent to the proxy
2100 // resolver. 2098 // resolver.
2101 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 2099 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
2102 factory->pending_requests()[0]->script_data()->utf16()); 2100 factory->pending_requests()[0]->script_data()->utf16());
2103 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2101 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2104 2102
2105 GetPendingRequestsForURLs(resolver, url1, url2); 2103 GetPendingJobsForURLs(resolver, url1, url2);
2106 } 2104 }
2107 2105
2108 // Test cancellation of a request, while the PAC script is being fetched. 2106 // Test cancellation of a request, while the PAC script is being fetched.
2109 TEST_F(ProxyServiceTest, CancelWhilePACFetching) { 2107 TEST_F(ProxyServiceTest, CancelWhilePACFetching) {
2110 MockProxyConfigService* config_service = 2108 MockProxyConfigService* config_service =
2111 new MockProxyConfigService("http://foopy/proxy.pac"); 2109 new MockProxyConfigService("http://foopy/proxy.pac");
2112 2110
2113 MockAsyncProxyResolver resolver; 2111 MockAsyncProxyResolver resolver;
2114 MockAsyncProxyResolverFactory* factory = 2112 MockAsyncProxyResolverFactory* factory =
2115 new MockAsyncProxyResolverFactory(true); 2113 new MockAsyncProxyResolverFactory(true);
(...skipping 29 matching lines...) Expand all
2145 2143
2146 ProxyInfo info3; 2144 ProxyInfo info3;
2147 TestCompletionCallback callback3; 2145 TestCompletionCallback callback3;
2148 rv = service.ResolveProxy(GURL("http://request3"), LOAD_NORMAL, &info3, 2146 rv = service.ResolveProxy(GURL("http://request3"), LOAD_NORMAL, &info3,
2149 callback3.callback(), NULL, NULL, BoundNetLog()); 2147 callback3.callback(), NULL, NULL, BoundNetLog());
2150 EXPECT_EQ(ERR_IO_PENDING, rv); 2148 EXPECT_EQ(ERR_IO_PENDING, rv);
2151 2149
2152 // Nothing has been sent to the factory yet. 2150 // Nothing has been sent to the factory yet.
2153 EXPECT_TRUE(factory->pending_requests().empty()); 2151 EXPECT_TRUE(factory->pending_requests().empty());
2154 2152
2155 // Cancel the first 2 requests. 2153 // Cancel the first 2 jobs.
2156 service.CancelPacRequest(request1); 2154 service.CancelPacRequest(request1);
2157 service.CancelPacRequest(request2); 2155 service.CancelPacRequest(request2);
2158 2156
2159 // At this point the ProxyService should be waiting for the 2157 // At this point the ProxyService should be waiting for the
2160 // ProxyScriptFetcher to invoke its completion callback, notifying it of 2158 // ProxyScriptFetcher to invoke its completion callback, notifying it of
2161 // PAC script download completion. 2159 // PAC script download completion.
2162 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2160 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
2163 2161
2164 // Now that the PAC script is downloaded, it will have been sent to the 2162 // Now that the PAC script is downloaded, it will have been sent to the
2165 // proxy resolver. 2163 // proxy resolver.
2166 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 2164 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
2167 factory->pending_requests()[0]->script_data()->utf16()); 2165 factory->pending_requests()[0]->script_data()->utf16());
2168 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2166 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2169 2167
2170 ASSERT_EQ(1u, resolver.pending_requests().size()); 2168 ASSERT_EQ(1u, resolver.pending_jobs().size());
2171 EXPECT_EQ(GURL("http://request3"), resolver.pending_requests()[0]->url()); 2169 EXPECT_EQ(GURL("http://request3"), resolver.pending_jobs()[0]->url());
2172 2170
2173 // Complete all the requests. 2171 // Complete all the jobs.
2174 resolver.pending_requests()[0]->results()->UseNamedProxy("request3:80"); 2172 resolver.pending_jobs()[0]->results()->UseNamedProxy("request3:80");
2175 resolver.pending_requests()[0]->CompleteNow(OK); 2173 resolver.pending_jobs()[0]->CompleteNow(OK);
2176 2174
2177 EXPECT_EQ(OK, callback3.WaitForResult()); 2175 EXPECT_EQ(OK, callback3.WaitForResult());
2178 EXPECT_EQ("request3:80", info3.proxy_server().ToURI()); 2176 EXPECT_EQ("request3:80", info3.proxy_server().ToURI());
2179 2177
2180 EXPECT_TRUE(resolver.cancelled_requests().empty()); 2178 EXPECT_TRUE(resolver.cancelled_jobs().empty());
2181 2179
2182 EXPECT_FALSE(callback1.have_result()); // Cancelled. 2180 EXPECT_FALSE(callback1.have_result()); // Cancelled.
2183 EXPECT_FALSE(callback2.have_result()); // Cancelled. 2181 EXPECT_FALSE(callback2.have_result()); // Cancelled.
2184 2182
2185 TestNetLogEntry::List entries1; 2183 TestNetLogEntry::List entries1;
2186 log1.GetEntries(&entries1); 2184 log1.GetEntries(&entries1);
2187 2185
2188 // Check the NetLog for request 1 (which was cancelled) got filled properly. 2186 // Check the NetLog for request 1 (which was cancelled) got filled properly.
2189 EXPECT_EQ(4u, entries1.size()); 2187 EXPECT_EQ(4u, entries1.size());
2190 EXPECT_TRUE(LogContainsBeginEvent( 2188 EXPECT_TRUE(LogContainsBeginEvent(
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
2245 2243
2246 // Next it should be trying the custom PAC url. 2244 // Next it should be trying the custom PAC url.
2247 EXPECT_TRUE(fetcher->has_pending_request()); 2245 EXPECT_TRUE(fetcher->has_pending_request());
2248 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2246 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2249 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2247 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
2250 2248
2251 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 2249 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
2252 factory->pending_requests()[0]->script_data()->utf16()); 2250 factory->pending_requests()[0]->script_data()->utf16());
2253 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2251 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2254 2252
2255 // Now finally, the pending requests should have been sent to the resolver 2253 // Now finally, the pending jobs should have been sent to the resolver
2256 // (which was initialized with custom PAC script). 2254 // (which was initialized with custom PAC script).
2257 2255
2258 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2); 2256 JobMap jobs = GetPendingJobsForURLs(resolver, url1, url2);
2259 2257
2260 // Complete the pending requests. 2258 // Complete the pending jobs.
2261 requests[url2]->results()->UseNamedProxy("request2:80"); 2259 jobs[url2]->results()->UseNamedProxy("request2:80");
2262 requests[url2]->CompleteNow(OK); 2260 jobs[url2]->CompleteNow(OK);
2263 requests[url1]->results()->UseNamedProxy("request1:80"); 2261 jobs[url1]->results()->UseNamedProxy("request1:80");
2264 requests[url1]->CompleteNow(OK); 2262 jobs[url1]->CompleteNow(OK);
2265 2263
2266 // Verify that requests ran as expected. 2264 // Verify that jobs ran as expected.
2267 EXPECT_EQ(OK, callback1.WaitForResult()); 2265 EXPECT_EQ(OK, callback1.WaitForResult());
2268 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2266 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2269 EXPECT_FALSE(info1.proxy_resolve_start_time().is_null()); 2267 EXPECT_FALSE(info1.proxy_resolve_start_time().is_null());
2270 EXPECT_FALSE(info1.proxy_resolve_end_time().is_null()); 2268 EXPECT_FALSE(info1.proxy_resolve_end_time().is_null());
2271 EXPECT_LE(info1.proxy_resolve_start_time(), info1.proxy_resolve_end_time()); 2269 EXPECT_LE(info1.proxy_resolve_start_time(), info1.proxy_resolve_end_time());
2272 2270
2273 EXPECT_EQ(OK, callback2.WaitForResult()); 2271 EXPECT_EQ(OK, callback2.WaitForResult());
2274 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 2272 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
2275 EXPECT_FALSE(info2.proxy_resolve_start_time().is_null()); 2273 EXPECT_FALSE(info2.proxy_resolve_start_time().is_null());
2276 EXPECT_FALSE(info2.proxy_resolve_end_time().is_null()); 2274 EXPECT_FALSE(info2.proxy_resolve_end_time().is_null());
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
2326 2324
2327 // Next it should be trying the custom PAC url. 2325 // Next it should be trying the custom PAC url.
2328 EXPECT_TRUE(fetcher->has_pending_request()); 2326 EXPECT_TRUE(fetcher->has_pending_request());
2329 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2327 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2330 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2328 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
2331 2329
2332 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 2330 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
2333 factory->pending_requests()[0]->script_data()->utf16()); 2331 factory->pending_requests()[0]->script_data()->utf16());
2334 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2332 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2335 2333
2336 // Now finally, the pending requests should have been sent to the resolver 2334 // Now finally, the pending jobs should have been sent to the resolver
2337 // (which was initialized with custom PAC script). 2335 // (which was initialized with custom PAC script).
2338 2336
2339 RequestMap requests = GetPendingRequestsForURLs(resolver, url1, url2); 2337 JobMap jobs = GetPendingJobsForURLs(resolver, url1, url2);
2340 2338
2341 // Complete the pending requests. 2339 // Complete the pending jobs.
2342 requests[url2]->results()->UseNamedProxy("request2:80"); 2340 jobs[url2]->results()->UseNamedProxy("request2:80");
2343 requests[url2]->CompleteNow(OK); 2341 jobs[url2]->CompleteNow(OK);
2344 requests[url1]->results()->UseNamedProxy("request1:80"); 2342 jobs[url1]->results()->UseNamedProxy("request1:80");
2345 requests[url1]->CompleteNow(OK); 2343 jobs[url1]->CompleteNow(OK);
2346 2344
2347 // Verify that requests ran as expected. 2345 // Verify that jobs ran as expected.
2348 EXPECT_EQ(OK, callback1.WaitForResult()); 2346 EXPECT_EQ(OK, callback1.WaitForResult());
2349 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2347 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2350 2348
2351 EXPECT_EQ(OK, callback2.WaitForResult()); 2349 EXPECT_EQ(OK, callback2.WaitForResult());
2352 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 2350 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
2353 } 2351 }
2354 2352
2355 // Test that if all of auto-detect, a custom PAC script, and manual settings 2353 // Test that if all of auto-detect, a custom PAC script, and manual settings
2356 // are given, then we will try them in that order. 2354 // are given, then we will try them in that order.
2357 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) { 2355 TEST_F(ProxyServiceTest, FallbackFromAutodetectToCustomToManual) {
2358 ProxyConfig config; 2356 ProxyConfig config;
2359 config.set_auto_detect(true); 2357 config.set_auto_detect(true);
2360 config.set_pac_url(GURL("http://foopy/proxy.pac")); 2358 config.set_pac_url(GURL("http://foopy/proxy.pac"));
2361 config.proxy_rules().ParseFromString("http=foopy:80"); 2359 config.proxy_rules().ParseFromString("http=foopy:80");
2362 2360
2363 MockProxyConfigService* config_service = new MockProxyConfigService(config); 2361 MockProxyConfigService* config_service = new MockProxyConfigService(config);
2364 MockAsyncProxyResolverFactory* factory = 2362 MockAsyncProxyResolverFactory* factory =
2365 new MockAsyncProxyResolverFactory(true); 2363 new MockAsyncProxyResolverFactory(true);
2366 ProxyService service(make_scoped_ptr(config_service), 2364 ProxyService service(make_scoped_ptr(config_service),
2367 make_scoped_ptr(factory), NULL); 2365 make_scoped_ptr(factory), NULL);
2368 2366
2369 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher; 2367 MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
2370 service.SetProxyScriptFetchers( 2368 service.SetProxyScriptFetchers(
2371 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher())); 2369 fetcher, make_scoped_ptr(new DoNothingDhcpProxyScriptFetcher()));
2372 2370
2373 // Start 2 requests. 2371 // Start 2 jobs.
2374 2372
2375 ProxyInfo info1; 2373 ProxyInfo info1;
2376 TestCompletionCallback callback1; 2374 TestCompletionCallback callback1;
2377 int rv = 2375 int rv =
2378 service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1, 2376 service.ResolveProxy(GURL("http://request1"), LOAD_NORMAL, &info1,
2379 callback1.callback(), NULL, NULL, BoundNetLog()); 2377 callback1.callback(), NULL, NULL, BoundNetLog());
2380 EXPECT_EQ(ERR_IO_PENDING, rv); 2378 EXPECT_EQ(ERR_IO_PENDING, rv);
2381 2379
2382 ProxyInfo info2; 2380 ProxyInfo info2;
2383 TestCompletionCallback callback2; 2381 TestCompletionCallback callback2;
(...skipping 13 matching lines...) Expand all
2397 2395
2398 // Next it should be trying the custom PAC url -- fail the download. 2396 // Next it should be trying the custom PAC url -- fail the download.
2399 EXPECT_TRUE(fetcher->has_pending_request()); 2397 EXPECT_TRUE(fetcher->has_pending_request());
2400 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2398 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2401 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); 2399 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string());
2402 2400
2403 // Since we never managed to initialize a resolver, nothing should have been 2401 // Since we never managed to initialize a resolver, nothing should have been
2404 // sent to it. 2402 // sent to it.
2405 ASSERT_EQ(0u, factory->pending_requests().size()); 2403 ASSERT_EQ(0u, factory->pending_requests().size());
2406 2404
2407 // Verify that requests ran as expected -- they should have fallen back to 2405 // Verify that jobs ran as expected -- they should have fallen back to
2408 // the manual proxy configuration for HTTP urls. 2406 // the manual proxy configuration for HTTP urls.
2409 EXPECT_EQ(OK, callback1.WaitForResult()); 2407 EXPECT_EQ(OK, callback1.WaitForResult());
2410 EXPECT_EQ("foopy:80", info1.proxy_server().ToURI()); 2408 EXPECT_EQ("foopy:80", info1.proxy_server().ToURI());
2411 2409
2412 EXPECT_EQ(OK, callback2.WaitForResult()); 2410 EXPECT_EQ(OK, callback2.WaitForResult());
2413 EXPECT_EQ("foopy:80", info2.proxy_server().ToURI()); 2411 EXPECT_EQ("foopy:80", info2.proxy_server().ToURI());
2414 } 2412 }
2415 2413
2416 // Test that the bypass rules are NOT applied when using autodetect. 2414 // Test that the bypass rules are NOT applied when using autodetect.
2417 TEST_F(ProxyServiceTest, BypassDoesntApplyToPac) { 2415 TEST_F(ProxyServiceTest, BypassDoesntApplyToPac) {
(...skipping 28 matching lines...) Expand all
2446 2444
2447 // It should be trying to auto-detect first -- succeed the download. 2445 // It should be trying to auto-detect first -- succeed the download.
2448 EXPECT_TRUE(fetcher->has_pending_request()); 2446 EXPECT_TRUE(fetcher->has_pending_request());
2449 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url()); 2447 EXPECT_EQ(GURL("http://wpad/wpad.dat"), fetcher->pending_request_url());
2450 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2448 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
2451 2449
2452 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 2450 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
2453 factory->pending_requests()[0]->script_data()->utf16()); 2451 factory->pending_requests()[0]->script_data()->utf16());
2454 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2452 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2455 2453
2456 ASSERT_EQ(1u, resolver.pending_requests().size()); 2454 ASSERT_EQ(1u, resolver.pending_jobs().size());
2457 EXPECT_EQ(GURL("http://www.google.com"), 2455 EXPECT_EQ(GURL("http://www.google.com"), resolver.pending_jobs()[0]->url());
2458 resolver.pending_requests()[0]->url());
2459 2456
2460 // Complete the pending request. 2457 // Complete the pending request.
2461 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 2458 resolver.pending_jobs()[0]->results()->UseNamedProxy("request1:80");
2462 resolver.pending_requests()[0]->CompleteNow(OK); 2459 resolver.pending_jobs()[0]->CompleteNow(OK);
2463 2460
2464 // Verify that request ran as expected. 2461 // Verify that request ran as expected.
2465 EXPECT_EQ(OK, callback1.WaitForResult()); 2462 EXPECT_EQ(OK, callback1.WaitForResult());
2466 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2463 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2467 2464
2468 // Start another request, it should pickup the bypass item. 2465 // Start another request, it should pickup the bypass item.
2469 ProxyInfo info2; 2466 ProxyInfo info2;
2470 TestCompletionCallback callback2; 2467 TestCompletionCallback callback2;
2471 rv = service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info2, 2468 rv = service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info2,
2472 callback2.callback(), NULL, NULL, BoundNetLog()); 2469 callback2.callback(), NULL, NULL, BoundNetLog());
2473 EXPECT_EQ(ERR_IO_PENDING, rv); 2470 EXPECT_EQ(ERR_IO_PENDING, rv);
2474 2471
2475 ASSERT_EQ(1u, resolver.pending_requests().size()); 2472 ASSERT_EQ(1u, resolver.pending_jobs().size());
2476 EXPECT_EQ(GURL("http://www.google.com"), 2473 EXPECT_EQ(GURL("http://www.google.com"), resolver.pending_jobs()[0]->url());
2477 resolver.pending_requests()[0]->url());
2478 2474
2479 // Complete the pending request. 2475 // Complete the pending request.
2480 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 2476 resolver.pending_jobs()[0]->results()->UseNamedProxy("request2:80");
2481 resolver.pending_requests()[0]->CompleteNow(OK); 2477 resolver.pending_jobs()[0]->CompleteNow(OK);
2482 2478
2483 EXPECT_EQ(OK, callback2.WaitForResult()); 2479 EXPECT_EQ(OK, callback2.WaitForResult());
2484 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 2480 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
2485 } 2481 }
2486 2482
2487 // Delete the ProxyService while InitProxyResolver has an outstanding 2483 // Delete the ProxyService while InitProxyResolver has an outstanding
2488 // request to the script fetcher. When run under valgrind, should not 2484 // request to the script fetcher. When run under valgrind, should not
2489 // have any memory errors (used to be that the ProxyScriptFetcher was 2485 // have any memory errors (used to be that the ProxyScriptFetcher was
2490 // being deleted prior to the InitProxyResolver). 2486 // being deleted prior to the InitProxyResolver).
2491 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) { 2487 TEST_F(ProxyServiceTest, DeleteWhileInitProxyResolverHasOutstandingFetch) {
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
2593 service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info1, 2589 service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info1,
2594 callback1.callback(), NULL, NULL, BoundNetLog()); 2590 callback1.callback(), NULL, NULL, BoundNetLog());
2595 EXPECT_EQ(ERR_IO_PENDING, rv); 2591 EXPECT_EQ(ERR_IO_PENDING, rv);
2596 2592
2597 // Successfully set the autodetect script. 2593 // Successfully set the autodetect script.
2598 EXPECT_EQ(ProxyResolverScriptData::TYPE_AUTO_DETECT, 2594 EXPECT_EQ(ProxyResolverScriptData::TYPE_AUTO_DETECT,
2599 factory->pending_requests()[0]->script_data()->type()); 2595 factory->pending_requests()[0]->script_data()->type());
2600 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2596 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2601 2597
2602 // Complete the pending request. 2598 // Complete the pending request.
2603 ASSERT_EQ(1u, resolver.pending_requests().size()); 2599 ASSERT_EQ(1u, resolver.pending_jobs().size());
2604 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 2600 resolver.pending_jobs()[0]->results()->UseNamedProxy("request1:80");
2605 resolver.pending_requests()[0]->CompleteNow(OK); 2601 resolver.pending_jobs()[0]->CompleteNow(OK);
2606 2602
2607 // Verify that request ran as expected. 2603 // Verify that request ran as expected.
2608 EXPECT_EQ(OK, callback1.WaitForResult()); 2604 EXPECT_EQ(OK, callback1.WaitForResult());
2609 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2605 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2610 2606
2611 // Force the ProxyService to pull down a new proxy configuration. 2607 // Force the ProxyService to pull down a new proxy configuration.
2612 // (Even though the configuration isn't old/bad). 2608 // (Even though the configuration isn't old/bad).
2613 // 2609 //
2614 // This new configuration no longer has auto_detect set, so 2610 // This new configuration no longer has auto_detect set, so
2615 // requests should complete synchronously now as direct-connect. 2611 // jobs should complete synchronously now as direct-connect.
2616 config_service->SetConfig(ProxyConfig::CreateDirect()); 2612 config_service->SetConfig(ProxyConfig::CreateDirect());
2617 2613
2618 // Start another request -- the effective configuration has changed. 2614 // Start another request -- the effective configuration has changed.
2619 ProxyInfo info2; 2615 ProxyInfo info2;
2620 TestCompletionCallback callback2; 2616 TestCompletionCallback callback2;
2621 rv = service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info2, 2617 rv = service.ResolveProxy(GURL("http://www.google.com"), LOAD_NORMAL, &info2,
2622 callback2.callback(), NULL, NULL, BoundNetLog()); 2618 callback2.callback(), NULL, NULL, BoundNetLog());
2623 EXPECT_EQ(OK, rv); 2619 EXPECT_EQ(OK, rv);
2624 2620
2625 EXPECT_TRUE(info2.is_direct()); 2621 EXPECT_TRUE(info2.is_direct());
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2666 // ProxyScriptFetcher to invoke its completion callback, notifying it of 2662 // ProxyScriptFetcher to invoke its completion callback, notifying it of
2667 // PAC script download completion. 2663 // PAC script download completion.
2668 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2664 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
2669 2665
2670 // Now that the PAC script is downloaded, the request will have been sent to 2666 // Now that the PAC script is downloaded, the request will have been sent to
2671 // the proxy resolver. 2667 // the proxy resolver.
2672 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 2668 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
2673 factory->pending_requests()[0]->script_data()->utf16()); 2669 factory->pending_requests()[0]->script_data()->utf16());
2674 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2670 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2675 2671
2676 ASSERT_EQ(1u, resolver.pending_requests().size()); 2672 ASSERT_EQ(1u, resolver.pending_jobs().size());
2677 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); 2673 EXPECT_EQ(GURL("http://request1"), resolver.pending_jobs()[0]->url());
2678 2674
2679 // Complete the pending request. 2675 // Complete the pending request.
2680 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 2676 resolver.pending_jobs()[0]->results()->UseNamedProxy("request1:80");
2681 resolver.pending_requests()[0]->CompleteNow(OK); 2677 resolver.pending_jobs()[0]->CompleteNow(OK);
2682 2678
2683 // Wait for completion callback, and verify that the request ran as expected. 2679 // Wait for completion callback, and verify that the request ran as expected.
2684 EXPECT_EQ(OK, callback1.WaitForResult()); 2680 EXPECT_EQ(OK, callback1.WaitForResult());
2685 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2681 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2686 2682
2687 // Now simluate a change in the network. The ProxyConfigService is still 2683 // Now simluate a change in the network. The ProxyConfigService is still
2688 // going to return the same PAC URL as before, but this URL needs to be 2684 // going to return the same PAC URL as before, but this URL needs to be
2689 // refetched on the new network. 2685 // refetched on the new network.
2690 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); 2686 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
2691 base::MessageLoop::current()->RunUntilIdle(); // Notification happens async. 2687 base::MessageLoop::current()->RunUntilIdle(); // Notification happens async.
(...skipping 16 matching lines...) Expand all
2708 // Simulate the PAC script fetch as having completed (this time with 2704 // Simulate the PAC script fetch as having completed (this time with
2709 // different data). 2705 // different data).
2710 fetcher->NotifyFetchCompletion(OK, kValidPacScript2); 2706 fetcher->NotifyFetchCompletion(OK, kValidPacScript2);
2711 2707
2712 // Now that the PAC script is downloaded, the second request will have been 2708 // Now that the PAC script is downloaded, the second request will have been
2713 // sent to the proxy resolver. 2709 // sent to the proxy resolver.
2714 EXPECT_EQ(ASCIIToUTF16(kValidPacScript2), 2710 EXPECT_EQ(ASCIIToUTF16(kValidPacScript2),
2715 factory->pending_requests()[0]->script_data()->utf16()); 2711 factory->pending_requests()[0]->script_data()->utf16());
2716 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2712 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2717 2713
2718 ASSERT_EQ(1u, resolver.pending_requests().size()); 2714 ASSERT_EQ(1u, resolver.pending_jobs().size());
2719 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 2715 EXPECT_EQ(GURL("http://request2"), resolver.pending_jobs()[0]->url());
2720 2716
2721 // Complete the pending second request. 2717 // Complete the pending second request.
2722 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 2718 resolver.pending_jobs()[0]->results()->UseNamedProxy("request2:80");
2723 resolver.pending_requests()[0]->CompleteNow(OK); 2719 resolver.pending_jobs()[0]->CompleteNow(OK);
2724 2720
2725 // Wait for completion callback, and verify that the request ran as expected. 2721 // Wait for completion callback, and verify that the request ran as expected.
2726 EXPECT_EQ(OK, callback2.WaitForResult()); 2722 EXPECT_EQ(OK, callback2.WaitForResult());
2727 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 2723 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
2728 2724
2729 // Check that the expected events were output to the log stream. In particular 2725 // Check that the expected events were output to the log stream. In particular
2730 // PROXY_CONFIG_CHANGED should have only been emitted once (for the initial 2726 // PROXY_CONFIG_CHANGED should have only been emitted once (for the initial
2731 // setup), and NOT a second time when the IP address changed. 2727 // setup), and NOT a second time when the IP address changed.
2732 TestNetLogEntry::List entries; 2728 TestNetLogEntry::List entries;
2733 log.GetEntries(&entries); 2729 log.GetEntries(&entries);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
2826 // DIRECT. 2822 // DIRECT.
2827 2823
2828 // Start a second request. 2824 // Start a second request.
2829 ProxyInfo info2; 2825 ProxyInfo info2;
2830 TestCompletionCallback callback2; 2826 TestCompletionCallback callback2;
2831 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, 2827 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2,
2832 callback2.callback(), NULL, NULL, BoundNetLog()); 2828 callback2.callback(), NULL, NULL, BoundNetLog());
2833 EXPECT_EQ(ERR_IO_PENDING, rv); 2829 EXPECT_EQ(ERR_IO_PENDING, rv);
2834 2830
2835 // Check that it was sent to the resolver. 2831 // Check that it was sent to the resolver.
2836 ASSERT_EQ(1u, resolver.pending_requests().size()); 2832 ASSERT_EQ(1u, resolver.pending_jobs().size());
2837 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 2833 EXPECT_EQ(GURL("http://request2"), resolver.pending_jobs()[0]->url());
2838 2834
2839 // Complete the pending second request. 2835 // Complete the pending second request.
2840 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 2836 resolver.pending_jobs()[0]->results()->UseNamedProxy("request2:80");
2841 resolver.pending_requests()[0]->CompleteNow(OK); 2837 resolver.pending_jobs()[0]->CompleteNow(OK);
2842 2838
2843 // Wait for completion callback, and verify that the request ran as expected. 2839 // Wait for completion callback, and verify that the request ran as expected.
2844 EXPECT_EQ(OK, callback2.WaitForResult()); 2840 EXPECT_EQ(OK, callback2.WaitForResult());
2845 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 2841 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
2846 } 2842 }
2847 2843
2848 // This test verifies that the PAC script specified by the settings is 2844 // This test verifies that the PAC script specified by the settings is
2849 // periodically polled for changes. Specifically, if the initial fetch succeeds, 2845 // periodically polled for changes. Specifically, if the initial fetch succeeds,
2850 // however at a later time its *contents* change, we will eventually 2846 // however at a later time its *contents* change, we will eventually
2851 // re-configure the service to use the new script. 2847 // re-configure the service to use the new script.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2889 // ProxyScriptFetcher to invoke its completion callback, notifying it of 2885 // ProxyScriptFetcher to invoke its completion callback, notifying it of
2890 // PAC script download completion. 2886 // PAC script download completion.
2891 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2887 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
2892 2888
2893 // Now that the PAC script is downloaded, the request will have been sent to 2889 // Now that the PAC script is downloaded, the request will have been sent to
2894 // the proxy resolver. 2890 // the proxy resolver.
2895 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 2891 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
2896 factory->pending_requests()[0]->script_data()->utf16()); 2892 factory->pending_requests()[0]->script_data()->utf16());
2897 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2893 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2898 2894
2899 ASSERT_EQ(1u, resolver.pending_requests().size()); 2895 ASSERT_EQ(1u, resolver.pending_jobs().size());
2900 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); 2896 EXPECT_EQ(GURL("http://request1"), resolver.pending_jobs()[0]->url());
2901 2897
2902 // Complete the pending request. 2898 // Complete the pending request.
2903 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 2899 resolver.pending_jobs()[0]->results()->UseNamedProxy("request1:80");
2904 resolver.pending_requests()[0]->CompleteNow(OK); 2900 resolver.pending_jobs()[0]->CompleteNow(OK);
2905 2901
2906 // Wait for completion callback, and verify that the request ran as expected. 2902 // Wait for completion callback, and verify that the request ran as expected.
2907 EXPECT_EQ(OK, callback1.WaitForResult()); 2903 EXPECT_EQ(OK, callback1.WaitForResult());
2908 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 2904 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
2909 2905
2910 // At this point we have initialized the proxy service using a PAC script. 2906 // At this point we have initialized the proxy service using a PAC script.
2911 // 2907 //
2912 // A background task to periodically re-check the PAC script for validity will 2908 // A background task to periodically re-check the PAC script for validity will
2913 // have been started. We will now wait for the next download attempt to start. 2909 // have been started. We will now wait for the next download attempt to start.
2914 // 2910 //
2915 // Note that we shouldn't have to wait long here, since our test enables a 2911 // Note that we shouldn't have to wait long here, since our test enables a
2916 // special unit-test mode. 2912 // special unit-test mode.
2917 fetcher->WaitUntilFetch(); 2913 fetcher->WaitUntilFetch();
2918 2914
2919 ASSERT_TRUE(factory->pending_requests().empty()); 2915 ASSERT_TRUE(factory->pending_requests().empty());
2920 ASSERT_TRUE(resolver.pending_requests().empty()); 2916 ASSERT_TRUE(resolver.pending_jobs().empty());
2921 2917
2922 // Make sure that our background checker is trying to download the expected 2918 // Make sure that our background checker is trying to download the expected
2923 // PAC script (same one as before). This time we will simulate a successful 2919 // PAC script (same one as before). This time we will simulate a successful
2924 // download of a DIFFERENT script. 2920 // download of a DIFFERENT script.
2925 EXPECT_TRUE(fetcher->has_pending_request()); 2921 EXPECT_TRUE(fetcher->has_pending_request());
2926 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 2922 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
2927 fetcher->NotifyFetchCompletion(OK, kValidPacScript2); 2923 fetcher->NotifyFetchCompletion(OK, kValidPacScript2);
2928 2924
2929 base::MessageLoop::current()->RunUntilIdle(); 2925 base::MessageLoop::current()->RunUntilIdle();
2930 2926
2931 // Now that the PAC script is downloaded, it should be used to initialize the 2927 // Now that the PAC script is downloaded, it should be used to initialize the
2932 // ProxyResolver. Simulate a successful parse. 2928 // ProxyResolver. Simulate a successful parse.
2933 EXPECT_EQ(ASCIIToUTF16(kValidPacScript2), 2929 EXPECT_EQ(ASCIIToUTF16(kValidPacScript2),
2934 factory->pending_requests()[0]->script_data()->utf16()); 2930 factory->pending_requests()[0]->script_data()->utf16());
2935 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 2931 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
2936 2932
2937 // At this point the ProxyService should have re-configured itself to use the 2933 // At this point the ProxyService should have re-configured itself to use the
2938 // new PAC script. 2934 // new PAC script.
2939 2935
2940 // Start a second request. 2936 // Start a second request.
2941 ProxyInfo info2; 2937 ProxyInfo info2;
2942 TestCompletionCallback callback2; 2938 TestCompletionCallback callback2;
2943 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, 2939 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2,
2944 callback2.callback(), NULL, NULL, BoundNetLog()); 2940 callback2.callback(), NULL, NULL, BoundNetLog());
2945 EXPECT_EQ(ERR_IO_PENDING, rv); 2941 EXPECT_EQ(ERR_IO_PENDING, rv);
2946 2942
2947 // Check that it was sent to the resolver. 2943 // Check that it was sent to the resolver.
2948 ASSERT_EQ(1u, resolver.pending_requests().size()); 2944 ASSERT_EQ(1u, resolver.pending_jobs().size());
2949 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 2945 EXPECT_EQ(GURL("http://request2"), resolver.pending_jobs()[0]->url());
2950 2946
2951 // Complete the pending second request. 2947 // Complete the pending second request.
2952 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 2948 resolver.pending_jobs()[0]->results()->UseNamedProxy("request2:80");
2953 resolver.pending_requests()[0]->CompleteNow(OK); 2949 resolver.pending_jobs()[0]->CompleteNow(OK);
2954 2950
2955 // Wait for completion callback, and verify that the request ran as expected. 2951 // Wait for completion callback, and verify that the request ran as expected.
2956 EXPECT_EQ(OK, callback2.WaitForResult()); 2952 EXPECT_EQ(OK, callback2.WaitForResult());
2957 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 2953 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
2958 } 2954 }
2959 2955
2960 // This test verifies that the PAC script specified by the settings is 2956 // This test verifies that the PAC script specified by the settings is
2961 // periodically polled for changes. Specifically, if the initial fetch succeeds 2957 // periodically polled for changes. Specifically, if the initial fetch succeeds
2962 // and so does the next poll, however the contents of the downloaded script 2958 // and so does the next poll, however the contents of the downloaded script
2963 // have NOT changed, then we do not bother to re-initialize the proxy resolver. 2959 // have NOT changed, then we do not bother to re-initialize the proxy resolver.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3001 // ProxyScriptFetcher to invoke its completion callback, notifying it of 2997 // ProxyScriptFetcher to invoke its completion callback, notifying it of
3002 // PAC script download completion. 2998 // PAC script download completion.
3003 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 2999 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
3004 3000
3005 // Now that the PAC script is downloaded, the request will have been sent to 3001 // Now that the PAC script is downloaded, the request will have been sent to
3006 // the proxy resolver. 3002 // the proxy resolver.
3007 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 3003 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
3008 factory->pending_requests()[0]->script_data()->utf16()); 3004 factory->pending_requests()[0]->script_data()->utf16());
3009 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 3005 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
3010 3006
3011 ASSERT_EQ(1u, resolver.pending_requests().size()); 3007 ASSERT_EQ(1u, resolver.pending_jobs().size());
3012 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); 3008 EXPECT_EQ(GURL("http://request1"), resolver.pending_jobs()[0]->url());
3013 3009
3014 // Complete the pending request. 3010 // Complete the pending request.
3015 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 3011 resolver.pending_jobs()[0]->results()->UseNamedProxy("request1:80");
3016 resolver.pending_requests()[0]->CompleteNow(OK); 3012 resolver.pending_jobs()[0]->CompleteNow(OK);
3017 3013
3018 // Wait for completion callback, and verify that the request ran as expected. 3014 // Wait for completion callback, and verify that the request ran as expected.
3019 EXPECT_EQ(OK, callback1.WaitForResult()); 3015 EXPECT_EQ(OK, callback1.WaitForResult());
3020 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 3016 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
3021 3017
3022 // At this point we have initialized the proxy service using a PAC script. 3018 // At this point we have initialized the proxy service using a PAC script.
3023 // 3019 //
3024 // A background task to periodically re-check the PAC script for validity will 3020 // A background task to periodically re-check the PAC script for validity will
3025 // have been started. We will now wait for the next download attempt to start. 3021 // have been started. We will now wait for the next download attempt to start.
3026 // 3022 //
3027 // Note that we shouldn't have to wait long here, since our test enables a 3023 // Note that we shouldn't have to wait long here, since our test enables a
3028 // special unit-test mode. 3024 // special unit-test mode.
3029 fetcher->WaitUntilFetch(); 3025 fetcher->WaitUntilFetch();
3030 3026
3031 ASSERT_TRUE(factory->pending_requests().empty()); 3027 ASSERT_TRUE(factory->pending_requests().empty());
3032 ASSERT_TRUE(resolver.pending_requests().empty()); 3028 ASSERT_TRUE(resolver.pending_jobs().empty());
3033 3029
3034 // Make sure that our background checker is trying to download the expected 3030 // Make sure that our background checker is trying to download the expected
3035 // PAC script (same one as before). We will simulate the same response as 3031 // PAC script (same one as before). We will simulate the same response as
3036 // last time (i.e. the script is unchanged). 3032 // last time (i.e. the script is unchanged).
3037 EXPECT_TRUE(fetcher->has_pending_request()); 3033 EXPECT_TRUE(fetcher->has_pending_request());
3038 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 3034 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
3039 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 3035 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
3040 3036
3041 base::MessageLoop::current()->RunUntilIdle(); 3037 base::MessageLoop::current()->RunUntilIdle();
3042 3038
3043 ASSERT_TRUE(factory->pending_requests().empty()); 3039 ASSERT_TRUE(factory->pending_requests().empty());
3044 ASSERT_TRUE(resolver.pending_requests().empty()); 3040 ASSERT_TRUE(resolver.pending_jobs().empty());
3045 3041
3046 // At this point the ProxyService is still running the same PAC script as 3042 // At this point the ProxyService is still running the same PAC script as
3047 // before. 3043 // before.
3048 3044
3049 // Start a second request. 3045 // Start a second request.
3050 ProxyInfo info2; 3046 ProxyInfo info2;
3051 TestCompletionCallback callback2; 3047 TestCompletionCallback callback2;
3052 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, 3048 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2,
3053 callback2.callback(), NULL, NULL, BoundNetLog()); 3049 callback2.callback(), NULL, NULL, BoundNetLog());
3054 EXPECT_EQ(ERR_IO_PENDING, rv); 3050 EXPECT_EQ(ERR_IO_PENDING, rv);
3055 3051
3056 // Check that it was sent to the resolver. 3052 // Check that it was sent to the resolver.
3057 ASSERT_EQ(1u, resolver.pending_requests().size()); 3053 ASSERT_EQ(1u, resolver.pending_jobs().size());
3058 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 3054 EXPECT_EQ(GURL("http://request2"), resolver.pending_jobs()[0]->url());
3059 3055
3060 // Complete the pending second request. 3056 // Complete the pending second request.
3061 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 3057 resolver.pending_jobs()[0]->results()->UseNamedProxy("request2:80");
3062 resolver.pending_requests()[0]->CompleteNow(OK); 3058 resolver.pending_jobs()[0]->CompleteNow(OK);
3063 3059
3064 // Wait for completion callback, and verify that the request ran as expected. 3060 // Wait for completion callback, and verify that the request ran as expected.
3065 EXPECT_EQ(OK, callback2.WaitForResult()); 3061 EXPECT_EQ(OK, callback2.WaitForResult());
3066 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 3062 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
3067 } 3063 }
3068 3064
3069 // This test verifies that the PAC script specified by the settings is 3065 // This test verifies that the PAC script specified by the settings is
3070 // periodically polled for changes. Specifically, if the initial fetch succeeds, 3066 // periodically polled for changes. Specifically, if the initial fetch succeeds,
3071 // however at a later time it starts to fail, we should re-configure the 3067 // however at a later time it starts to fail, we should re-configure the
3072 // ProxyService to stop using that PAC script. 3068 // ProxyService to stop using that PAC script.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3110 // ProxyScriptFetcher to invoke its completion callback, notifying it of 3106 // ProxyScriptFetcher to invoke its completion callback, notifying it of
3111 // PAC script download completion. 3107 // PAC script download completion.
3112 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 3108 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
3113 3109
3114 // Now that the PAC script is downloaded, the request will have been sent to 3110 // Now that the PAC script is downloaded, the request will have been sent to
3115 // the proxy resolver. 3111 // the proxy resolver.
3116 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 3112 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
3117 factory->pending_requests()[0]->script_data()->utf16()); 3113 factory->pending_requests()[0]->script_data()->utf16());
3118 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 3114 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
3119 3115
3120 ASSERT_EQ(1u, resolver.pending_requests().size()); 3116 ASSERT_EQ(1u, resolver.pending_jobs().size());
3121 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); 3117 EXPECT_EQ(GURL("http://request1"), resolver.pending_jobs()[0]->url());
3122 3118
3123 // Complete the pending request. 3119 // Complete the pending request.
3124 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 3120 resolver.pending_jobs()[0]->results()->UseNamedProxy("request1:80");
3125 resolver.pending_requests()[0]->CompleteNow(OK); 3121 resolver.pending_jobs()[0]->CompleteNow(OK);
3126 3122
3127 // Wait for completion callback, and verify that the request ran as expected. 3123 // Wait for completion callback, and verify that the request ran as expected.
3128 EXPECT_EQ(OK, callback1.WaitForResult()); 3124 EXPECT_EQ(OK, callback1.WaitForResult());
3129 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 3125 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
3130 3126
3131 // At this point we have initialized the proxy service using a PAC script. 3127 // At this point we have initialized the proxy service using a PAC script.
3132 // 3128 //
3133 // A background task to periodically re-check the PAC script for validity will 3129 // A background task to periodically re-check the PAC script for validity will
3134 // have been started. We will now wait for the next download attempt to start. 3130 // have been started. We will now wait for the next download attempt to start.
3135 // 3131 //
3136 // Note that we shouldn't have to wait long here, since our test enables a 3132 // Note that we shouldn't have to wait long here, since our test enables a
3137 // special unit-test mode. 3133 // special unit-test mode.
3138 fetcher->WaitUntilFetch(); 3134 fetcher->WaitUntilFetch();
3139 3135
3140 ASSERT_TRUE(factory->pending_requests().empty()); 3136 ASSERT_TRUE(factory->pending_requests().empty());
3141 ASSERT_TRUE(resolver.pending_requests().empty()); 3137 ASSERT_TRUE(resolver.pending_jobs().empty());
3142 3138
3143 // Make sure that our background checker is trying to download the expected 3139 // Make sure that our background checker is trying to download the expected
3144 // PAC script (same one as before). This time we will simulate a failure 3140 // PAC script (same one as before). This time we will simulate a failure
3145 // to download the script. 3141 // to download the script.
3146 EXPECT_TRUE(fetcher->has_pending_request()); 3142 EXPECT_TRUE(fetcher->has_pending_request());
3147 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 3143 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
3148 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string()); 3144 fetcher->NotifyFetchCompletion(ERR_FAILED, std::string());
3149 3145
3150 base::MessageLoop::current()->RunUntilIdle(); 3146 base::MessageLoop::current()->RunUntilIdle();
3151 3147
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
3264 // ProxyScriptFetcher to invoke its completion callback, notifying it of 3260 // ProxyScriptFetcher to invoke its completion callback, notifying it of
3265 // PAC script download completion. 3261 // PAC script download completion.
3266 fetcher->NotifyFetchCompletion(OK, kValidPacScript1); 3262 fetcher->NotifyFetchCompletion(OK, kValidPacScript1);
3267 3263
3268 // Now that the PAC script is downloaded, the request will have been sent to 3264 // Now that the PAC script is downloaded, the request will have been sent to
3269 // the proxy resolver. 3265 // the proxy resolver.
3270 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1), 3266 EXPECT_EQ(ASCIIToUTF16(kValidPacScript1),
3271 factory->pending_requests()[0]->script_data()->utf16()); 3267 factory->pending_requests()[0]->script_data()->utf16());
3272 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver); 3268 factory->pending_requests()[0]->CompleteNowWithForwarder(OK, &resolver);
3273 3269
3274 ASSERT_EQ(1u, resolver.pending_requests().size()); 3270 ASSERT_EQ(1u, resolver.pending_jobs().size());
3275 EXPECT_EQ(GURL("http://request1"), resolver.pending_requests()[0]->url()); 3271 EXPECT_EQ(GURL("http://request1"), resolver.pending_jobs()[0]->url());
3276 3272
3277 // Complete the pending request. 3273 // Complete the pending request.
3278 resolver.pending_requests()[0]->results()->UseNamedProxy("request1:80"); 3274 resolver.pending_jobs()[0]->results()->UseNamedProxy("request1:80");
3279 resolver.pending_requests()[0]->CompleteNow(OK); 3275 resolver.pending_jobs()[0]->CompleteNow(OK);
3280 3276
3281 // Wait for completion callback, and verify that the request ran as expected. 3277 // Wait for completion callback, and verify that the request ran as expected.
3282 EXPECT_EQ(OK, callback1.WaitForResult()); 3278 EXPECT_EQ(OK, callback1.WaitForResult());
3283 EXPECT_EQ("request1:80", info1.proxy_server().ToURI()); 3279 EXPECT_EQ("request1:80", info1.proxy_server().ToURI());
3284 3280
3285 // At this point we have initialized the proxy service using a PAC script. 3281 // At this point we have initialized the proxy service using a PAC script.
3286 // Our PAC poller is set to update ONLY in response to network activity, 3282 // Our PAC poller is set to update ONLY in response to network activity,
3287 // (i.e. another call to ResolveProxy()). 3283 // (i.e. another call to ResolveProxy()).
3288 3284
3289 ASSERT_FALSE(fetcher->has_pending_request()); 3285 ASSERT_FALSE(fetcher->has_pending_request());
3290 ASSERT_TRUE(factory->pending_requests().empty()); 3286 ASSERT_TRUE(factory->pending_requests().empty());
3291 ASSERT_TRUE(resolver.pending_requests().empty()); 3287 ASSERT_TRUE(resolver.pending_jobs().empty());
3292 3288
3293 // Start a second request. 3289 // Start a second request.
3294 ProxyInfo info2; 3290 ProxyInfo info2;
3295 TestCompletionCallback callback2; 3291 TestCompletionCallback callback2;
3296 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2, 3292 rv = service.ResolveProxy(GURL("http://request2"), LOAD_NORMAL, &info2,
3297 callback2.callback(), NULL, NULL, BoundNetLog()); 3293 callback2.callback(), NULL, NULL, BoundNetLog());
3298 EXPECT_EQ(ERR_IO_PENDING, rv); 3294 EXPECT_EQ(ERR_IO_PENDING, rv);
3299 3295
3300 // This request should have sent work to the resolver; complete it. 3296 // This request should have sent work to the resolver; complete it.
3301 ASSERT_EQ(1u, resolver.pending_requests().size()); 3297 ASSERT_EQ(1u, resolver.pending_jobs().size());
3302 EXPECT_EQ(GURL("http://request2"), resolver.pending_requests()[0]->url()); 3298 EXPECT_EQ(GURL("http://request2"), resolver.pending_jobs()[0]->url());
3303 resolver.pending_requests()[0]->results()->UseNamedProxy("request2:80"); 3299 resolver.pending_jobs()[0]->results()->UseNamedProxy("request2:80");
3304 resolver.pending_requests()[0]->CompleteNow(OK); 3300 resolver.pending_jobs()[0]->CompleteNow(OK);
3305 3301
3306 EXPECT_EQ(OK, callback2.WaitForResult()); 3302 EXPECT_EQ(OK, callback2.WaitForResult());
3307 EXPECT_EQ("request2:80", info2.proxy_server().ToURI()); 3303 EXPECT_EQ("request2:80", info2.proxy_server().ToURI());
3308 3304
3309 // In response to getting that resolve request, the poller should have 3305 // In response to getting that resolve request, the poller should have
3310 // started the next poll, and made it as far as to request the download. 3306 // started the next poll, and made it as far as to request the download.
3311 3307
3312 EXPECT_TRUE(fetcher->has_pending_request()); 3308 EXPECT_TRUE(fetcher->has_pending_request());
3313 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url()); 3309 EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
3314 3310
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
3376 url, LOAD_NORMAL, &info, NULL, log.bound()); 3372 url, LOAD_NORMAL, &info, NULL, log.bound());
3377 EXPECT_TRUE(synchronous_success); 3373 EXPECT_TRUE(synchronous_success);
3378 EXPECT_FALSE(info.is_direct()); 3374 EXPECT_FALSE(info.is_direct());
3379 EXPECT_EQ("foopy1", info.proxy_server().host_port_pair().host()); 3375 EXPECT_EQ("foopy1", info.proxy_server().host_port_pair().host());
3380 3376
3381 // No request should have been queued. 3377 // No request should have been queued.
3382 EXPECT_EQ(0u, factory->pending_requests().size()); 3378 EXPECT_EQ(0u, factory->pending_requests().size());
3383 } 3379 }
3384 3380
3385 } // namespace net 3381 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698