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