| 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 |