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

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

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

Powered by Google App Engine
This is Rietveld 408576698