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

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