OLD | NEW |
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 <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); | 102 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); |
103 | 103 |
104 embedder::PlatformChannelPair channel_pair; | 104 embedder::PlatformChannelPair channel_pair; |
105 platform_handles_[0] = channel_pair.PassServerHandle(); | 105 platform_handles_[0] = channel_pair.PassServerHandle(); |
106 platform_handles_[1] = channel_pair.PassClientHandle(); | 106 platform_handles_[1] = channel_pair.PassClientHandle(); |
107 } | 107 } |
108 | 108 |
109 void TearDownOnIOThread() { | 109 void TearDownOnIOThread() { |
110 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); | 110 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); |
111 | 111 |
112 if (channels_[0]) { | 112 if (channels_[0].get()) { |
113 channels_[0]->Shutdown(); | 113 channels_[0]->Shutdown(); |
114 channels_[0] = NULL; | 114 channels_[0] = NULL; |
115 } | 115 } |
116 if (channels_[1]) { | 116 if (channels_[1].get()) { |
117 channels_[1]->Shutdown(); | 117 channels_[1]->Shutdown(); |
118 channels_[1] = NULL; | 118 channels_[1] = NULL; |
119 } | 119 } |
120 } | 120 } |
121 | 121 |
122 void CreateAndInitChannel(unsigned channel_index) { | 122 void CreateAndInitChannel(unsigned channel_index) { |
123 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); | 123 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); |
124 CHECK(channel_index == 0 || channel_index == 1); | 124 CHECK(channel_index == 0 || channel_index == 1); |
125 CHECK(!channels_[channel_index]); | 125 CHECK(!channels_[channel_index].get()); |
126 | 126 |
127 channels_[channel_index] = new Channel(&platform_support_); | 127 channels_[channel_index] = new Channel(&platform_support_); |
128 CHECK(channels_[channel_index]->Init( | 128 CHECK(channels_[channel_index]->Init( |
129 RawChannel::Create(platform_handles_[channel_index].Pass()))); | 129 RawChannel::Create(platform_handles_[channel_index].Pass()))); |
130 } | 130 } |
131 | 131 |
132 void ConnectMessagePipesOnIOThread(scoped_refptr<MessagePipe> mp0, | 132 void ConnectMessagePipesOnIOThread(scoped_refptr<MessagePipe> mp0, |
133 scoped_refptr<MessagePipe> mp1) { | 133 scoped_refptr<MessagePipe> mp1) { |
134 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); | 134 CHECK_EQ(base::MessageLoop::current(), io_thread()->message_loop()); |
135 | 135 |
136 if (!channels_[0]) | 136 if (!channels_[0].get()) |
137 CreateAndInitChannel(0); | 137 CreateAndInitChannel(0); |
138 if (!channels_[1]) | 138 if (!channels_[1].get()) |
139 CreateAndInitChannel(1); | 139 CreateAndInitChannel(1); |
140 | 140 |
141 MessageInTransit::EndpointId local_id0 = | 141 MessageInTransit::EndpointId local_id0 = |
142 channels_[0]->AttachMessagePipeEndpoint(mp0, 1); | 142 channels_[0]->AttachMessagePipeEndpoint(mp0, 1); |
143 MessageInTransit::EndpointId local_id1 = | 143 MessageInTransit::EndpointId local_id1 = |
144 channels_[1]->AttachMessagePipeEndpoint(mp1, 0); | 144 channels_[1]->AttachMessagePipeEndpoint(mp1, 0); |
145 | 145 |
146 CHECK(channels_[0]->RunMessagePipeEndpoint(local_id0, local_id1)); | 146 CHECK(channels_[0]->RunMessagePipeEndpoint(local_id0, local_id1)); |
147 CHECK(channels_[1]->RunMessagePipeEndpoint(local_id1, local_id0)); | 147 CHECK(channels_[1]->RunMessagePipeEndpoint(local_id1, local_id0)); |
148 } | 148 } |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
584 mp1->ReadMessage(1, | 584 mp1->ReadMessage(1, |
585 UserPointer<void>(read_buffer), | 585 UserPointer<void>(read_buffer), |
586 MakeUserPointer(&read_buffer_size), | 586 MakeUserPointer(&read_buffer_size), |
587 &read_dispatchers, | 587 &read_dispatchers, |
588 &read_num_dispatchers, | 588 &read_num_dispatchers, |
589 MOJO_READ_MESSAGE_FLAG_NONE)); | 589 MOJO_READ_MESSAGE_FLAG_NONE)); |
590 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 590 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
591 EXPECT_STREQ(kHello, read_buffer); | 591 EXPECT_STREQ(kHello, read_buffer); |
592 EXPECT_EQ(1u, read_dispatchers.size()); | 592 EXPECT_EQ(1u, read_dispatchers.size()); |
593 EXPECT_EQ(1u, read_num_dispatchers); | 593 EXPECT_EQ(1u, read_num_dispatchers); |
594 ASSERT_TRUE(read_dispatchers[0]); | 594 ASSERT_TRUE(read_dispatchers[0].get()); |
595 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 595 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
596 | 596 |
597 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); | 597 EXPECT_EQ(Dispatcher::kTypeMessagePipe, read_dispatchers[0]->GetType()); |
598 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); | 598 dispatcher = static_cast<MessagePipeDispatcher*>(read_dispatchers[0].get()); |
599 | 599 |
600 // Add the waiter now, before it becomes readable to avoid a race. | 600 // Add the waiter now, before it becomes readable to avoid a race. |
601 waiter.Init(); | 601 waiter.Init(); |
602 ASSERT_EQ( | 602 ASSERT_EQ( |
603 MOJO_RESULT_OK, | 603 MOJO_RESULT_OK, |
604 dispatcher->AddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, NULL)); | 604 dispatcher->AddWaiter(&waiter, MOJO_HANDLE_SIGNAL_READABLE, 456, NULL)); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 ConnectMessagePipes(mp0, mp1); | 704 ConnectMessagePipes(mp0, mp1); |
705 | 705 |
706 // We'll try to pass this dispatcher. | 706 // We'll try to pass this dispatcher. |
707 scoped_refptr<SharedBufferDispatcher> dispatcher; | 707 scoped_refptr<SharedBufferDispatcher> dispatcher; |
708 EXPECT_EQ(MOJO_RESULT_OK, | 708 EXPECT_EQ(MOJO_RESULT_OK, |
709 SharedBufferDispatcher::Create( | 709 SharedBufferDispatcher::Create( |
710 platform_support(), | 710 platform_support(), |
711 SharedBufferDispatcher::kDefaultCreateOptions, | 711 SharedBufferDispatcher::kDefaultCreateOptions, |
712 100, | 712 100, |
713 &dispatcher)); | 713 &dispatcher)); |
714 ASSERT_TRUE(dispatcher); | 714 ASSERT_TRUE(dispatcher.get()); |
715 | 715 |
716 // Make a mapping. | 716 // Make a mapping. |
717 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping0; | 717 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping0; |
718 EXPECT_EQ( | 718 EXPECT_EQ( |
719 MOJO_RESULT_OK, | 719 MOJO_RESULT_OK, |
720 dispatcher->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping0)); | 720 dispatcher->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping0)); |
721 ASSERT_TRUE(mapping0); | 721 ASSERT_TRUE(mapping0); |
722 ASSERT_TRUE(mapping0->GetBase()); | 722 ASSERT_TRUE(mapping0->GetBase()); |
723 ASSERT_EQ(100u, mapping0->GetLength()); | 723 ASSERT_EQ(100u, mapping0->GetLength()); |
724 static_cast<char*>(mapping0->GetBase())[0] = 'A'; | 724 static_cast<char*>(mapping0->GetBase())[0] = 'A'; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
772 mp1->ReadMessage(1, | 772 mp1->ReadMessage(1, |
773 UserPointer<void>(read_buffer), | 773 UserPointer<void>(read_buffer), |
774 MakeUserPointer(&read_buffer_size), | 774 MakeUserPointer(&read_buffer_size), |
775 &read_dispatchers, | 775 &read_dispatchers, |
776 &read_num_dispatchers, | 776 &read_num_dispatchers, |
777 MOJO_READ_MESSAGE_FLAG_NONE)); | 777 MOJO_READ_MESSAGE_FLAG_NONE)); |
778 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); | 778 EXPECT_EQ(sizeof(kHello), static_cast<size_t>(read_buffer_size)); |
779 EXPECT_STREQ(kHello, read_buffer); | 779 EXPECT_STREQ(kHello, read_buffer); |
780 EXPECT_EQ(1u, read_dispatchers.size()); | 780 EXPECT_EQ(1u, read_dispatchers.size()); |
781 EXPECT_EQ(1u, read_num_dispatchers); | 781 EXPECT_EQ(1u, read_num_dispatchers); |
782 ASSERT_TRUE(read_dispatchers[0]); | 782 ASSERT_TRUE(read_dispatchers[0].get()); |
783 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 783 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
784 | 784 |
785 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, read_dispatchers[0]->GetType()); | 785 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, read_dispatchers[0]->GetType()); |
786 dispatcher = static_cast<SharedBufferDispatcher*>(read_dispatchers[0].get()); | 786 dispatcher = static_cast<SharedBufferDispatcher*>(read_dispatchers[0].get()); |
787 | 787 |
788 // Make another mapping. | 788 // Make another mapping. |
789 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping1; | 789 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping1; |
790 EXPECT_EQ( | 790 EXPECT_EQ( |
791 MOJO_RESULT_OK, | 791 MOJO_RESULT_OK, |
792 dispatcher->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping1)); | 792 dispatcher->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping1)); |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
898 mp1->ReadMessage(1, | 898 mp1->ReadMessage(1, |
899 UserPointer<void>(read_buffer), | 899 UserPointer<void>(read_buffer), |
900 MakeUserPointer(&read_buffer_size), | 900 MakeUserPointer(&read_buffer_size), |
901 &read_dispatchers, | 901 &read_dispatchers, |
902 &read_num_dispatchers, | 902 &read_num_dispatchers, |
903 MOJO_READ_MESSAGE_FLAG_NONE)); | 903 MOJO_READ_MESSAGE_FLAG_NONE)); |
904 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); | 904 EXPECT_EQ(sizeof(kWorld), static_cast<size_t>(read_buffer_size)); |
905 EXPECT_STREQ(kWorld, read_buffer); | 905 EXPECT_STREQ(kWorld, read_buffer); |
906 EXPECT_EQ(1u, read_dispatchers.size()); | 906 EXPECT_EQ(1u, read_dispatchers.size()); |
907 EXPECT_EQ(1u, read_num_dispatchers); | 907 EXPECT_EQ(1u, read_num_dispatchers); |
908 ASSERT_TRUE(read_dispatchers[0]); | 908 ASSERT_TRUE(read_dispatchers[0].get()); |
909 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); | 909 EXPECT_TRUE(read_dispatchers[0]->HasOneRef()); |
910 | 910 |
911 EXPECT_EQ(Dispatcher::kTypePlatformHandle, read_dispatchers[0]->GetType()); | 911 EXPECT_EQ(Dispatcher::kTypePlatformHandle, read_dispatchers[0]->GetType()); |
912 dispatcher = | 912 dispatcher = |
913 static_cast<PlatformHandleDispatcher*>(read_dispatchers[0].get()); | 913 static_cast<PlatformHandleDispatcher*>(read_dispatchers[0].get()); |
914 | 914 |
915 embedder::ScopedPlatformHandle h = dispatcher->PassPlatformHandle().Pass(); | 915 embedder::ScopedPlatformHandle h = dispatcher->PassPlatformHandle().Pass(); |
916 EXPECT_TRUE(h.is_valid()); | 916 EXPECT_TRUE(h.is_valid()); |
917 | 917 |
918 fp = mojo::test::FILEFromPlatformHandle(h.Pass(), "rb").Pass(); | 918 fp = mojo::test::FILEFromPlatformHandle(h.Pass(), "rb").Pass(); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
968 | 968 |
969 mp1->Close(1); | 969 mp1->Close(1); |
970 | 970 |
971 RestoreInitialState(); | 971 RestoreInitialState(); |
972 } | 972 } |
973 } | 973 } |
974 | 974 |
975 } // namespace | 975 } // namespace |
976 } // namespace system | 976 } // namespace system |
977 } // namespace mojo | 977 } // namespace mojo |
OLD | NEW |