| 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 "mojo/system/channel.h" | 5 #include "mojo/system/channel.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/location.h" | 8 #include "base/location.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/test/test_io_thread.h" | 10 #include "base/test/test_io_thread.h" |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 io_thread()->PostTaskAndWait(FROM_HERE, | 187 io_thread()->PostTaskAndWait(FROM_HERE, |
| 188 base::Bind(&ChannelTest::CreateChannelOnIOThread, | 188 base::Bind(&ChannelTest::CreateChannelOnIOThread, |
| 189 base::Unretained(this))); | 189 base::Unretained(this))); |
| 190 ASSERT_TRUE(channel()); | 190 ASSERT_TRUE(channel()); |
| 191 | 191 |
| 192 io_thread()->PostTaskAndWait( | 192 io_thread()->PostTaskAndWait( |
| 193 FROM_HERE, | 193 FROM_HERE, |
| 194 base::Bind(&ChannelTest::InitChannelOnIOThread, base::Unretained(this))); | 194 base::Bind(&ChannelTest::InitChannelOnIOThread, base::Unretained(this))); |
| 195 EXPECT_EQ(TRISTATE_TRUE, init_result()); | 195 EXPECT_EQ(TRISTATE_TRUE, init_result()); |
| 196 | 196 |
| 197 scoped_refptr<MessagePipe> mp(MessagePipe::CreateLocalProxy()); | 197 scoped_refptr<ChannelEndpoint> channel_endpoint; |
| 198 scoped_refptr<MessagePipe> mp( |
| 199 MessagePipe::CreateLocalProxy(&channel_endpoint)); |
| 198 | 200 |
| 199 MessageInTransit::EndpointId local_id = channel()->AttachEndpoint( | 201 MessageInTransit::EndpointId local_id = |
| 200 make_scoped_refptr(new ChannelEndpoint(mp.get(), 1))); | 202 channel()->AttachEndpoint(channel_endpoint); |
| 201 EXPECT_EQ(Channel::kBootstrapEndpointId, local_id); | 203 EXPECT_EQ(Channel::kBootstrapEndpointId, local_id); |
| 202 | 204 |
| 203 mp->Close(0); | 205 mp->Close(0); |
| 204 | 206 |
| 205 // TODO(vtl): Currently, the |Close()| above won't detach (since it thinks | 207 // TODO(vtl): Currently, the |Close()| above won't detach (since it thinks |
| 206 // we're still expecting a "run" message from the other side), so the | 208 // we're still expecting a "run" message from the other side), so the |
| 207 // |RunMessagePipeEndpoint()| below will return true. We need to refactor | 209 // |RunMessagePipeEndpoint()| below will return true. We need to refactor |
| 208 // |AttachEndpoint()| to indicate whether |Run...()| will necessarily be | 210 // |AttachEndpoint()| to indicate whether |Run...()| will necessarily be |
| 209 // called or not. (Then, in the case that it may not be called, this will | 211 // called or not. (Then, in the case that it may not be called, this will |
| 210 // return false.) | 212 // return false.) |
| (...skipping 14 matching lines...) Expand all Loading... |
| 225 io_thread()->PostTaskAndWait(FROM_HERE, | 227 io_thread()->PostTaskAndWait(FROM_HERE, |
| 226 base::Bind(&ChannelTest::CreateChannelOnIOThread, | 228 base::Bind(&ChannelTest::CreateChannelOnIOThread, |
| 227 base::Unretained(this))); | 229 base::Unretained(this))); |
| 228 ASSERT_TRUE(channel()); | 230 ASSERT_TRUE(channel()); |
| 229 | 231 |
| 230 io_thread()->PostTaskAndWait( | 232 io_thread()->PostTaskAndWait( |
| 231 FROM_HERE, | 233 FROM_HERE, |
| 232 base::Bind(&ChannelTest::InitChannelOnIOThread, base::Unretained(this))); | 234 base::Bind(&ChannelTest::InitChannelOnIOThread, base::Unretained(this))); |
| 233 EXPECT_EQ(TRISTATE_TRUE, init_result()); | 235 EXPECT_EQ(TRISTATE_TRUE, init_result()); |
| 234 | 236 |
| 235 scoped_refptr<MessagePipe> mp(MessagePipe::CreateLocalProxy()); | 237 scoped_refptr<ChannelEndpoint> channel_endpoint; |
| 238 scoped_refptr<MessagePipe> mp( |
| 239 MessagePipe::CreateLocalProxy(&channel_endpoint)); |
| 236 | 240 |
| 237 MessageInTransit::EndpointId local_id = channel()->AttachEndpoint( | 241 MessageInTransit::EndpointId local_id = |
| 238 make_scoped_refptr(new ChannelEndpoint(mp.get(), 1))); | 242 channel()->AttachEndpoint(channel_endpoint); |
| 239 EXPECT_EQ(Channel::kBootstrapEndpointId, local_id); | 243 EXPECT_EQ(Channel::kBootstrapEndpointId, local_id); |
| 240 | 244 |
| 241 // TODO(vtl): Currently, we always "expect" a |RunMessagePipeEndpoint()| after | 245 // TODO(vtl): Currently, we always "expect" a |RunMessagePipeEndpoint()| after |
| 242 // an |AttachEndpoint()| (which is actually incorrect). We need to refactor | 246 // an |AttachEndpoint()| (which is actually incorrect). We need to refactor |
| 243 // |AttachEndpoint()| to indicate whether |Run...()| will necessarily be | 247 // |AttachEndpoint()| to indicate whether |Run...()| will necessarily be |
| 244 // called or not. (Then, in the case that it may not be called, we should test | 248 // called or not. (Then, in the case that it may not be called, we should test |
| 245 // a |Shutdown()| without the |Run...()|.) | 249 // a |Shutdown()| without the |Run...()|.) |
| 246 EXPECT_TRUE(channel()->RunMessagePipeEndpoint(local_id, | 250 EXPECT_TRUE(channel()->RunMessagePipeEndpoint(local_id, |
| 247 Channel::kBootstrapEndpointId)); | 251 Channel::kBootstrapEndpointId)); |
| 248 | 252 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 275 io_thread()->PostTaskAndWait(FROM_HERE, | 279 io_thread()->PostTaskAndWait(FROM_HERE, |
| 276 base::Bind(&ChannelTest::CreateChannelOnIOThread, | 280 base::Bind(&ChannelTest::CreateChannelOnIOThread, |
| 277 base::Unretained(this))); | 281 base::Unretained(this))); |
| 278 ASSERT_TRUE(channel()); | 282 ASSERT_TRUE(channel()); |
| 279 | 283 |
| 280 io_thread()->PostTaskAndWait( | 284 io_thread()->PostTaskAndWait( |
| 281 FROM_HERE, | 285 FROM_HERE, |
| 282 base::Bind(&ChannelTest::InitChannelOnIOThread, base::Unretained(this))); | 286 base::Bind(&ChannelTest::InitChannelOnIOThread, base::Unretained(this))); |
| 283 EXPECT_EQ(TRISTATE_TRUE, init_result()); | 287 EXPECT_EQ(TRISTATE_TRUE, init_result()); |
| 284 | 288 |
| 285 scoped_refptr<MessagePipe> mp(MessagePipe::CreateLocalProxy()); | 289 scoped_refptr<ChannelEndpoint> channel_endpoint; |
| 290 scoped_refptr<MessagePipe> mp( |
| 291 MessagePipe::CreateLocalProxy(&channel_endpoint)); |
| 286 | 292 |
| 287 MessageInTransit::EndpointId local_id = channel()->AttachEndpoint( | 293 MessageInTransit::EndpointId local_id = |
| 288 make_scoped_refptr(new ChannelEndpoint(mp.get(), 1))); | 294 channel()->AttachEndpoint(channel_endpoint); |
| 289 EXPECT_EQ(Channel::kBootstrapEndpointId, local_id); | 295 EXPECT_EQ(Channel::kBootstrapEndpointId, local_id); |
| 290 | 296 |
| 291 EXPECT_TRUE(channel()->RunMessagePipeEndpoint(local_id, | 297 EXPECT_TRUE(channel()->RunMessagePipeEndpoint(local_id, |
| 292 Channel::kBootstrapEndpointId)); | 298 Channel::kBootstrapEndpointId)); |
| 293 | 299 |
| 294 io_thread()->PostTaskAndWait( | 300 io_thread()->PostTaskAndWait( |
| 295 FROM_HERE, | 301 FROM_HERE, |
| 296 base::Bind(&ChannelTest::ShutdownChannelOnIOThread, | 302 base::Bind(&ChannelTest::ShutdownChannelOnIOThread, |
| 297 base::Unretained(this))); | 303 base::Unretained(this))); |
| 298 | 304 |
| 299 Waiter waiter; | 305 Waiter waiter; |
| 300 waiter.Init(); | 306 waiter.Init(); |
| 301 HandleSignalsState hss; | 307 HandleSignalsState hss; |
| 302 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, | 308 EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, |
| 303 mp->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, &hss)); | 309 mp->AddWaiter(0, &waiter, MOJO_HANDLE_SIGNAL_READABLE, 123, &hss)); |
| 304 EXPECT_EQ(0u, hss.satisfied_signals); | 310 EXPECT_EQ(0u, hss.satisfied_signals); |
| 305 EXPECT_EQ(0u, hss.satisfiable_signals); | 311 EXPECT_EQ(0u, hss.satisfiable_signals); |
| 306 | 312 |
| 307 mp->Close(0); | 313 mp->Close(0); |
| 308 | 314 |
| 309 EXPECT_TRUE(channel()->HasOneRef()); | 315 EXPECT_TRUE(channel()->HasOneRef()); |
| 310 } | 316 } |
| 311 | 317 |
| 312 // TODO(vtl): More. ------------------------------------------------------------ | 318 // TODO(vtl): More. ------------------------------------------------------------ |
| 313 | 319 |
| 314 } // namespace | 320 } // namespace |
| 315 } // namespace system | 321 } // namespace system |
| 316 } // namespace mojo | 322 } // namespace mojo |
| OLD | NEW |