Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/proxy/proxy_service.h" | 5 #include "net/proxy/proxy_service.h" |
| 6 | 6 |
| 7 #include <cstdarg> | 7 #include <cstdarg> |
| 8 #include <string> | |
| 8 #include <vector> | 9 #include <vector> |
| 9 | 10 |
| 10 #include "base/format_macros.h" | 11 #include "base/format_macros.h" |
| 11 #include "base/logging.h" | 12 #include "base/logging.h" |
| 12 #include "base/macros.h" | 13 #include "base/macros.h" |
| 13 #include "base/strings/string_util.h" | 14 #include "base/strings/string_util.h" |
| 14 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
| 15 #include "net/base/load_flags.h" | 16 #include "net/base/load_flags.h" |
| 16 #include "net/base/net_errors.h" | 17 #include "net/base/net_errors.h" |
| 17 #include "net/base/proxy_delegate.h" | 18 #include "net/base/proxy_delegate.h" |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |