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

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

Issue 1076083002: Shut down proxy resolver utility processes when no longer needed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@proxy-service-with-factory-restart
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/proxy/proxy_resolver_mojo.cc ('k') | net/proxy/proxy_service_mojo.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_resolver_mojo.h" 5 #include "net/proxy/proxy_resolver_mojo.h"
6 6
7 #include <list> 7 #include <list>
8 #include <map> 8 #include <map>
9 #include <queue> 9 #include <queue>
10 #include <string> 10 #include <string>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
14 #include "base/memory/scoped_vector.h" 14 #include "base/memory/scoped_vector.h"
15 #include "base/run_loop.h" 15 #include "base/run_loop.h"
16 #include "base/stl_util.h" 16 #include "base/stl_util.h"
17 #include "mojo/common/common_type_converters.h" 17 #include "mojo/common/common_type_converters.h"
18 #include "net/base/net_errors.h" 18 #include "net/base/net_errors.h"
19 #include "net/base/test_completion_callback.h" 19 #include "net/base/test_completion_callback.h"
20 #include "net/log/net_log.h" 20 #include "net/log/net_log.h"
21 #include "net/proxy/mojo_proxy_resolver_factory.h"
21 #include "net/proxy/mojo_proxy_type_converters.h" 22 #include "net/proxy/mojo_proxy_type_converters.h"
22 #include "net/proxy/proxy_info.h" 23 #include "net/proxy/proxy_info.h"
23 #include "net/proxy/proxy_resolver_script_data.h" 24 #include "net/proxy/proxy_resolver_script_data.h"
24 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
25 #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h" 26 #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h"
26 #include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h" 27 #include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h"
27 #include "url/gurl.h" 28 #include "url/gurl.h"
28 29
29 namespace net { 30 namespace net {
30 31
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 break; 396 break;
396 case CreateProxyResolverAction::WAIT_FOR_CLIENT_DISCONNECT: 397 case CreateProxyResolverAction::WAIT_FOR_CLIENT_DISCONNECT:
397 ASSERT_FALSE(client.WaitForIncomingMethodCall()); 398 ASSERT_FALSE(client.WaitForIncomingMethodCall());
398 break; 399 break;
399 } 400 }
400 WakeWaiter(); 401 WakeWaiter();
401 } 402 }
402 403
403 } // namespace 404 } // namespace
404 405
405 class ProxyResolverMojoTest : public testing::Test { 406 class ProxyResolverMojoTest : public testing::Test,
407 public MojoProxyResolverFactory {
406 public: 408 public:
407 void SetUp() override { 409 void SetUp() override {
408 mock_proxy_resolver_factory_.reset(new MockMojoProxyResolverFactory( 410 mock_proxy_resolver_factory_.reset(new MockMojoProxyResolverFactory(
409 &mock_proxy_resolver_, mojo::GetProxy(&factory_ptr_))); 411 &mock_proxy_resolver_, mojo::GetProxy(&factory_ptr_)));
410 proxy_resolver_factory_mojo_.reset( 412 proxy_resolver_factory_mojo_.reset(
411 new ProxyResolverFactoryMojo(factory_ptr_.get(), nullptr)); 413 new ProxyResolverFactoryMojo(this, nullptr));
412 } 414 }
413 415
414 scoped_ptr<Request> MakeRequest(const GURL& url) { 416 scoped_ptr<Request> MakeRequest(const GURL& url) {
415 return make_scoped_ptr(new Request(proxy_resolver_mojo_.get(), url)); 417 return make_scoped_ptr(new Request(proxy_resolver_mojo_.get(), url));
416 } 418 }
417 419
420 scoped_ptr<base::ScopedClosureRunner> CreateResolver(
421 const mojo::String& pac_script,
422 mojo::InterfaceRequest<interfaces::ProxyResolver> req,
423 interfaces::HostResolverPtr host_resolver,
424 interfaces::ProxyResolverFactoryRequestClientPtr client) override {
425 factory_ptr_->CreateResolver(pac_script, req.Pass(), host_resolver.Pass(),
426 client.Pass());
427 return make_scoped_ptr(
428 new base::ScopedClosureRunner(on_delete_callback_.closure()));
429 }
430
418 mojo::Array<interfaces::ProxyServerPtr> ProxyServersFromPacString( 431 mojo::Array<interfaces::ProxyServerPtr> ProxyServersFromPacString(
419 const std::string& pac_string) { 432 const std::string& pac_string) {
420 ProxyInfo proxy_info; 433 ProxyInfo proxy_info;
421 proxy_info.UsePacString(pac_string); 434 proxy_info.UsePacString(pac_string);
422 435
423 return mojo::Array<interfaces::ProxyServerPtr>::From( 436 return mojo::Array<interfaces::ProxyServerPtr>::From(
424 proxy_info.proxy_list().GetAll()); 437 proxy_info.proxy_list().GetAll());
425 } 438 }
426 439
427 void CreateProxyResolver() { 440 void CreateProxyResolver() {
428 mock_proxy_resolver_factory_->AddCreateProxyResolverAction( 441 mock_proxy_resolver_factory_->AddCreateProxyResolverAction(
429 CreateProxyResolverAction::ReturnResult(kScriptData, OK)); 442 CreateProxyResolverAction::ReturnResult(kScriptData, OK));
430 TestCompletionCallback callback; 443 TestCompletionCallback callback;
431 scoped_refptr<ProxyResolverScriptData> pac_script( 444 scoped_refptr<ProxyResolverScriptData> pac_script(
432 ProxyResolverScriptData::FromUTF8(kScriptData)); 445 ProxyResolverScriptData::FromUTF8(kScriptData));
433 scoped_ptr<ProxyResolverFactory::Request> request; 446 scoped_ptr<ProxyResolverFactory::Request> request;
434 ASSERT_EQ( 447 ASSERT_EQ(
435 OK, 448 OK,
436 callback.GetResult(proxy_resolver_factory_mojo_->CreateProxyResolver( 449 callback.GetResult(proxy_resolver_factory_mojo_->CreateProxyResolver(
437 pac_script, &proxy_resolver_mojo_, callback.callback(), &request))); 450 pac_script, &proxy_resolver_mojo_, callback.callback(), &request)));
438 EXPECT_TRUE(request); 451 EXPECT_TRUE(request);
439 ASSERT_TRUE(proxy_resolver_mojo_); 452 ASSERT_TRUE(proxy_resolver_mojo_);
440 } 453 }
441 454
455 void DeleteProxyResolverCallback(const CompletionCallback& callback,
456 int result) {
457 proxy_resolver_mojo_.reset();
458 callback.Run(result);
459 }
460
442 scoped_ptr<MockMojoProxyResolverFactory> mock_proxy_resolver_factory_; 461 scoped_ptr<MockMojoProxyResolverFactory> mock_proxy_resolver_factory_;
443 interfaces::ProxyResolverFactoryPtr factory_ptr_; 462 interfaces::ProxyResolverFactoryPtr factory_ptr_;
444 scoped_ptr<ProxyResolverFactory> proxy_resolver_factory_mojo_; 463 scoped_ptr<ProxyResolverFactory> proxy_resolver_factory_mojo_;
445 464
446 MockMojoProxyResolver mock_proxy_resolver_; 465 MockMojoProxyResolver mock_proxy_resolver_;
447 scoped_ptr<ProxyResolver> proxy_resolver_mojo_; 466 scoped_ptr<ProxyResolver> proxy_resolver_mojo_;
467 TestClosure on_delete_callback_;
448 }; 468 };
449 469
450 TEST_F(ProxyResolverMojoTest, CreateProxyResolver) { 470 TEST_F(ProxyResolverMojoTest, CreateProxyResolver) {
451 CreateProxyResolver(); 471 CreateProxyResolver();
452 } 472 }
453 473
454 TEST_F(ProxyResolverMojoTest, CreateProxyResolver_Empty) { 474 TEST_F(ProxyResolverMojoTest, CreateProxyResolver_Empty) {
455 TestCompletionCallback callback; 475 TestCompletionCallback callback;
456 scoped_refptr<ProxyResolverScriptData> pac_script( 476 scoped_refptr<ProxyResolverScriptData> pac_script(
457 ProxyResolverScriptData::FromUTF8("")); 477 ProxyResolverScriptData::FromUTF8(""));
(...skipping 24 matching lines...) Expand all
482 502
483 TestCompletionCallback callback; 503 TestCompletionCallback callback;
484 scoped_refptr<ProxyResolverScriptData> pac_script( 504 scoped_refptr<ProxyResolverScriptData> pac_script(
485 ProxyResolverScriptData::FromUTF8(kScriptData)); 505 ProxyResolverScriptData::FromUTF8(kScriptData));
486 scoped_ptr<ProxyResolverFactory::Request> request; 506 scoped_ptr<ProxyResolverFactory::Request> request;
487 EXPECT_EQ( 507 EXPECT_EQ(
488 ERR_PAC_STATUS_NOT_OK, 508 ERR_PAC_STATUS_NOT_OK,
489 callback.GetResult(proxy_resolver_factory_mojo_->CreateProxyResolver( 509 callback.GetResult(proxy_resolver_factory_mojo_->CreateProxyResolver(
490 pac_script, &proxy_resolver_mojo_, callback.callback(), &request))); 510 pac_script, &proxy_resolver_mojo_, callback.callback(), &request)));
491 EXPECT_TRUE(request); 511 EXPECT_TRUE(request);
512 on_delete_callback_.WaitForResult();
492 513
493 // A second attempt succeeds. 514 // A second attempt succeeds.
494 CreateProxyResolver(); 515 CreateProxyResolver();
495 } 516 }
496 517
497 TEST_F(ProxyResolverMojoTest, CreateProxyResolver_BothDisconnected) { 518 TEST_F(ProxyResolverMojoTest, CreateProxyResolver_BothDisconnected) {
498 mock_proxy_resolver_factory_->AddCreateProxyResolverAction( 519 mock_proxy_resolver_factory_->AddCreateProxyResolverAction(
499 CreateProxyResolverAction::DropBoth(kScriptData)); 520 CreateProxyResolverAction::DropBoth(kScriptData));
500 521
501 scoped_refptr<ProxyResolverScriptData> pac_script( 522 scoped_refptr<ProxyResolverScriptData> pac_script(
(...skipping 28 matching lines...) Expand all
530 551
531 scoped_refptr<ProxyResolverScriptData> pac_script( 552 scoped_refptr<ProxyResolverScriptData> pac_script(
532 ProxyResolverScriptData::FromUTF8(kScriptData)); 553 ProxyResolverScriptData::FromUTF8(kScriptData));
533 scoped_ptr<ProxyResolverFactory::Request> request; 554 scoped_ptr<ProxyResolverFactory::Request> request;
534 TestCompletionCallback callback; 555 TestCompletionCallback callback;
535 EXPECT_EQ( 556 EXPECT_EQ(
536 ERR_PAC_SCRIPT_TERMINATED, 557 ERR_PAC_SCRIPT_TERMINATED,
537 callback.GetResult(proxy_resolver_factory_mojo_->CreateProxyResolver( 558 callback.GetResult(proxy_resolver_factory_mojo_->CreateProxyResolver(
538 pac_script, &proxy_resolver_mojo_, callback.callback(), &request))); 559 pac_script, &proxy_resolver_mojo_, callback.callback(), &request)));
539 EXPECT_TRUE(request); 560 EXPECT_TRUE(request);
561 on_delete_callback_.WaitForResult();
540 } 562 }
541 563
542 TEST_F(ProxyResolverMojoTest, CreateProxyResolver_Cancel) { 564 TEST_F(ProxyResolverMojoTest, CreateProxyResolver_Cancel) {
543 mock_proxy_resolver_factory_->AddCreateProxyResolverAction( 565 mock_proxy_resolver_factory_->AddCreateProxyResolverAction(
544 CreateProxyResolverAction::WaitForClientDisconnect(kScriptData)); 566 CreateProxyResolverAction::WaitForClientDisconnect(kScriptData));
545 567
546 scoped_refptr<ProxyResolverScriptData> pac_script( 568 scoped_refptr<ProxyResolverScriptData> pac_script(
547 ProxyResolverScriptData::FromUTF8(kScriptData)); 569 ProxyResolverScriptData::FromUTF8(kScriptData));
548 scoped_ptr<ProxyResolverFactory::Request> request; 570 scoped_ptr<ProxyResolverFactory::Request> request;
549 TestCompletionCallback callback; 571 TestCompletionCallback callback;
550 EXPECT_EQ(ERR_IO_PENDING, proxy_resolver_factory_mojo_->CreateProxyResolver( 572 EXPECT_EQ(ERR_IO_PENDING, proxy_resolver_factory_mojo_->CreateProxyResolver(
551 pac_script, &proxy_resolver_mojo_, 573 pac_script, &proxy_resolver_mojo_,
552 callback.callback(), &request)); 574 callback.callback(), &request));
553 ASSERT_TRUE(request); 575 ASSERT_TRUE(request);
554 request.reset(); 576 request.reset();
555 577
556 // The Mojo request is still made. 578 // The Mojo request is still made.
557 mock_proxy_resolver_factory_->WaitForNextRequest(); 579 mock_proxy_resolver_factory_->WaitForNextRequest();
580 on_delete_callback_.WaitForResult();
558 } 581 }
559 582
560 TEST_F(ProxyResolverMojoTest, GetProxyForURL) { 583 TEST_F(ProxyResolverMojoTest, GetProxyForURL) {
561 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( 584 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers(
562 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); 585 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT")));
563 CreateProxyResolver(); 586 CreateProxyResolver();
564 587
565 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); 588 scoped_ptr<Request> request(MakeRequest(GURL(kExampleUrl)));
566 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); 589 EXPECT_EQ(ERR_IO_PENDING, request->Resolve());
567 EXPECT_EQ(OK, request->WaitForResult()); 590 EXPECT_EQ(OK, request->WaitForResult());
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 mock_proxy_resolver_.AddGetProxyAction( 689 mock_proxy_resolver_.AddGetProxyAction(
667 GetProxyForUrlAction::DropRequest(GURL(kExampleUrl))); 690 GetProxyForUrlAction::DropRequest(GURL(kExampleUrl)));
668 CreateProxyResolver(); 691 CreateProxyResolver();
669 692
670 scoped_ptr<Request> request1(MakeRequest(GURL(kExampleUrl))); 693 scoped_ptr<Request> request1(MakeRequest(GURL(kExampleUrl)));
671 EXPECT_EQ(ERR_IO_PENDING, request1->Resolve()); 694 EXPECT_EQ(ERR_IO_PENDING, request1->Resolve());
672 695
673 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request1->WaitForResult()); 696 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request1->WaitForResult());
674 } 697 }
675 698
699 TEST_F(ProxyResolverMojoTest, GetProxyForURL_DeleteInCallback) {
700 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers(
701 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT")));
702 CreateProxyResolver();
703
704 ProxyInfo results;
705 TestCompletionCallback callback;
706 ProxyResolver::RequestHandle handle;
707 BoundNetLog net_log;
708 EXPECT_EQ(OK,
709 callback.GetResult(proxy_resolver_mojo_->GetProxyForURL(
710 GURL(kExampleUrl), &results,
711 base::Bind(&ProxyResolverMojoTest::DeleteProxyResolverCallback,
712 base::Unretained(this), callback.callback()),
713 &handle, net_log)));
714 on_delete_callback_.WaitForResult();
715 }
716
717 TEST_F(ProxyResolverMojoTest, GetProxyForURL_DeleteInCallbackFromDisconnect) {
718 mock_proxy_resolver_.AddGetProxyAction(
719 GetProxyForUrlAction::Disconnect(GURL(kExampleUrl)));
720 CreateProxyResolver();
721
722 ProxyInfo results;
723 TestCompletionCallback callback;
724 ProxyResolver::RequestHandle handle;
725 BoundNetLog net_log;
726 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED,
727 callback.GetResult(proxy_resolver_mojo_->GetProxyForURL(
728 GURL(kExampleUrl), &results,
729 base::Bind(&ProxyResolverMojoTest::DeleteProxyResolverCallback,
730 base::Unretained(this), callback.callback()),
731 &handle, net_log)));
732 on_delete_callback_.WaitForResult();
733 }
734
735 TEST_F(ProxyResolverMojoTest, DeleteResolver) {
736 CreateProxyResolver();
737 proxy_resolver_mojo_.reset();
738 on_delete_callback_.WaitForResult();
739 }
676 } // namespace net 740 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_resolver_mojo.cc ('k') | net/proxy/proxy_service_mojo.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698