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

Side by Side Diff: mojo/edk/system/remote_message_pipe_unittest.cc

Issue 1412283002: Convert mojo::system::Dispatcher to use our new refcounting stuff (instead of base's). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: no change Created 5 years, 2 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <stdint.h> 5 #include <stdint.h>
6 #include <stdio.h> 6 #include <stdio.h>
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 HandleSignalsState hss; 614 HandleSignalsState hss;
615 uint32_t context = 0; 615 uint32_t context = 0;
616 616
617 RefPtr<ChannelEndpoint> ep0; 617 RefPtr<ChannelEndpoint> ep0;
618 auto mp0 = MessagePipe::CreateLocalProxy(&ep0); 618 auto mp0 = MessagePipe::CreateLocalProxy(&ep0);
619 RefPtr<ChannelEndpoint> ep1; 619 RefPtr<ChannelEndpoint> ep1;
620 auto mp1 = MessagePipe::CreateProxyLocal(&ep1); 620 auto mp1 = MessagePipe::CreateProxyLocal(&ep1);
621 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1)); 621 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1));
622 622
623 // We'll try to pass this dispatcher. 623 // We'll try to pass this dispatcher.
624 scoped_refptr<MessagePipeDispatcher> dispatcher = 624 auto dispatcher = MessagePipeDispatcher::Create(
625 MessagePipeDispatcher::Create( 625 MessagePipeDispatcher::kDefaultCreateOptions);
626 MessagePipeDispatcher::kDefaultCreateOptions);
627 auto local_mp = MessagePipe::CreateLocalLocal(); 626 auto local_mp = MessagePipe::CreateLocalLocal();
628 dispatcher->Init(local_mp.Clone(), 0); 627 dispatcher->Init(local_mp.Clone(), 0);
629 628
630 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 629 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
631 // it later, it might already be readable.) 630 // it later, it might already be readable.)
632 waiter.Init(); 631 waiter.Init();
633 ASSERT_EQ( 632 ASSERT_EQ(
634 MOJO_RESULT_OK, 633 MOJO_RESULT_OK,
635 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 634 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr));
636 635
637 // Write to MP 0, port 0. 636 // Write to MP 0, port 0.
638 { 637 {
639 DispatcherTransport transport( 638 DispatcherTransport transport(
640 test::DispatcherTryStartTransport(dispatcher.get())); 639 test::DispatcherTryStartTransport(dispatcher.get()));
641 EXPECT_TRUE(transport.is_valid()); 640 EXPECT_TRUE(transport.is_valid());
642 641
643 std::vector<DispatcherTransport> transports; 642 std::vector<DispatcherTransport> transports;
644 transports.push_back(transport); 643 transports.push_back(transport);
645 EXPECT_EQ( 644 EXPECT_EQ(
646 MOJO_RESULT_OK, 645 MOJO_RESULT_OK,
647 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), 646 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello),
648 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); 647 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE));
649 transport.End(); 648 transport.End();
650 649
651 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 650 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
652 // |dispatcher| is destroyed. 651 // |dispatcher| is destroyed.
653 EXPECT_TRUE(dispatcher->HasOneRef()); 652 dispatcher->AssertHasOneRef();
654 dispatcher = nullptr; 653 dispatcher = nullptr;
655 } 654 }
656 655
657 // Wait. 656 // Wait.
658 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 657 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
659 EXPECT_EQ(123u, context); 658 EXPECT_EQ(123u, context);
660 hss = HandleSignalsState(); 659 hss = HandleSignalsState();
661 mp1->RemoveAwakable(1, &waiter, &hss); 660 mp1->RemoveAwakable(1, &waiter, &hss);
662 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 661 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
663 hss.satisfied_signals); 662 hss.satisfied_signals);
664 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 663 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
665 664
666 // Read from MP 1, port 1. 665 // Read from MP 1, port 1.
667 char read_buffer[100] = {0}; 666 char read_buffer[100] = {0};
668 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 667 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
669 DispatcherVector read_dispatchers; 668 DispatcherVector read_dispatchers;
670 uint32_t read_num_dispatchers = 10; // Maximum to get. 669 uint32_t read_num_dispatchers = 10; // Maximum to get.
671 EXPECT_EQ( 670 EXPECT_EQ(
672 MOJO_RESULT_OK, 671 MOJO_RESULT_OK,
673 mp1->ReadMessage(1, UserPointer<void>(read_buffer), 672 mp1->ReadMessage(1, UserPointer<void>(read_buffer),
674 MakeUserPointer(&read_buffer_size), &read_dispatchers, 673 MakeUserPointer(&read_buffer_size), &read_dispatchers,
675 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); 674 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE));
676 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 675 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
677 EXPECT_STREQ(kHello, read_buffer); 676 EXPECT_STREQ(kHello, read_buffer);
678 EXPECT_EQ(1u, read_dispatchers.size()); 677 EXPECT_EQ(1u, read_dispatchers.size());
679 EXPECT_EQ(1u, read_num_dispatchers); 678 EXPECT_EQ(1u, read_num_dispatchers);
680 ASSERT_TRUE(read_dispatchers[0]); 679 ASSERT_TRUE(read_dispatchers[0]);
681 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); 680 read_dispatchers[0]->AssertHasOneRef();
682 681
683 EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType()); 682 EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType());
684 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); 683 dispatcher = RefPtr<MessagePipeDispatcher>(
684 static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()));
685 685
686 // Add the waiter now, before it becomes readable to avoid a race. 686 // Add the waiter now, before it becomes readable to avoid a race.
687 waiter.Init(); 687 waiter.Init();
688 ASSERT_EQ(MOJO_RESULT_OK, 688 ASSERT_EQ(MOJO_RESULT_OK,
689 dispatcher->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, 689 dispatcher->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456,
690 nullptr)); 690 nullptr));
691 691
692 // Write to "local_mp", port 1. 692 // Write to "local_mp", port 1.
693 EXPECT_EQ( 693 EXPECT_EQ(
694 MOJO_RESULT_OK, 694 MOJO_RESULT_OK,
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 } 759 }
760 760
761 TEST_F(RemoteMessagePipeTest, HandlePassingHalfClosed) { 761 TEST_F(RemoteMessagePipeTest, HandlePassingHalfClosed) {
762 static const char kHello[] = "hello"; 762 static const char kHello[] = "hello";
763 static const char kWorld[] = "world!"; 763 static const char kWorld[] = "world!";
764 Waiter waiter; 764 Waiter waiter;
765 HandleSignalsState hss; 765 HandleSignalsState hss;
766 uint32_t context = 0; 766 uint32_t context = 0;
767 767
768 // We'll try to pass this dispatcher. 768 // We'll try to pass this dispatcher.
769 scoped_refptr<MessagePipeDispatcher> dispatcher = 769 auto dispatcher = MessagePipeDispatcher::Create(
770 MessagePipeDispatcher::Create( 770 MessagePipeDispatcher::kDefaultCreateOptions);
771 MessagePipeDispatcher::kDefaultCreateOptions);
772 auto local_mp = MessagePipe::CreateLocalLocal(); 771 auto local_mp = MessagePipe::CreateLocalLocal();
773 dispatcher->Init(local_mp.Clone(), 0); 772 dispatcher->Init(local_mp.Clone(), 0);
774 773
775 hss = local_mp->GetHandleSignalsState(0); 774 hss = local_mp->GetHandleSignalsState(0);
776 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 775 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals);
777 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 776 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
778 // Write to the other end (|local_mp|, port 1), and then close it. 777 // Write to the other end (|local_mp|, port 1), and then close it.
779 EXPECT_EQ( 778 EXPECT_EQ(
780 MOJO_RESULT_OK, 779 MOJO_RESULT_OK,
781 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello), 780 local_mp->WriteMessage(1, UserPointer<const void>(kHello), sizeof(kHello),
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 std::vector<DispatcherTransport> transports; 817 std::vector<DispatcherTransport> transports;
819 transports.push_back(transport); 818 transports.push_back(transport);
820 EXPECT_EQ( 819 EXPECT_EQ(
821 MOJO_RESULT_OK, 820 MOJO_RESULT_OK,
822 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), 821 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello),
823 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); 822 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE));
824 transport.End(); 823 transport.End();
825 824
826 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 825 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
827 // |dispatcher| is destroyed. 826 // |dispatcher| is destroyed.
828 EXPECT_TRUE(dispatcher->HasOneRef()); 827 dispatcher->AssertHasOneRef();
829 dispatcher = nullptr; 828 dispatcher = nullptr;
830 } 829 }
831 830
832 // Wait. 831 // Wait.
833 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 832 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
834 EXPECT_EQ(123u, context); 833 EXPECT_EQ(123u, context);
835 hss = HandleSignalsState(); 834 hss = HandleSignalsState();
836 mp1->RemoveAwakable(1, &waiter, &hss); 835 mp1->RemoveAwakable(1, &waiter, &hss);
837 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 836 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
838 hss.satisfied_signals); 837 hss.satisfied_signals);
839 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 838 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
840 839
841 // Read from MP 1, port 1. 840 // Read from MP 1, port 1.
842 char read_buffer[100] = {0}; 841 char read_buffer[100] = {0};
843 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 842 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
844 DispatcherVector read_dispatchers; 843 DispatcherVector read_dispatchers;
845 uint32_t read_num_dispatchers = 10; // Maximum to get. 844 uint32_t read_num_dispatchers = 10; // Maximum to get.
846 EXPECT_EQ( 845 EXPECT_EQ(
847 MOJO_RESULT_OK, 846 MOJO_RESULT_OK,
848 mp1->ReadMessage(1, UserPointer<void>(read_buffer), 847 mp1->ReadMessage(1, UserPointer<void>(read_buffer),
849 MakeUserPointer(&read_buffer_size), &read_dispatchers, 848 MakeUserPointer(&read_buffer_size), &read_dispatchers,
850 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); 849 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE));
851 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 850 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
852 EXPECT_STREQ(kHello, read_buffer); 851 EXPECT_STREQ(kHello, read_buffer);
853 EXPECT_EQ(1u, read_dispatchers.size()); 852 EXPECT_EQ(1u, read_dispatchers.size());
854 EXPECT_EQ(1u, read_num_dispatchers); 853 EXPECT_EQ(1u, read_num_dispatchers);
855 ASSERT_TRUE(read_dispatchers[0]); 854 ASSERT_TRUE(read_dispatchers[0]);
856 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); 855 read_dispatchers[0]->AssertHasOneRef();
857 856
858 EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType()); 857 EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType());
859 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); 858 dispatcher = RefPtr<MessagePipeDispatcher>(
859 static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()));
860 860
861 // |dispatcher| should already be readable and not writable. 861 // |dispatcher| should already be readable and not writable.
862 hss = dispatcher->GetHandleSignalsState(); 862 hss = dispatcher->GetHandleSignalsState();
863 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 863 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
864 hss.satisfied_signals); 864 hss.satisfied_signals);
865 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 865 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED,
866 hss.satisfiable_signals); 866 hss.satisfiable_signals);
867 // So read from it. 867 // So read from it.
868 memset(read_buffer, 0, sizeof(read_buffer)); 868 memset(read_buffer, 0, sizeof(read_buffer));
869 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 869 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 HandleSignalsState hss; 905 HandleSignalsState hss;
906 uint32_t context = 0; 906 uint32_t context = 0;
907 907
908 RefPtr<ChannelEndpoint> ep0; 908 RefPtr<ChannelEndpoint> ep0;
909 auto mp0 = MessagePipe::CreateLocalProxy(&ep0); 909 auto mp0 = MessagePipe::CreateLocalProxy(&ep0);
910 RefPtr<ChannelEndpoint> ep1; 910 RefPtr<ChannelEndpoint> ep1;
911 auto mp1 = MessagePipe::CreateProxyLocal(&ep1); 911 auto mp1 = MessagePipe::CreateProxyLocal(&ep1);
912 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1)); 912 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1));
913 913
914 // We'll try to pass this dispatcher. 914 // We'll try to pass this dispatcher.
915 scoped_refptr<SharedBufferDispatcher> dispatcher; 915 MojoResult result = MOJO_RESULT_INTERNAL;
916 EXPECT_EQ(MOJO_RESULT_OK, SharedBufferDispatcher::Create( 916 auto dispatcher = SharedBufferDispatcher::Create(
917 platform_support(), 917 platform_support(), SharedBufferDispatcher::kDefaultCreateOptions, 100,
918 SharedBufferDispatcher::kDefaultCreateOptions, 918 &result);
919 100, &dispatcher)); 919 EXPECT_EQ(MOJO_RESULT_OK, result);
920 ASSERT_TRUE(dispatcher); 920 ASSERT_TRUE(dispatcher);
921 921
922 // Make a mapping. 922 // Make a mapping.
923 std::unique_ptr<embedder::PlatformSharedBufferMapping> mapping0; 923 std::unique_ptr<embedder::PlatformSharedBufferMapping> mapping0;
924 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->MapBuffer( 924 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->MapBuffer(
925 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping0)); 925 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping0));
926 ASSERT_TRUE(mapping0); 926 ASSERT_TRUE(mapping0);
927 ASSERT_TRUE(mapping0->GetBase()); 927 ASSERT_TRUE(mapping0->GetBase());
928 ASSERT_EQ(100u, mapping0->GetLength()); 928 ASSERT_EQ(100u, mapping0->GetLength());
929 static_cast<char*>(mapping0->GetBase())[0] = 'A'; 929 static_cast<char*>(mapping0->GetBase())[0] = 'A';
(...skipping 16 matching lines...) Expand all
946 std::vector<DispatcherTransport> transports; 946 std::vector<DispatcherTransport> transports;
947 transports.push_back(transport); 947 transports.push_back(transport);
948 EXPECT_EQ( 948 EXPECT_EQ(
949 MOJO_RESULT_OK, 949 MOJO_RESULT_OK,
950 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), 950 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello),
951 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); 951 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE));
952 transport.End(); 952 transport.End();
953 953
954 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 954 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
955 // |dispatcher| is destroyed. 955 // |dispatcher| is destroyed.
956 EXPECT_TRUE(dispatcher->HasOneRef()); 956 dispatcher->AssertHasOneRef();
957 dispatcher = nullptr; 957 dispatcher = nullptr;
958 } 958 }
959 959
960 // Wait. 960 // Wait.
961 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 961 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
962 EXPECT_EQ(123u, context); 962 EXPECT_EQ(123u, context);
963 hss = HandleSignalsState(); 963 hss = HandleSignalsState();
964 mp1->RemoveAwakable(1, &waiter, &hss); 964 mp1->RemoveAwakable(1, &waiter, &hss);
965 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 965 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
966 hss.satisfied_signals); 966 hss.satisfied_signals);
967 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 967 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
968 968
969 // Read from MP 1, port 1. 969 // Read from MP 1, port 1.
970 char read_buffer[100] = {0}; 970 char read_buffer[100] = {0};
971 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 971 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
972 DispatcherVector read_dispatchers; 972 DispatcherVector read_dispatchers;
973 uint32_t read_num_dispatchers = 10; // Maximum to get. 973 uint32_t read_num_dispatchers = 10; // Maximum to get.
974 EXPECT_EQ( 974 EXPECT_EQ(
975 MOJO_RESULT_OK, 975 MOJO_RESULT_OK,
976 mp1->ReadMessage(1, UserPointer<void>(read_buffer), 976 mp1->ReadMessage(1, UserPointer<void>(read_buffer),
977 MakeUserPointer(&read_buffer_size), &read_dispatchers, 977 MakeUserPointer(&read_buffer_size), &read_dispatchers,
978 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); 978 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE));
979 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 979 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
980 EXPECT_STREQ(kHello, read_buffer); 980 EXPECT_STREQ(kHello, read_buffer);
981 EXPECT_EQ(1u, read_dispatchers.size()); 981 EXPECT_EQ(1u, read_dispatchers.size());
982 EXPECT_EQ(1u, read_num_dispatchers); 982 EXPECT_EQ(1u, read_num_dispatchers);
983 ASSERT_TRUE(read_dispatchers[0]); 983 ASSERT_TRUE(read_dispatchers[0]);
984 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); 984 read_dispatchers[0]->AssertHasOneRef();
985 985
986 EXPECT_EQ(Dispatcher::Type::SHARED_BUFFER, read_dispatchers[0]->GetType()); 986 EXPECT_EQ(Dispatcher::Type::SHARED_BUFFER, read_dispatchers[0]->GetType());
987 dispatcher = static_cast<SharedBufferDispatcher*>(read_dispatchers[0].get()); 987 dispatcher = RefPtr<SharedBufferDispatcher>(
988 static_cast<SharedBufferDispatcher*>(read_dispatchers[0].get()));
988 989
989 // Make another mapping. 990 // Make another mapping.
990 std::unique_ptr<embedder::PlatformSharedBufferMapping> mapping1; 991 std::unique_ptr<embedder::PlatformSharedBufferMapping> mapping1;
991 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->MapBuffer( 992 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->MapBuffer(
992 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping1)); 993 0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping1));
993 ASSERT_TRUE(mapping1); 994 ASSERT_TRUE(mapping1);
994 ASSERT_TRUE(mapping1->GetBase()); 995 ASSERT_TRUE(mapping1->GetBase());
995 ASSERT_EQ(100u, mapping1->GetLength()); 996 ASSERT_EQ(100u, mapping1->GetLength());
996 EXPECT_NE(mapping1->GetBase(), mapping0->GetBase()); 997 EXPECT_NE(mapping1->GetBase(), mapping0->GetBase());
997 EXPECT_EQ('A', static_cast<char*>(mapping1->GetBase())[0]); 998 EXPECT_EQ('A', static_cast<char*>(mapping1->GetBase())[0]);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 RefPtr<ChannelEndpoint> ep0; 1030 RefPtr<ChannelEndpoint> ep0;
1030 auto mp0 = MessagePipe::CreateLocalProxy(&ep0); 1031 auto mp0 = MessagePipe::CreateLocalProxy(&ep0);
1031 RefPtr<ChannelEndpoint> ep1; 1032 RefPtr<ChannelEndpoint> ep1;
1032 auto mp1 = MessagePipe::CreateProxyLocal(&ep1); 1033 auto mp1 = MessagePipe::CreateProxyLocal(&ep1);
1033 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1)); 1034 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1));
1034 1035
1035 util::ScopedFILE fp(test_dir.CreateFile()); 1036 util::ScopedFILE fp(test_dir.CreateFile());
1036 EXPECT_EQ(sizeof(kHello), fwrite(kHello, 1, sizeof(kHello), fp.get())); 1037 EXPECT_EQ(sizeof(kHello), fwrite(kHello, 1, sizeof(kHello), fp.get()));
1037 // We'll try to pass this dispatcher, which will cause a |PlatformHandle| to 1038 // We'll try to pass this dispatcher, which will cause a |PlatformHandle| to
1038 // be passed. 1039 // be passed.
1039 scoped_refptr<PlatformHandleDispatcher> dispatcher = 1040 auto dispatcher = PlatformHandleDispatcher::Create(
1040 PlatformHandleDispatcher::Create( 1041 mojo::test::PlatformHandleFromFILE(fp.Pass()));
1041 mojo::test::PlatformHandleFromFILE(fp.Pass()));
1042 1042
1043 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 1043 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
1044 // it later, it might already be readable.) 1044 // it later, it might already be readable.)
1045 waiter.Init(); 1045 waiter.Init();
1046 ASSERT_EQ( 1046 ASSERT_EQ(
1047 MOJO_RESULT_OK, 1047 MOJO_RESULT_OK,
1048 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 1048 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr));
1049 1049
1050 // Write to MP 0, port 0. 1050 // Write to MP 0, port 0.
1051 { 1051 {
1052 DispatcherTransport transport( 1052 DispatcherTransport transport(
1053 test::DispatcherTryStartTransport(dispatcher.get())); 1053 test::DispatcherTryStartTransport(dispatcher.get()));
1054 EXPECT_TRUE(transport.is_valid()); 1054 EXPECT_TRUE(transport.is_valid());
1055 1055
1056 std::vector<DispatcherTransport> transports; 1056 std::vector<DispatcherTransport> transports;
1057 transports.push_back(transport); 1057 transports.push_back(transport);
1058 EXPECT_EQ( 1058 EXPECT_EQ(
1059 MOJO_RESULT_OK, 1059 MOJO_RESULT_OK,
1060 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld), 1060 mp0->WriteMessage(0, UserPointer<const void>(kWorld), sizeof(kWorld),
1061 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); 1061 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE));
1062 transport.End(); 1062 transport.End();
1063 1063
1064 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 1064 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
1065 // |dispatcher| is destroyed. 1065 // |dispatcher| is destroyed.
1066 EXPECT_TRUE(dispatcher->HasOneRef()); 1066 dispatcher->AssertHasOneRef();
1067 dispatcher = nullptr; 1067 dispatcher = nullptr;
1068 } 1068 }
1069 1069
1070 // Wait. 1070 // Wait.
1071 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 1071 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
1072 EXPECT_EQ(123u, context); 1072 EXPECT_EQ(123u, context);
1073 hss = HandleSignalsState(); 1073 hss = HandleSignalsState();
1074 mp1->RemoveAwakable(1, &waiter, &hss); 1074 mp1->RemoveAwakable(1, &waiter, &hss);
1075 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1075 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1076 hss.satisfied_signals); 1076 hss.satisfied_signals);
1077 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 1077 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
1078 1078
1079 // Read from MP 1, port 1. 1079 // Read from MP 1, port 1.
1080 char read_buffer[100] = {0}; 1080 char read_buffer[100] = {0};
1081 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 1081 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
1082 DispatcherVector read_dispatchers; 1082 DispatcherVector read_dispatchers;
1083 uint32_t read_num_dispatchers = 10; // Maximum to get. 1083 uint32_t read_num_dispatchers = 10; // Maximum to get.
1084 EXPECT_EQ( 1084 EXPECT_EQ(
1085 MOJO_RESULT_OK, 1085 MOJO_RESULT_OK,
1086 mp1->ReadMessage(1, UserPointer<void>(read_buffer), 1086 mp1->ReadMessage(1, UserPointer<void>(read_buffer),
1087 MakeUserPointer(&read_buffer_size), &read_dispatchers, 1087 MakeUserPointer(&read_buffer_size), &read_dispatchers,
1088 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); 1088 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE));
1089 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); 1089 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size));
1090 EXPECT_STREQ(kWorld, read_buffer); 1090 EXPECT_STREQ(kWorld, read_buffer);
1091 EXPECT_EQ(1u, read_dispatchers.size()); 1091 EXPECT_EQ(1u, read_dispatchers.size());
1092 EXPECT_EQ(1u, read_num_dispatchers); 1092 EXPECT_EQ(1u, read_num_dispatchers);
1093 ASSERT_TRUE(read_dispatchers[0]); 1093 ASSERT_TRUE(read_dispatchers[0]);
1094 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); 1094 read_dispatchers[0]->AssertHasOneRef();
1095 1095
1096 EXPECT_EQ(Dispatcher::Type::PLATFORM_HANDLE, read_dispatchers[0]->GetType()); 1096 EXPECT_EQ(Dispatcher::Type::PLATFORM_HANDLE, read_dispatchers[0]->GetType());
1097 dispatcher = 1097 dispatcher = RefPtr<PlatformHandleDispatcher>(
1098 static_cast<PlatformHandleDispatcher*>(read_dispatchers[0].get()); 1098 static_cast<PlatformHandleDispatcher*>(read_dispatchers[0].get()));
1099 1099
1100 embedder::ScopedPlatformHandle h = dispatcher->PassPlatformHandle().Pass(); 1100 embedder::ScopedPlatformHandle h = dispatcher->PassPlatformHandle().Pass();
1101 EXPECT_TRUE(h.is_valid()); 1101 EXPECT_TRUE(h.is_valid());
1102 1102
1103 fp = mojo::test::FILEFromPlatformHandle(h.Pass(), "rb").Pass(); 1103 fp = mojo::test::FILEFromPlatformHandle(h.Pass(), "rb").Pass();
1104 EXPECT_FALSE(h.is_valid()); 1104 EXPECT_FALSE(h.is_valid());
1105 EXPECT_TRUE(fp); 1105 EXPECT_TRUE(fp);
1106 1106
1107 rewind(fp.get()); 1107 rewind(fp.get());
1108 memset(read_buffer, 0, sizeof(read_buffer)); 1108 memset(read_buffer, 0, sizeof(read_buffer));
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1165 HandleSignalsState hss; 1165 HandleSignalsState hss;
1166 uint32_t context = 0; 1166 uint32_t context = 0;
1167 1167
1168 RefPtr<ChannelEndpoint> ep0; 1168 RefPtr<ChannelEndpoint> ep0;
1169 auto mp0 = MessagePipe::CreateLocalProxy(&ep0); 1169 auto mp0 = MessagePipe::CreateLocalProxy(&ep0);
1170 RefPtr<ChannelEndpoint> ep1; 1170 RefPtr<ChannelEndpoint> ep1;
1171 auto mp1 = MessagePipe::CreateProxyLocal(&ep1); 1171 auto mp1 = MessagePipe::CreateProxyLocal(&ep1);
1172 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1)); 1172 BootstrapChannelEndpoints(std::move(ep0), std::move(ep1));
1173 1173
1174 // We'll try to pass this dispatcher. 1174 // We'll try to pass this dispatcher.
1175 scoped_refptr<MessagePipeDispatcher> dispatcher = 1175 auto dispatcher = MessagePipeDispatcher::Create(
1176 MessagePipeDispatcher::Create( 1176 MessagePipeDispatcher::kDefaultCreateOptions);
1177 MessagePipeDispatcher::kDefaultCreateOptions);
1178 auto local_mp = MessagePipe::CreateLocalLocal(); 1177 auto local_mp = MessagePipe::CreateLocalLocal();
1179 dispatcher->Init(local_mp.Clone(), 0); 1178 dispatcher->Init(local_mp.Clone(), 0);
1180 1179
1181 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do 1180 // Prepare to wait on MP 1, port 1. (Add the waiter now. Otherwise, if we do
1182 // it later, it might already be readable.) 1181 // it later, it might already be readable.)
1183 waiter.Init(); 1182 waiter.Init();
1184 ASSERT_EQ( 1183 ASSERT_EQ(
1185 MOJO_RESULT_OK, 1184 MOJO_RESULT_OK,
1186 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr)); 1185 mp1->AddAwakable(1, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, nullptr));
1187 1186
1188 // Write to MP 0, port 0. 1187 // Write to MP 0, port 0.
1189 { 1188 {
1190 DispatcherTransport transport( 1189 DispatcherTransport transport(
1191 test::DispatcherTryStartTransport(dispatcher.get())); 1190 test::DispatcherTryStartTransport(dispatcher.get()));
1192 EXPECT_TRUE(transport.is_valid()); 1191 EXPECT_TRUE(transport.is_valid());
1193 1192
1194 std::vector<DispatcherTransport> transports; 1193 std::vector<DispatcherTransport> transports;
1195 transports.push_back(transport); 1194 transports.push_back(transport);
1196 EXPECT_EQ( 1195 EXPECT_EQ(
1197 MOJO_RESULT_OK, 1196 MOJO_RESULT_OK,
1198 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello), 1197 mp0->WriteMessage(0, UserPointer<const void>(kHello), sizeof(kHello),
1199 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); 1198 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE));
1200 transport.End(); 1199 transport.End();
1201 1200
1202 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 1201 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
1203 // |dispatcher| is destroyed. 1202 // |dispatcher| is destroyed.
1204 EXPECT_TRUE(dispatcher->HasOneRef()); 1203 dispatcher->AssertHasOneRef();
1205 dispatcher = nullptr; 1204 dispatcher = nullptr;
1206 } 1205 }
1207 1206
1208 // Wait. 1207 // Wait.
1209 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 1208 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
1210 EXPECT_EQ(123u, context); 1209 EXPECT_EQ(123u, context);
1211 hss = HandleSignalsState(); 1210 hss = HandleSignalsState();
1212 mp1->RemoveAwakable(1, &waiter, &hss); 1211 mp1->RemoveAwakable(1, &waiter, &hss);
1213 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1212 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1214 hss.satisfied_signals); 1213 hss.satisfied_signals);
1215 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 1214 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
1216 1215
1217 // Read from MP 1, port 1. 1216 // Read from MP 1, port 1.
1218 char read_buffer[100] = {0}; 1217 char read_buffer[100] = {0};
1219 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 1218 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
1220 DispatcherVector read_dispatchers; 1219 DispatcherVector read_dispatchers;
1221 uint32_t read_num_dispatchers = 10; // Maximum to get. 1220 uint32_t read_num_dispatchers = 10; // Maximum to get.
1222 EXPECT_EQ( 1221 EXPECT_EQ(
1223 MOJO_RESULT_OK, 1222 MOJO_RESULT_OK,
1224 mp1->ReadMessage(1, UserPointer<void>(read_buffer), 1223 mp1->ReadMessage(1, UserPointer<void>(read_buffer),
1225 MakeUserPointer(&read_buffer_size), &read_dispatchers, 1224 MakeUserPointer(&read_buffer_size), &read_dispatchers,
1226 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); 1225 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE));
1227 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); 1226 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size));
1228 EXPECT_STREQ(kHello, read_buffer); 1227 EXPECT_STREQ(kHello, read_buffer);
1229 EXPECT_EQ(1u, read_dispatchers.size()); 1228 EXPECT_EQ(1u, read_dispatchers.size());
1230 EXPECT_EQ(1u, read_num_dispatchers); 1229 EXPECT_EQ(1u, read_num_dispatchers);
1231 ASSERT_TRUE(read_dispatchers[0]); 1230 ASSERT_TRUE(read_dispatchers[0]);
1232 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); 1231 read_dispatchers[0]->AssertHasOneRef();
1233 1232
1234 EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType()); 1233 EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType());
1235 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); 1234 dispatcher = RefPtr<MessagePipeDispatcher>(
1235 static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()));
1236 read_dispatchers.clear(); 1236 read_dispatchers.clear();
1237 1237
1238 // Now pass it back. 1238 // Now pass it back.
1239 1239
1240 // Prepare to wait on MP 0, port 0. (Add the waiter now. Otherwise, if we do 1240 // Prepare to wait on MP 0, port 0. (Add the waiter now. Otherwise, if we do
1241 // it later, it might already be readable.) 1241 // it later, it might already be readable.)
1242 waiter.Init(); 1242 waiter.Init();
1243 ASSERT_EQ( 1243 ASSERT_EQ(
1244 MOJO_RESULT_OK, 1244 MOJO_RESULT_OK,
1245 mp0->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr)); 1245 mp0->AddAwakable(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, nullptr));
1246 1246
1247 // Write to MP 1, port 1. 1247 // Write to MP 1, port 1.
1248 { 1248 {
1249 DispatcherTransport transport( 1249 DispatcherTransport transport(
1250 test::DispatcherTryStartTransport(dispatcher.get())); 1250 test::DispatcherTryStartTransport(dispatcher.get()));
1251 EXPECT_TRUE(transport.is_valid()); 1251 EXPECT_TRUE(transport.is_valid());
1252 1252
1253 std::vector<DispatcherTransport> transports; 1253 std::vector<DispatcherTransport> transports;
1254 transports.push_back(transport); 1254 transports.push_back(transport);
1255 EXPECT_EQ( 1255 EXPECT_EQ(
1256 MOJO_RESULT_OK, 1256 MOJO_RESULT_OK,
1257 mp1->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld), 1257 mp1->WriteMessage(1, UserPointer<const void>(kWorld), sizeof(kWorld),
1258 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE)); 1258 &transports, MOJO_WRITE_MESSAGE_FLAG_NONE));
1259 transport.End(); 1259 transport.End();
1260 1260
1261 // |dispatcher| should have been closed. This is |DCHECK()|ed when the 1261 // |dispatcher| should have been closed. This is |DCHECK()|ed when the
1262 // |dispatcher| is destroyed. 1262 // |dispatcher| is destroyed.
1263 EXPECT_TRUE(dispatcher->HasOneRef()); 1263 dispatcher->AssertHasOneRef();
1264 dispatcher = nullptr; 1264 dispatcher = nullptr;
1265 } 1265 }
1266 1266
1267 // Wait. 1267 // Wait.
1268 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context)); 1268 EXPECT_EQ(MOJO_RESULT_OK, waiter.Wait(MOJO_DEADLINE_INDEFINITE, &context));
1269 EXPECT_EQ(456u, context); 1269 EXPECT_EQ(456u, context);
1270 hss = HandleSignalsState(); 1270 hss = HandleSignalsState();
1271 mp0->RemoveAwakable(0, &waiter, &hss); 1271 mp0->RemoveAwakable(0, &waiter, &hss);
1272 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE, 1272 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_WRITABLE,
1273 hss.satisfied_signals); 1273 hss.satisfied_signals);
1274 EXPECT_EQ(kAllSignals, hss.satisfiable_signals); 1274 EXPECT_EQ(kAllSignals, hss.satisfiable_signals);
1275 1275
1276 // Read from MP 0, port 0. 1276 // Read from MP 0, port 0.
1277 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 1277 read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
1278 read_num_dispatchers = 10; // Maximum to get. 1278 read_num_dispatchers = 10; // Maximum to get.
1279 EXPECT_EQ( 1279 EXPECT_EQ(
1280 MOJO_RESULT_OK, 1280 MOJO_RESULT_OK,
1281 mp0->ReadMessage(0, UserPointer<void>(read_buffer), 1281 mp0->ReadMessage(0, UserPointer<void>(read_buffer),
1282 MakeUserPointer(&read_buffer_size), &read_dispatchers, 1282 MakeUserPointer(&read_buffer_size), &read_dispatchers,
1283 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE)); 1283 &read_num_dispatchers, MOJO_READ_MESSAGE_FLAG_NONE));
1284 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); 1284 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size));
1285 EXPECT_STREQ(kWorld, read_buffer); 1285 EXPECT_STREQ(kWorld, read_buffer);
1286 EXPECT_EQ(1u, read_dispatchers.size()); 1286 EXPECT_EQ(1u, read_dispatchers.size());
1287 EXPECT_EQ(1u, read_num_dispatchers); 1287 EXPECT_EQ(1u, read_num_dispatchers);
1288 ASSERT_TRUE(read_dispatchers[0]); 1288 ASSERT_TRUE(read_dispatchers[0]);
1289 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); 1289 read_dispatchers[0]->AssertHasOneRef();
1290 1290
1291 EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType()); 1291 EXPECT_EQ(Dispatcher::Type::MESSAGE_PIPE, read_dispatchers[0]->GetType());
1292 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); 1292 dispatcher = RefPtr<MessagePipeDispatcher>(
1293 static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()));
1293 read_dispatchers.clear(); 1294 read_dispatchers.clear();
1294 1295
1295 // Add the waiter now, before it becomes readable to avoid a race. 1296 // Add the waiter now, before it becomes readable to avoid a race.
1296 waiter.Init(); 1297 waiter.Init();
1297 ASSERT_EQ(MOJO_RESULT_OK, 1298 ASSERT_EQ(MOJO_RESULT_OK,
1298 dispatcher->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 789, 1299 dispatcher->AddAwakable(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 789,
1299 nullptr)); 1300 nullptr));
1300 1301
1301 // Write to "local_mp", port 1. 1302 // Write to "local_mp", port 1.
1302 EXPECT_EQ( 1303 EXPECT_EQ(
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1360 mp0->Close(0); 1361 mp0->Close(0);
1361 mp1->Close(1); 1362 mp1->Close(1);
1362 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); 1363 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close());
1363 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed. 1364 // Note that |local_mp|'s port 0 belong to |dispatcher|, which was closed.
1364 local_mp->Close(1); 1365 local_mp->Close(1);
1365 } 1366 }
1366 1367
1367 } // namespace 1368 } // namespace
1368 } // namespace system 1369 } // namespace system
1369 } // namespace mojo 1370 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/remote_data_pipe_impl_unittest.cc ('k') | mojo/edk/system/shared_buffer_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698