OLD | NEW |
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 "mojo/edk/system/ipc_support.h" | 5 #include "mojo/edk/system/ipc_support.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
13 #include "base/logging.h" | 13 #include "base/logging.h" |
14 #include "base/synchronization/waitable_event.h" | 14 #include "base/synchronization/waitable_event.h" |
15 #include "base/test/test_timeouts.h" | 15 #include "base/time/time.h" |
16 #include "mojo/edk/embedder/master_process_delegate.h" | 16 #include "mojo/edk/embedder/master_process_delegate.h" |
17 #include "mojo/edk/embedder/platform_channel_pair.h" | 17 #include "mojo/edk/embedder/platform_channel_pair.h" |
18 #include "mojo/edk/embedder/simple_platform_support.h" | 18 #include "mojo/edk/embedder/simple_platform_support.h" |
19 #include "mojo/edk/embedder/slave_process_delegate.h" | 19 #include "mojo/edk/embedder/slave_process_delegate.h" |
20 #include "mojo/edk/system/channel_manager.h" | 20 #include "mojo/edk/system/channel_manager.h" |
21 #include "mojo/edk/system/connection_identifier.h" | 21 #include "mojo/edk/system/connection_identifier.h" |
22 #include "mojo/edk/system/dispatcher.h" | 22 #include "mojo/edk/system/dispatcher.h" |
23 #include "mojo/edk/system/message_pipe.h" | 23 #include "mojo/edk/system/message_pipe.h" |
24 #include "mojo/edk/system/message_pipe_dispatcher.h" | 24 #include "mojo/edk/system/message_pipe_dispatcher.h" |
25 #include "mojo/edk/system/process_identifier.h" | 25 #include "mojo/edk/system/process_identifier.h" |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 | 118 |
119 class TestMasterProcessDelegate : public embedder::MasterProcessDelegate { | 119 class TestMasterProcessDelegate : public embedder::MasterProcessDelegate { |
120 public: | 120 public: |
121 TestMasterProcessDelegate() | 121 TestMasterProcessDelegate() |
122 : on_slave_disconnect_event_(false, false) {} // Auto reset. | 122 : on_slave_disconnect_event_(false, false) {} // Auto reset. |
123 ~TestMasterProcessDelegate() override {} | 123 ~TestMasterProcessDelegate() override {} |
124 | 124 |
125 // Warning: There's only one slave disconnect event (which resets | 125 // Warning: There's only one slave disconnect event (which resets |
126 // automatically). | 126 // automatically). |
127 bool TryWaitForOnSlaveDisconnect() { | 127 bool TryWaitForOnSlaveDisconnect() { |
128 return on_slave_disconnect_event_.TimedWait(TestTimeouts::action_timeout()); | 128 return on_slave_disconnect_event_.TimedWait( |
| 129 base::TimeDelta::FromMicroseconds( |
| 130 static_cast<int64_t>(test::ActionTimeout()))); |
129 } | 131 } |
130 | 132 |
131 private: | 133 private: |
132 // |embedder::MasterProcessDelegate| methods: | 134 // |embedder::MasterProcessDelegate| methods: |
133 void OnShutdownComplete() override { NOTREACHED(); } | 135 void OnShutdownComplete() override { NOTREACHED(); } |
134 | 136 |
135 void OnSlaveDisconnect(embedder::SlaveInfo /*slave_info*/) override { | 137 void OnSlaveDisconnect(embedder::SlaveInfo /*slave_info*/) override { |
136 on_slave_disconnect_event_.Signal(); | 138 on_slave_disconnect_event_.Signal(); |
137 } | 139 } |
138 | 140 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 base::Bind(&base::WaitableEvent::Signal, base::Unretained(&event_)), | 179 base::Bind(&base::WaitableEvent::Signal, base::Unretained(&event_)), |
178 nullptr, &slave_id_); | 180 nullptr, &slave_id_); |
179 EXPECT_TRUE(mp); | 181 EXPECT_TRUE(mp); |
180 EXPECT_NE(slave_id_, kInvalidProcessIdentifier); | 182 EXPECT_NE(slave_id_, kInvalidProcessIdentifier); |
181 EXPECT_NE(slave_id_, kMasterProcessIdentifier); | 183 EXPECT_NE(slave_id_, kMasterProcessIdentifier); |
182 slave_platform_handle_ = channel_pair.PassClientHandle(); | 184 slave_platform_handle_ = channel_pair.PassClientHandle(); |
183 return mp; | 185 return mp; |
184 } | 186 } |
185 | 187 |
186 void WaitForChannelToSlave() { | 188 void WaitForChannelToSlave() { |
187 EXPECT_TRUE(event_.TimedWait(TestTimeouts::action_timeout())); | 189 EXPECT_TRUE(event_.TimedWait(base::TimeDelta::FromMicroseconds( |
| 190 static_cast<int64_t>(test::ActionTimeout())))); |
188 } | 191 } |
189 | 192 |
190 void ShutdownChannelToSlave() { | 193 void ShutdownChannelToSlave() { |
191 // Since |event_| is manual-reset, calling this multiple times is OK. | 194 // Since |event_| is manual-reset, calling this multiple times is OK. |
192 WaitForChannelToSlave(); | 195 WaitForChannelToSlave(); |
193 | 196 |
194 test_io_thread_->PostTaskAndWait( | 197 test_io_thread_->PostTaskAndWait( |
195 base::Bind(&ChannelManager::ShutdownChannelOnIOThread, | 198 base::Bind(&ChannelManager::ShutdownChannelOnIOThread, |
196 base::Unretained(master_ipc_support_->channel_manager()), | 199 base::Unretained(master_ipc_support_->channel_manager()), |
197 slave_id_)); | 200 slave_id_)); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 RefPtr<MessagePipeDispatcher> mp = slave_ipc_support_.ConnectToMaster( | 245 RefPtr<MessagePipeDispatcher> mp = slave_ipc_support_.ConnectToMaster( |
243 connection_id, | 246 connection_id, |
244 base::Bind(&base::WaitableEvent::Signal, base::Unretained(&event_)), | 247 base::Bind(&base::WaitableEvent::Signal, base::Unretained(&event_)), |
245 nullptr, &master_id); | 248 nullptr, &master_id); |
246 EXPECT_TRUE(mp); | 249 EXPECT_TRUE(mp); |
247 EXPECT_EQ(kMasterProcessIdentifier, master_id); | 250 EXPECT_EQ(kMasterProcessIdentifier, master_id); |
248 return mp; | 251 return mp; |
249 } | 252 } |
250 | 253 |
251 void WaitForChannelToMaster() { | 254 void WaitForChannelToMaster() { |
252 EXPECT_TRUE(event_.TimedWait(TestTimeouts::action_timeout())); | 255 EXPECT_TRUE(event_.TimedWait(base::TimeDelta::FromMicroseconds( |
| 256 static_cast<int64_t>(test::ActionTimeout())))); |
253 } | 257 } |
254 | 258 |
255 void ShutdownChannelToMaster() { | 259 void ShutdownChannelToMaster() { |
256 // Since |event_| is manual-reset, calling this multiple times is OK. | 260 // Since |event_| is manual-reset, calling this multiple times is OK. |
257 WaitForChannelToMaster(); | 261 WaitForChannelToMaster(); |
258 | 262 |
259 test_io_thread_->PostTaskAndWait( | 263 test_io_thread_->PostTaskAndWait( |
260 base::Bind(&ChannelManager::ShutdownChannelOnIOThread, | 264 base::Bind(&ChannelManager::ShutdownChannelOnIOThread, |
261 base::Unretained(slave_ipc_support_.channel_manager()), | 265 base::Unretained(slave_ipc_support_.channel_manager()), |
262 kMasterProcessIdentifier)); | 266 kMasterProcessIdentifier)); |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
707 | 711 |
708 test_io_thread.PostTaskAndWait(base::Bind(&IPCSupport::ShutdownOnIOThread, | 712 test_io_thread.PostTaskAndWait(base::Bind(&IPCSupport::ShutdownOnIOThread, |
709 base::Unretained(&ipc_support))); | 713 base::Unretained(&ipc_support))); |
710 } | 714 } |
711 | 715 |
712 // TODO(vtl): Also test the case of the master "dying" before the slave. (The | 716 // TODO(vtl): Also test the case of the master "dying" before the slave. (The |
713 // slave should get OnMasterDisconnect(), which we currently don't test.) | 717 // slave should get OnMasterDisconnect(), which we currently don't test.) |
714 | 718 |
715 } // namespace system | 719 } // namespace system |
716 } // namespace mojo | 720 } // namespace mojo |
OLD | NEW |