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

Side by Side Diff: ipc/ipc_channel_mojo_unittest.cc

Issue 2451953003: Change most IPC tests to use ChannelMojo. (Closed)
Patch Set: Created 4 years, 1 month 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
« no previous file with comments | « ipc/DEPS ('k') | ipc/ipc_channel_proxy_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "ipc/ipc_channel_mojo.h" 5 #include "ipc/ipc_channel_mojo.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 19 matching lines...) Expand all
30 #include "build/build_config.h" 30 #include "build/build_config.h"
31 #include "ipc/ipc_message.h" 31 #include "ipc/ipc_message.h"
32 #include "ipc/ipc_mojo_handle_attachment.h" 32 #include "ipc/ipc_mojo_handle_attachment.h"
33 #include "ipc/ipc_mojo_message_helper.h" 33 #include "ipc/ipc_mojo_message_helper.h"
34 #include "ipc/ipc_mojo_param_traits.h" 34 #include "ipc/ipc_mojo_param_traits.h"
35 #include "ipc/ipc_sync_channel.h" 35 #include "ipc/ipc_sync_channel.h"
36 #include "ipc/ipc_sync_message.h" 36 #include "ipc/ipc_sync_message.h"
37 #include "ipc/ipc_test.mojom.h" 37 #include "ipc/ipc_test.mojom.h"
38 #include "ipc/ipc_test_base.h" 38 #include "ipc/ipc_test_base.h"
39 #include "ipc/ipc_test_channel_listener.h" 39 #include "ipc/ipc_test_channel_listener.h"
40 #include "mojo/edk/test/mojo_test_base.h"
41 #include "mojo/edk/test/multiprocess_test_helper.h"
42 #include "testing/gtest/include/gtest/gtest.h" 40 #include "testing/gtest/include/gtest/gtest.h"
43 41
44 #if defined(OS_POSIX) 42 #if defined(OS_POSIX)
45 #include "base/file_descriptor_posix.h" 43 #include "base/file_descriptor_posix.h"
46 #include "ipc/ipc_platform_file_attachment_posix.h" 44 #include "ipc/ipc_platform_file_attachment_posix.h"
47 #endif 45 #endif
48 46
49 #define DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(client_name, test_base) \
50 class client_name##_MainFixture : public test_base { \
51 public: \
52 void Main(); \
53 }; \
54 MULTIPROCESS_TEST_MAIN_WITH_SETUP( \
55 client_name##TestChildMain, \
56 ::mojo::edk::test::MultiprocessTestHelper::ChildSetup) { \
57 client_name##_MainFixture test; \
58 test.Init( \
59 std::move(mojo::edk::test::MultiprocessTestHelper::primordial_pipe)); \
60 test.Main(); \
61 return (::testing::Test::HasFatalFailure() || \
62 ::testing::Test::HasNonfatalFailure()) \
63 ? 1 \
64 : 0; \
65 } \
66 void client_name##_MainFixture::Main()
67
68 namespace { 47 namespace {
69 48
70 void SendString(IPC::Sender* sender, const std::string& str) { 49 void SendString(IPC::Sender* sender, const std::string& str) {
71 IPC::Message* message = new IPC::Message(0, 2, IPC::Message::PRIORITY_NORMAL); 50 IPC::Message* message = new IPC::Message(0, 2, IPC::Message::PRIORITY_NORMAL);
72 message->WriteString(str); 51 message->WriteString(str);
73 ASSERT_TRUE(sender->Send(message)); 52 ASSERT_TRUE(sender->Send(message));
74 } 53 }
75 54
76 void SendValue(IPC::Sender* sender, int32_t value) { 55 void SendValue(IPC::Sender* sender, int32_t value) {
77 IPC::Message* message = new IPC::Message(0, 2, IPC::Message::PRIORITY_NORMAL); 56 IPC::Message* message = new IPC::Message(0, 2, IPC::Message::PRIORITY_NORMAL);
(...skipping 23 matching lines...) Expand all
101 // process dies. 80 // process dies.
102 DCHECK(received_ok_); 81 DCHECK(received_ok_);
103 } 82 }
104 83
105 static void SendOK(IPC::Sender* sender) { SendString(sender, "OK"); } 84 static void SendOK(IPC::Sender* sender) { SendString(sender, "OK"); }
106 85
107 private: 86 private:
108 bool received_ok_; 87 bool received_ok_;
109 }; 88 };
110 89
111 class ChannelClient { 90 using IPCChannelMojoTest = IPCChannelMojoTestBase;
112 public:
113 void Init(mojo::ScopedMessagePipeHandle handle) {
114 handle_ = std::move(handle);
115 }
116
117 void Connect(IPC::Listener* listener) {
118 channel_ = IPC::ChannelMojo::Create(
119 std::move(handle_), IPC::Channel::MODE_CLIENT, listener,
120 base::ThreadTaskRunnerHandle::Get());
121 CHECK(channel_->Connect());
122 }
123
124 void Close() {
125 channel_->Close();
126
127 base::RunLoop run_loop;
128 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
129 run_loop.QuitClosure());
130 run_loop.Run();
131 }
132
133 IPC::ChannelMojo* channel() const { return channel_.get(); }
134
135 private:
136 base::MessageLoopForIO main_message_loop_;
137 mojo::ScopedMessagePipeHandle handle_;
138 std::unique_ptr<IPC::ChannelMojo> channel_;
139 };
140
141 class IPCChannelMojoTestBase : public testing::Test {
142 public:
143 void InitWithMojo(const std::string& test_client_name) {
144 handle_ = helper_.StartChild(test_client_name);
145 }
146
147 bool WaitForClientShutdown() { return helper_.WaitForChildTestShutdown(); }
148
149 protected:
150 mojo::ScopedMessagePipeHandle TakeHandle() { return std::move(handle_); }
151
152 private:
153 mojo::ScopedMessagePipeHandle handle_;
154 mojo::edk::test::MultiprocessTestHelper helper_;
155 };
156
157 class IPCChannelMojoTest : public IPCChannelMojoTestBase {
158 public:
159 void TearDown() override { base::RunLoop().RunUntilIdle(); }
160
161 void CreateChannel(IPC::Listener* listener) {
162 channel_ = IPC::ChannelMojo::Create(
163 TakeHandle(), IPC::Channel::MODE_SERVER, listener,
164 base::ThreadTaskRunnerHandle::Get());
165 }
166
167 bool ConnectChannel() { return channel_->Connect(); }
168
169 void DestroyChannel() { channel_.reset(); }
170
171 IPC::Sender* sender() { return channel(); }
172 IPC::Channel* channel() { return channel_.get(); }
173
174 private:
175 base::MessageLoop message_loop_;
176 std::unique_ptr<IPC::Channel> channel_;
177 };
178 91
179 class TestChannelListenerWithExtraExpectations 92 class TestChannelListenerWithExtraExpectations
180 : public IPC::TestChannelListener { 93 : public IPC::TestChannelListener {
181 public: 94 public:
182 TestChannelListenerWithExtraExpectations() : is_connected_called_(false) {} 95 TestChannelListenerWithExtraExpectations() : is_connected_called_(false) {}
183 96
184 void OnChannelConnected(int32_t peer_pid) override { 97 void OnChannelConnected(int32_t peer_pid) override {
185 IPC::TestChannelListener::OnChannelConnected(peer_pid); 98 IPC::TestChannelListener::OnChannelConnected(peer_pid);
186 EXPECT_TRUE(base::kNullProcessId != peer_pid); 99 EXPECT_TRUE(base::kNullProcessId != peer_pid);
187 is_connected_called_ = true; 100 is_connected_called_ = true;
188 } 101 }
189 102
190 bool is_connected_called() const { return is_connected_called_; } 103 bool is_connected_called() const { return is_connected_called_; }
191 104
192 private: 105 private:
193 bool is_connected_called_; 106 bool is_connected_called_;
194 }; 107 };
195 108
196 TEST_F(IPCChannelMojoTest, ConnectedFromClient) { 109 TEST_F(IPCChannelMojoTest, ConnectedFromClient) {
197 InitWithMojo("IPCChannelMojoTestClient"); 110 Init("IPCChannelMojoTestClient");
198 111
199 // Set up IPC channel and start client. 112 // Set up IPC channel and start client.
200 TestChannelListenerWithExtraExpectations listener; 113 TestChannelListenerWithExtraExpectations listener;
201 CreateChannel(&listener); 114 CreateChannel(&listener);
202 listener.Init(sender()); 115 listener.Init(sender());
203 ASSERT_TRUE(ConnectChannel()); 116 ASSERT_TRUE(ConnectChannel());
204 117
205 IPC::TestChannelListener::SendOneMessage(sender(), "hello from parent"); 118 IPC::TestChannelListener::SendOneMessage(sender(), "hello from parent");
206 119
207 base::RunLoop().Run(); 120 base::RunLoop().Run();
208 121
209 channel()->Close(); 122 channel()->Close();
210 123
211 EXPECT_TRUE(WaitForClientShutdown()); 124 EXPECT_TRUE(WaitForClientShutdown());
212 EXPECT_TRUE(listener.is_connected_called()); 125 EXPECT_TRUE(listener.is_connected_called());
213 EXPECT_TRUE(listener.HasSentAll()); 126 EXPECT_TRUE(listener.HasSentAll());
214 127
215 DestroyChannel(); 128 DestroyChannel();
216 } 129 }
217 130
218 // A long running process that connects to us 131 // A long running process that connects to us
219 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestClient, ChannelClient) { 132 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestClient) {
220 TestChannelListenerWithExtraExpectations listener; 133 TestChannelListenerWithExtraExpectations listener;
221 Connect(&listener); 134 Connect(&listener);
222 listener.Init(channel()); 135 listener.Init(channel());
223 136
224 IPC::TestChannelListener::SendOneMessage(channel(), "hello from child"); 137 IPC::TestChannelListener::SendOneMessage(channel(), "hello from child");
225 base::RunLoop().Run(); 138 base::RunLoop().Run();
226 EXPECT_TRUE(listener.is_connected_called()); 139 EXPECT_TRUE(listener.is_connected_called());
227 EXPECT_TRUE(listener.HasSentAll()); 140 EXPECT_TRUE(listener.HasSentAll());
228 141
229 Close(); 142 Close();
(...skipping 21 matching lines...) Expand all
251 ListenerThatQuits() {} 164 ListenerThatQuits() {}
252 165
253 bool OnMessageReceived(const IPC::Message& message) override { return true; } 166 bool OnMessageReceived(const IPC::Message& message) override { return true; }
254 167
255 void OnChannelConnected(int32_t peer_pid) override { 168 void OnChannelConnected(int32_t peer_pid) override {
256 base::MessageLoop::current()->QuitWhenIdle(); 169 base::MessageLoop::current()->QuitWhenIdle();
257 } 170 }
258 }; 171 };
259 172
260 // A long running process that connects to us. 173 // A long running process that connects to us.
261 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoErraticTestClient, 174 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoErraticTestClient) {
262 ChannelClient) {
263 ListenerThatQuits listener; 175 ListenerThatQuits listener;
264 Connect(&listener); 176 Connect(&listener);
265 177
266 base::RunLoop().Run(); 178 base::RunLoop().Run();
267 179
268 Close(); 180 Close();
269 } 181 }
270 182
271 TEST_F(IPCChannelMojoTest, SendFailWithPendingMessages) { 183 TEST_F(IPCChannelMojoTest, SendFailWithPendingMessages) {
272 InitWithMojo("IPCChannelMojoErraticTestClient"); 184 Init("IPCChannelMojoErraticTestClient");
273 185
274 // Set up IPC channel and start client. 186 // Set up IPC channel and start client.
275 ListenerExpectingErrors listener; 187 ListenerExpectingErrors listener;
276 CreateChannel(&listener); 188 CreateChannel(&listener);
277 ASSERT_TRUE(ConnectChannel()); 189 ASSERT_TRUE(ConnectChannel());
278 190
279 // This matches a value in mojo/edk/system/constants.h 191 // This matches a value in mojo/edk/system/constants.h
280 const int kMaxMessageNumBytes = 4 * 1024 * 1024; 192 const int kMaxMessageNumBytes = 4 * 1024 * 1024;
281 std::string overly_large_data(kMaxMessageNumBytes, '*'); 193 std::string overly_large_data(kMaxMessageNumBytes, '*');
282 // This messages are queued as pending. 194 // This messages are queued as pending.
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 base::MessageLoop::current()->QuitWhenIdle(); 318 base::MessageLoop::current()->QuitWhenIdle();
407 } 319 }
408 320
409 void set_sender(IPC::Sender* sender) { sender_ = sender; } 321 void set_sender(IPC::Sender* sender) { sender_ = sender; }
410 322
411 private: 323 private:
412 IPC::Sender* sender_; 324 IPC::Sender* sender_;
413 }; 325 };
414 326
415 TEST_F(IPCChannelMojoTest, SendMessagePipe) { 327 TEST_F(IPCChannelMojoTest, SendMessagePipe) {
416 InitWithMojo("IPCChannelMojoTestSendMessagePipeClient"); 328 Init("IPCChannelMojoTestSendMessagePipeClient");
417 329
418 ListenerThatExpectsOK listener; 330 ListenerThatExpectsOK listener;
419 CreateChannel(&listener); 331 CreateChannel(&listener);
420 ASSERT_TRUE(ConnectChannel()); 332 ASSERT_TRUE(ConnectChannel());
421 333
422 TestingMessagePipe pipe; 334 TestingMessagePipe pipe;
423 HandleSendingHelper::WritePipeThenSend(channel(), &pipe); 335 HandleSendingHelper::WritePipeThenSend(channel(), &pipe);
424 336
425 base::RunLoop().Run(); 337 base::RunLoop().Run();
426 channel()->Close(); 338 channel()->Close();
427 339
428 EXPECT_TRUE(WaitForClientShutdown()); 340 EXPECT_TRUE(WaitForClientShutdown());
429 DestroyChannel(); 341 DestroyChannel();
430 } 342 }
431 343
432 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestSendMessagePipeClient, 344 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestSendMessagePipeClient) {
433 ChannelClient) {
434 ListenerThatExpectsMessagePipe listener; 345 ListenerThatExpectsMessagePipe listener;
435 Connect(&listener); 346 Connect(&listener);
436 listener.set_sender(channel()); 347 listener.set_sender(channel());
437 348
438 base::RunLoop().Run(); 349 base::RunLoop().Run();
439 350
440 Close(); 351 Close();
441 } 352 }
442 353
443 void ReadOK(mojo::MessagePipeHandle pipe) { 354 void ReadOK(mojo::MessagePipeHandle pipe) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 base::MessageLoop::current()->QuitWhenIdle(); 395 base::MessageLoop::current()->QuitWhenIdle();
485 } 396 }
486 397
487 void set_sender(IPC::Sender* sender) { sender_ = sender; } 398 void set_sender(IPC::Sender* sender) { sender_ = sender; }
488 399
489 private: 400 private:
490 IPC::Sender* sender_; 401 IPC::Sender* sender_;
491 bool receiving_valid_; 402 bool receiving_valid_;
492 }; 403 };
493 404
494 class ParamTraitMessagePipeClient : public ChannelClient { 405 class ParamTraitMessagePipeClient : public IpcChannelMojoTestClient {
495 public: 406 public:
496 void RunTest(bool receiving_valid_handle) { 407 void RunTest(bool receiving_valid_handle) {
497 ListenerThatExpectsMessagePipeUsingParamTrait listener( 408 ListenerThatExpectsMessagePipeUsingParamTrait listener(
498 receiving_valid_handle); 409 receiving_valid_handle);
499 Connect(&listener); 410 Connect(&listener);
500 listener.set_sender(channel()); 411 listener.set_sender(channel());
501 412
502 base::RunLoop().Run(); 413 base::RunLoop().Run();
503 414
504 Close(); 415 Close();
505 } 416 }
506 }; 417 };
507 418
508 TEST_F(IPCChannelMojoTest, ParamTraitValidMessagePipe) { 419 TEST_F(IPCChannelMojoTest, ParamTraitValidMessagePipe) {
509 InitWithMojo("ParamTraitValidMessagePipeClient"); 420 Init("ParamTraitValidMessagePipeClient");
510 421
511 ListenerThatExpectsOK listener; 422 ListenerThatExpectsOK listener;
512 CreateChannel(&listener); 423 CreateChannel(&listener);
513 ASSERT_TRUE(ConnectChannel()); 424 ASSERT_TRUE(ConnectChannel());
514 425
515 TestingMessagePipe pipe; 426 TestingMessagePipe pipe;
516 427
517 std::unique_ptr<IPC::Message> message(new IPC::Message()); 428 std::unique_ptr<IPC::Message> message(new IPC::Message());
518 IPC::ParamTraits<mojo::MessagePipeHandle>::Write(message.get(), 429 IPC::ParamTraits<mojo::MessagePipeHandle>::Write(message.get(),
519 pipe.peer.release()); 430 pipe.peer.release());
520 WriteOK(pipe.self.get()); 431 WriteOK(pipe.self.get());
521 432
522 channel()->Send(message.release()); 433 channel()->Send(message.release());
523 base::RunLoop().Run(); 434 base::RunLoop().Run();
524 channel()->Close(); 435 channel()->Close();
525 436
526 EXPECT_TRUE(WaitForClientShutdown()); 437 EXPECT_TRUE(WaitForClientShutdown());
527 DestroyChannel(); 438 DestroyChannel();
528 } 439 }
529 440
530 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(ParamTraitValidMessagePipeClient, 441 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE(
531 ParamTraitMessagePipeClient) { 442 ParamTraitValidMessagePipeClient,
443 ParamTraitMessagePipeClient) {
532 RunTest(true); 444 RunTest(true);
533 } 445 }
534 446
535 TEST_F(IPCChannelMojoTest, ParamTraitInvalidMessagePipe) { 447 TEST_F(IPCChannelMojoTest, ParamTraitInvalidMessagePipe) {
536 InitWithMojo("ParamTraitInvalidMessagePipeClient"); 448 Init("ParamTraitInvalidMessagePipeClient");
537 449
538 ListenerThatExpectsOK listener; 450 ListenerThatExpectsOK listener;
539 CreateChannel(&listener); 451 CreateChannel(&listener);
540 ASSERT_TRUE(ConnectChannel()); 452 ASSERT_TRUE(ConnectChannel());
541 453
542 mojo::MessagePipeHandle invalid_handle; 454 mojo::MessagePipeHandle invalid_handle;
543 std::unique_ptr<IPC::Message> message(new IPC::Message()); 455 std::unique_ptr<IPC::Message> message(new IPC::Message());
544 IPC::ParamTraits<mojo::MessagePipeHandle>::Write(message.get(), 456 IPC::ParamTraits<mojo::MessagePipeHandle>::Write(message.get(),
545 invalid_handle); 457 invalid_handle);
546 458
547 channel()->Send(message.release()); 459 channel()->Send(message.release());
548 base::RunLoop().Run(); 460 base::RunLoop().Run();
549 channel()->Close(); 461 channel()->Close();
550 462
551 EXPECT_TRUE(WaitForClientShutdown()); 463 EXPECT_TRUE(WaitForClientShutdown());
552 DestroyChannel(); 464 DestroyChannel();
553 } 465 }
554 466
555 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(ParamTraitInvalidMessagePipeClient, 467 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE(
556 ParamTraitMessagePipeClient) { 468 ParamTraitInvalidMessagePipeClient,
469 ParamTraitMessagePipeClient) {
557 RunTest(false); 470 RunTest(false);
558 } 471 }
559 472
560 TEST_F(IPCChannelMojoTest, SendFailAfterClose) { 473 TEST_F(IPCChannelMojoTest, SendFailAfterClose) {
561 InitWithMojo("IPCChannelMojoTestSendOkClient"); 474 Init("IPCChannelMojoTestSendOkClient");
562 475
563 ListenerThatExpectsOK listener; 476 ListenerThatExpectsOK listener;
564 CreateChannel(&listener); 477 CreateChannel(&listener);
565 ASSERT_TRUE(ConnectChannel()); 478 ASSERT_TRUE(ConnectChannel());
566 479
567 base::RunLoop().Run(); 480 base::RunLoop().Run();
568 channel()->Close(); 481 channel()->Close();
569 ASSERT_FALSE(channel()->Send(new IPC::Message())); 482 ASSERT_FALSE(channel()->Send(new IPC::Message()));
570 483
571 EXPECT_TRUE(WaitForClientShutdown()); 484 EXPECT_TRUE(WaitForClientShutdown());
(...skipping 10 matching lines...) Expand all
582 ListenerThatExpectsOK::SendOK(sender_); 495 ListenerThatExpectsOK::SendOK(sender_);
583 base::MessageLoop::current()->QuitWhenIdle(); 496 base::MessageLoop::current()->QuitWhenIdle();
584 } 497 }
585 498
586 void set_sender(IPC::Sender* sender) { sender_ = sender; } 499 void set_sender(IPC::Sender* sender) { sender_ = sender; }
587 500
588 private: 501 private:
589 IPC::Sender* sender_; 502 IPC::Sender* sender_;
590 }; 503 };
591 504
592 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestSendOkClient, 505 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestSendOkClient) {
593 ChannelClient) {
594 ListenerSendingOneOk listener; 506 ListenerSendingOneOk listener;
595 Connect(&listener); 507 Connect(&listener);
596 listener.set_sender(channel()); 508 listener.set_sender(channel());
597 509
598 base::RunLoop().Run(); 510 base::RunLoop().Run();
599 511
600 Close(); 512 Close();
601 } 513 }
602 514
603 class ListenerWithSimpleAssociatedInterface 515 class ListenerWithSimpleAssociatedInterface
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 void set_channel(IPC::Channel* channel) { channel_ = channel; } 600 void set_channel(IPC::Channel* channel) { channel_ = channel; }
689 601
690 private: 602 private:
691 static void OnQuitAck() { base::MessageLoop::current()->QuitWhenIdle(); } 603 static void OnQuitAck() { base::MessageLoop::current()->QuitWhenIdle(); }
692 604
693 IPC::Channel* channel_ = nullptr; 605 IPC::Channel* channel_ = nullptr;
694 IPC::mojom::SimpleTestDriverAssociatedPtr driver_; 606 IPC::mojom::SimpleTestDriverAssociatedPtr driver_;
695 }; 607 };
696 608
697 TEST_F(IPCChannelMojoTest, SimpleAssociatedInterface) { 609 TEST_F(IPCChannelMojoTest, SimpleAssociatedInterface) {
698 InitWithMojo("SimpleAssociatedInterfaceClient"); 610 Init("SimpleAssociatedInterfaceClient");
699 611
700 ListenerWithSimpleAssociatedInterface listener; 612 ListenerWithSimpleAssociatedInterface listener;
701 CreateChannel(&listener); 613 CreateChannel(&listener);
702 ASSERT_TRUE(ConnectChannel()); 614 ASSERT_TRUE(ConnectChannel());
703 615
704 listener.RegisterInterfaceFactory(channel()); 616 listener.RegisterInterfaceFactory(channel());
705 617
706 base::RunLoop().Run(); 618 base::RunLoop().Run();
707 channel()->Close(); 619 channel()->Close();
708 620
709 EXPECT_TRUE(WaitForClientShutdown()); 621 EXPECT_TRUE(WaitForClientShutdown());
710 DestroyChannel(); 622 DestroyChannel();
711 } 623 }
712 624
713 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(SimpleAssociatedInterfaceClient, 625 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(SimpleAssociatedInterfaceClient) {
714 ChannelClient) {
715 ListenerSendingAssociatedMessages listener; 626 ListenerSendingAssociatedMessages listener;
716 Connect(&listener); 627 Connect(&listener);
717 listener.set_channel(channel()); 628 listener.set_channel(channel());
718 629
719 base::RunLoop().Run(); 630 base::RunLoop().Run();
720 631
721 Close(); 632 Close();
722 } 633 }
723 634
724 class ChannelProxyRunner { 635 class ChannelProxyRunner {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 mojo::ScopedMessagePipeHandle handle_; 670 mojo::ScopedMessagePipeHandle handle_;
760 base::Thread io_thread_; 671 base::Thread io_thread_;
761 std::unique_ptr<IPC::ChannelProxy> proxy_; 672 std::unique_ptr<IPC::ChannelProxy> proxy_;
762 base::WaitableEvent never_signaled_; 673 base::WaitableEvent never_signaled_;
763 674
764 DISALLOW_COPY_AND_ASSIGN(ChannelProxyRunner); 675 DISALLOW_COPY_AND_ASSIGN(ChannelProxyRunner);
765 }; 676 };
766 677
767 class IPCChannelProxyMojoTest : public IPCChannelMojoTestBase { 678 class IPCChannelProxyMojoTest : public IPCChannelMojoTestBase {
768 public: 679 public:
769 void InitWithMojo(const std::string& client_name) { 680 void Init(const std::string& client_name) {
770 IPCChannelMojoTestBase::InitWithMojo(client_name); 681 IPCChannelMojoTestBase::Init(client_name);
771 runner_.reset(new ChannelProxyRunner(TakeHandle(), true)); 682 runner_.reset(new ChannelProxyRunner(TakeHandle(), true));
772 } 683 }
773 void CreateProxy(IPC::Listener* listener) { runner_->CreateProxy(listener); } 684 void CreateProxy(IPC::Listener* listener) { runner_->CreateProxy(listener); }
774 void RunProxy() { 685 void RunProxy() {
775 runner_->RunProxy(); 686 runner_->RunProxy();
776 } 687 }
777 void DestroyProxy() { 688 void DestroyProxy() {
778 runner_.reset(); 689 runner_.reset();
779 base::RunLoop().RunUntilIdle(); 690 base::RunLoop().RunUntilIdle();
780 } 691 }
781 692
782 IPC::ChannelProxy* proxy() { return runner_->proxy(); } 693 IPC::ChannelProxy* proxy() { return runner_->proxy(); }
783 694
784 private: 695 private:
785 base::MessageLoop message_loop_;
786 std::unique_ptr<ChannelProxyRunner> runner_; 696 std::unique_ptr<ChannelProxyRunner> runner_;
787 }; 697 };
788 698
789 class ListenerWithSimpleProxyAssociatedInterface 699 class ListenerWithSimpleProxyAssociatedInterface
790 : public IPC::Listener, 700 : public IPC::Listener,
791 public IPC::mojom::SimpleTestDriver { 701 public IPC::mojom::SimpleTestDriver {
792 public: 702 public:
793 static const int kNumMessages; 703 static const int kNumMessages;
794 704
795 ListenerWithSimpleProxyAssociatedInterface() : binding_(this) {} 705 ListenerWithSimpleProxyAssociatedInterface() : binding_(this) {}
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 int32_t next_expected_value_ = 0; 761 int32_t next_expected_value_ = 0;
852 int num_messages_received_ = 0; 762 int num_messages_received_ = 0;
853 bool received_quit_ = false; 763 bool received_quit_ = false;
854 764
855 mojo::AssociatedBinding<IPC::mojom::SimpleTestDriver> binding_; 765 mojo::AssociatedBinding<IPC::mojom::SimpleTestDriver> binding_;
856 }; 766 };
857 767
858 const int ListenerWithSimpleProxyAssociatedInterface::kNumMessages = 1000; 768 const int ListenerWithSimpleProxyAssociatedInterface::kNumMessages = 1000;
859 769
860 TEST_F(IPCChannelProxyMojoTest, ProxyThreadAssociatedInterface) { 770 TEST_F(IPCChannelProxyMojoTest, ProxyThreadAssociatedInterface) {
861 InitWithMojo("ProxyThreadAssociatedInterfaceClient"); 771 Init("ProxyThreadAssociatedInterfaceClient");
862 772
863 ListenerWithSimpleProxyAssociatedInterface listener; 773 ListenerWithSimpleProxyAssociatedInterface listener;
864 CreateProxy(&listener); 774 CreateProxy(&listener);
865 RunProxy(); 775 RunProxy();
866 776
867 base::RunLoop().Run(); 777 base::RunLoop().Run();
868 778
869 EXPECT_TRUE(WaitForClientShutdown()); 779 EXPECT_TRUE(WaitForClientShutdown());
870 EXPECT_TRUE(listener.received_all_messages()); 780 EXPECT_TRUE(listener.received_all_messages());
871 781
(...skipping 27 matching lines...) Expand all
899 base::MessageLoop message_loop_; 809 base::MessageLoop message_loop_;
900 std::unique_ptr<ChannelProxyRunner> runner_; 810 std::unique_ptr<ChannelProxyRunner> runner_;
901 }; 811 };
902 812
903 class DummyListener : public IPC::Listener { 813 class DummyListener : public IPC::Listener {
904 public: 814 public:
905 // IPC::Listener 815 // IPC::Listener
906 bool OnMessageReceived(const IPC::Message& message) override { return true; } 816 bool OnMessageReceived(const IPC::Message& message) override { return true; }
907 }; 817 };
908 818
909 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(ProxyThreadAssociatedInterfaceClient, 819 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE(
910 ChannelProxyClient) { 820 ProxyThreadAssociatedInterfaceClient,
821 ChannelProxyClient) {
911 DummyListener listener; 822 DummyListener listener;
912 CreateProxy(&listener); 823 CreateProxy(&listener);
913 RunProxy(); 824 RunProxy();
914 825
915 // Send a bunch of interleaved messages, alternating between the associated 826 // Send a bunch of interleaved messages, alternating between the associated
916 // interface and a legacy IPC::Message. 827 // interface and a legacy IPC::Message.
917 IPC::mojom::SimpleTestDriverAssociatedPtr driver; 828 IPC::mojom::SimpleTestDriverAssociatedPtr driver;
918 proxy()->GetRemoteAssociatedInterface(&driver); 829 proxy()->GetRemoteAssociatedInterface(&driver);
919 for (int i = 0; i < ListenerWithSimpleProxyAssociatedInterface::kNumMessages; 830 for (int i = 0; i < ListenerWithSimpleProxyAssociatedInterface::kNumMessages;
920 ++i) { 831 ++i) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 mojo::AssociatedBinding<IPC::mojom::PingReceiver> ping_receiver_binding_; 881 mojo::AssociatedBinding<IPC::mojom::PingReceiver> ping_receiver_binding_;
971 882
972 base::Closure ping_handler_; 883 base::Closure ping_handler_;
973 }; 884 };
974 885
975 TEST_F(IPCChannelProxyMojoTest, ProxyThreadAssociatedInterfaceIndirect) { 886 TEST_F(IPCChannelProxyMojoTest, ProxyThreadAssociatedInterfaceIndirect) {
976 // Tests that we can pipeline interface requests and subsequent messages 887 // Tests that we can pipeline interface requests and subsequent messages
977 // targeting proxy thread bindings, and the channel will still dispatch 888 // targeting proxy thread bindings, and the channel will still dispatch
978 // messages appropriately. 889 // messages appropriately.
979 890
980 InitWithMojo("ProxyThreadAssociatedInterfaceIndirectClient"); 891 Init("ProxyThreadAssociatedInterfaceIndirectClient");
981 892
982 ListenerWithIndirectProxyAssociatedInterface listener; 893 ListenerWithIndirectProxyAssociatedInterface listener;
983 CreateProxy(&listener); 894 CreateProxy(&listener);
984 listener.RegisterInterfaceFactory(proxy()); 895 listener.RegisterInterfaceFactory(proxy());
985 RunProxy(); 896 RunProxy();
986 897
987 base::RunLoop loop; 898 base::RunLoop loop;
988 listener.set_ping_handler(loop.QuitClosure()); 899 listener.set_ping_handler(loop.QuitClosure());
989 loop.Run(); 900 loop.Run();
990 901
991 EXPECT_TRUE(WaitForClientShutdown()); 902 EXPECT_TRUE(WaitForClientShutdown());
992 903
993 DestroyProxy(); 904 DestroyProxy();
994 } 905 }
995 906
996 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT( 907 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE(
997 ProxyThreadAssociatedInterfaceIndirectClient, 908 ProxyThreadAssociatedInterfaceIndirectClient,
998 ChannelProxyClient) { 909 ChannelProxyClient) {
999 DummyListener listener; 910 DummyListener listener;
1000 CreateProxy(&listener); 911 CreateProxy(&listener);
1001 RunProxy(); 912 RunProxy();
1002 913
1003 // Use an interface requested via another interface. On the remote end both 914 // Use an interface requested via another interface. On the remote end both
1004 // interfaces are bound on the proxy thread. This ensures that the Ping 915 // interfaces are bound on the proxy thread. This ensures that the Ping
1005 // message we send will still be dispatched properly even though the remote 916 // message we send will still be dispatched properly even though the remote
1006 // endpoint may not have been bound yet by the time the message is initially 917 // endpoint may not have been bound yet by the time the message is initially
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1103 return false; 1014 return false;
1104 return true; 1015 return true;
1105 } 1016 }
1106 1017
1107 int32_t* storage_; 1018 int32_t* storage_;
1108 1019
1109 DISALLOW_COPY_AND_ASSIGN(SyncReplyReader); 1020 DISALLOW_COPY_AND_ASSIGN(SyncReplyReader);
1110 }; 1021 };
1111 1022
1112 TEST_F(IPCChannelProxyMojoTest, SyncAssociatedInterface) { 1023 TEST_F(IPCChannelProxyMojoTest, SyncAssociatedInterface) {
1113 InitWithMojo("SyncAssociatedInterface"); 1024 Init("SyncAssociatedInterface");
1114 1025
1115 ListenerWithSyncAssociatedInterface listener; 1026 ListenerWithSyncAssociatedInterface listener;
1116 CreateProxy(&listener); 1027 CreateProxy(&listener);
1117 listener.set_sync_sender(proxy()); 1028 listener.set_sync_sender(proxy());
1118 listener.RegisterInterfaceFactory(proxy()); 1029 listener.RegisterInterfaceFactory(proxy());
1119 RunProxy(); 1030 RunProxy();
1120 1031
1121 // Run the client's simple sanity check to completion. 1032 // Run the client's simple sanity check to completion.
1122 listener.RunUntilQuitRequested(); 1033 listener.RunUntilQuitRequested();
1123 1034
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1209 1120
1210 bool use_sync_sender_ = false; 1121 bool use_sync_sender_ = false;
1211 mojo::AssociatedBinding<IPC::mojom::SimpleTestClient> binding_; 1122 mojo::AssociatedBinding<IPC::mojom::SimpleTestClient> binding_;
1212 IPC::Sender* sync_sender_ = nullptr; 1123 IPC::Sender* sync_sender_ = nullptr;
1213 IPC::mojom::SimpleTestDriver* driver_ = nullptr; 1124 IPC::mojom::SimpleTestDriver* driver_ = nullptr;
1214 std::unique_ptr<base::RunLoop> run_loop_; 1125 std::unique_ptr<base::RunLoop> run_loop_;
1215 1126
1216 DISALLOW_COPY_AND_ASSIGN(SimpleTestClientImpl); 1127 DISALLOW_COPY_AND_ASSIGN(SimpleTestClientImpl);
1217 }; 1128 };
1218 1129
1219 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(SyncAssociatedInterface, 1130 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE(SyncAssociatedInterface,
1220 ChannelProxyClient) { 1131 ChannelProxyClient) {
1221 SimpleTestClientImpl client_impl; 1132 SimpleTestClientImpl client_impl;
1222 CreateProxy(&client_impl); 1133 CreateProxy(&client_impl);
1223 client_impl.set_sync_sender(proxy()); 1134 client_impl.set_sync_sender(proxy());
1224 proxy()->AddAssociatedInterface(base::Bind(&SimpleTestClientImpl::BindRequest, 1135 proxy()->AddAssociatedInterface(base::Bind(&SimpleTestClientImpl::BindRequest,
1225 base::Unretained(&client_impl))); 1136 base::Unretained(&client_impl)));
1226 RunProxy(); 1137 RunProxy();
1227 1138
1228 IPC::mojom::SimpleTestDriverAssociatedPtr driver; 1139 IPC::mojom::SimpleTestDriverAssociatedPtr driver;
1229 proxy()->GetRemoteAssociatedInterface(&driver); 1140 proxy()->GetRemoteAssociatedInterface(&driver);
1230 client_impl.set_driver(driver.get()); 1141 client_impl.set_driver(driver.get());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1269 // Send(E) 1180 // Send(E)
1270 // Flush() 1181 // Flush()
1271 // 1182 //
1272 // must result in the other end receiving messages A, D, E, B, D; in that 1183 // must result in the other end receiving messages A, D, E, B, D; in that
1273 // order. 1184 // order.
1274 // 1185 //
1275 // This behavior is required by some consumers of IPC::Channel, and it is not 1186 // This behavior is required by some consumers of IPC::Channel, and it is not
1276 // sufficient to leave this up to the consumer to implement since associated 1187 // sufficient to leave this up to the consumer to implement since associated
1277 // interface requests and messages also need to be queued according to the 1188 // interface requests and messages also need to be queued according to the
1278 // same policy. 1189 // same policy.
1279 InitWithMojo("CreatePausedClient"); 1190 Init("CreatePausedClient");
1280 1191
1281 DummyListener listener; 1192 DummyListener listener;
1282 CreateProxy(&listener); 1193 CreateProxy(&listener);
1283 RunProxy(); 1194 RunProxy();
1284 1195
1285 // This message must be sent immediately since the channel is unpaused. 1196 // This message must be sent immediately since the channel is unpaused.
1286 SendValue(proxy(), 1); 1197 SendValue(proxy(), 1);
1287 1198
1288 proxy()->Pause(); 1199 proxy()->Pause();
1289 1200
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1322 base::MessageLoop::current()->QuitWhenIdle(); 1233 base::MessageLoop::current()->QuitWhenIdle();
1323 return true; 1234 return true;
1324 } 1235 }
1325 1236
1326 private: 1237 private:
1327 std::queue<int32_t>* expected_values_; 1238 std::queue<int32_t>* expected_values_;
1328 1239
1329 DISALLOW_COPY_AND_ASSIGN(ExpectValueSequenceListener); 1240 DISALLOW_COPY_AND_ASSIGN(ExpectValueSequenceListener);
1330 }; 1241 };
1331 1242
1332 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(CreatePausedClient, ChannelProxyClient) { 1243 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT_WITH_CUSTOM_FIXTURE(CreatePausedClient,
1244 ChannelProxyClient) {
1333 std::queue<int32_t> expected_values; 1245 std::queue<int32_t> expected_values;
1334 ExpectValueSequenceListener listener(&expected_values); 1246 ExpectValueSequenceListener listener(&expected_values);
1335 CreateProxy(&listener); 1247 CreateProxy(&listener);
1336 expected_values.push(1); 1248 expected_values.push(1);
1337 expected_values.push(4); 1249 expected_values.push(4);
1338 expected_values.push(5); 1250 expected_values.push(5);
1339 expected_values.push(2); 1251 expected_values.push(2);
1340 expected_values.push(3); 1252 expected_values.push(3);
1341 RunProxy(); 1253 RunProxy();
1342 base::RunLoop().Run(); 1254 base::RunLoop().Run();
(...skipping 20 matching lines...) Expand all
1363 base::MessageLoop::current()->QuitWhenIdle(); 1275 base::MessageLoop::current()->QuitWhenIdle();
1364 } 1276 }
1365 1277
1366 void set_sender(IPC::Sender* sender) { sender_ = sender; } 1278 void set_sender(IPC::Sender* sender) { sender_ = sender; }
1367 1279
1368 private: 1280 private:
1369 IPC::Sender* sender_; 1281 IPC::Sender* sender_;
1370 }; 1282 };
1371 1283
1372 TEST_F(IPCChannelMojoTest, SendPlatformHandle) { 1284 TEST_F(IPCChannelMojoTest, SendPlatformHandle) {
1373 InitWithMojo("IPCChannelMojoTestSendPlatformHandleClient"); 1285 Init("IPCChannelMojoTestSendPlatformHandleClient");
1374 1286
1375 ListenerThatExpectsOK listener; 1287 ListenerThatExpectsOK listener;
1376 CreateChannel(&listener); 1288 CreateChannel(&listener);
1377 ASSERT_TRUE(ConnectChannel()); 1289 ASSERT_TRUE(ConnectChannel());
1378 1290
1379 base::ScopedTempDir temp_dir; 1291 base::ScopedTempDir temp_dir;
1380 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 1292 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
1381 base::File file(HandleSendingHelper::GetSendingFilePath(temp_dir.GetPath()), 1293 base::File file(HandleSendingHelper::GetSendingFilePath(temp_dir.GetPath()),
1382 base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE | 1294 base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE |
1383 base::File::FLAG_READ); 1295 base::File::FLAG_READ);
1384 HandleSendingHelper::WriteFileThenSend(channel(), file); 1296 HandleSendingHelper::WriteFileThenSend(channel(), file);
1385 base::RunLoop().Run(); 1297 base::RunLoop().Run();
1386 1298
1387 channel()->Close(); 1299 channel()->Close();
1388 1300
1389 EXPECT_TRUE(WaitForClientShutdown()); 1301 EXPECT_TRUE(WaitForClientShutdown());
1390 DestroyChannel(); 1302 DestroyChannel();
1391 } 1303 }
1392 1304
1393 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestSendPlatformHandleClient, 1305 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(
1394 ChannelClient) { 1306 IPCChannelMojoTestSendPlatformHandleClient) {
1395 ListenerThatExpectsFile listener; 1307 ListenerThatExpectsFile listener;
1396 Connect(&listener); 1308 Connect(&listener);
1397 listener.set_sender(channel()); 1309 listener.set_sender(channel());
1398 1310
1399 base::RunLoop().Run(); 1311 base::RunLoop().Run();
1400 1312
1401 Close(); 1313 Close();
1402 } 1314 }
1403 1315
1404 class ListenerThatExpectsFileAndPipe : public IPC::Listener { 1316 class ListenerThatExpectsFileAndPipe : public IPC::Listener {
(...skipping 14 matching lines...) Expand all
1419 base::MessageLoop::current()->QuitWhenIdle(); 1331 base::MessageLoop::current()->QuitWhenIdle();
1420 } 1332 }
1421 1333
1422 void set_sender(IPC::Sender* sender) { sender_ = sender; } 1334 void set_sender(IPC::Sender* sender) { sender_ = sender; }
1423 1335
1424 private: 1336 private:
1425 IPC::Sender* sender_; 1337 IPC::Sender* sender_;
1426 }; 1338 };
1427 1339
1428 TEST_F(IPCChannelMojoTest, SendPlatformHandleAndPipe) { 1340 TEST_F(IPCChannelMojoTest, SendPlatformHandleAndPipe) {
1429 InitWithMojo("IPCChannelMojoTestSendPlatformHandleAndPipeClient"); 1341 Init("IPCChannelMojoTestSendPlatformHandleAndPipeClient");
1430 1342
1431 ListenerThatExpectsOK listener; 1343 ListenerThatExpectsOK listener;
1432 CreateChannel(&listener); 1344 CreateChannel(&listener);
1433 ASSERT_TRUE(ConnectChannel()); 1345 ASSERT_TRUE(ConnectChannel());
1434 1346
1435 base::ScopedTempDir temp_dir; 1347 base::ScopedTempDir temp_dir;
1436 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 1348 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
1437 base::File file(HandleSendingHelper::GetSendingFilePath(temp_dir.GetPath()), 1349 base::File file(HandleSendingHelper::GetSendingFilePath(temp_dir.GetPath()),
1438 base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE | 1350 base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE |
1439 base::File::FLAG_READ); 1351 base::File::FLAG_READ);
1440 TestingMessagePipe pipe; 1352 TestingMessagePipe pipe;
1441 HandleSendingHelper::WriteFileAndPipeThenSend(channel(), file, &pipe); 1353 HandleSendingHelper::WriteFileAndPipeThenSend(channel(), file, &pipe);
1442 1354
1443 base::RunLoop().Run(); 1355 base::RunLoop().Run();
1444 channel()->Close(); 1356 channel()->Close();
1445 1357
1446 EXPECT_TRUE(WaitForClientShutdown()); 1358 EXPECT_TRUE(WaitForClientShutdown());
1447 DestroyChannel(); 1359 DestroyChannel();
1448 } 1360 }
1449 1361
1450 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT( 1362 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(
1451 IPCChannelMojoTestSendPlatformHandleAndPipeClient, 1363 IPCChannelMojoTestSendPlatformHandleAndPipeClient) {
1452 ChannelClient) {
1453 ListenerThatExpectsFileAndPipe listener; 1364 ListenerThatExpectsFileAndPipe listener;
1454 Connect(&listener); 1365 Connect(&listener);
1455 listener.set_sender(channel()); 1366 listener.set_sender(channel());
1456 1367
1457 base::RunLoop().Run(); 1368 base::RunLoop().Run();
1458 1369
1459 Close(); 1370 Close();
1460 } 1371 }
1461 1372
1462 #endif // defined(OS_POSIX) 1373 #endif // defined(OS_POSIX)
1463 1374
1464 #if defined(OS_LINUX) 1375 #if defined(OS_LINUX)
1465 1376
1466 const base::ProcessId kMagicChildId = 54321; 1377 const base::ProcessId kMagicChildId = 54321;
1467 1378
1468 class ListenerThatVerifiesPeerPid : public IPC::Listener { 1379 class ListenerThatVerifiesPeerPid : public IPC::Listener {
1469 public: 1380 public:
1470 void OnChannelConnected(int32_t peer_pid) override { 1381 void OnChannelConnected(int32_t peer_pid) override {
1471 EXPECT_EQ(peer_pid, kMagicChildId); 1382 EXPECT_EQ(peer_pid, kMagicChildId);
1472 base::MessageLoop::current()->QuitWhenIdle(); 1383 base::MessageLoop::current()->QuitWhenIdle();
1473 } 1384 }
1474 1385
1475 bool OnMessageReceived(const IPC::Message& message) override { 1386 bool OnMessageReceived(const IPC::Message& message) override {
1476 NOTREACHED(); 1387 NOTREACHED();
1477 return true; 1388 return true;
1478 } 1389 }
1479 }; 1390 };
1480 1391
1481 TEST_F(IPCChannelMojoTest, VerifyGlobalPid) { 1392 TEST_F(IPCChannelMojoTest, VerifyGlobalPid) {
1482 InitWithMojo("IPCChannelMojoTestVerifyGlobalPidClient"); 1393 Init("IPCChannelMojoTestVerifyGlobalPidClient");
1483 1394
1484 ListenerThatVerifiesPeerPid listener; 1395 ListenerThatVerifiesPeerPid listener;
1485 CreateChannel(&listener); 1396 CreateChannel(&listener);
1486 ASSERT_TRUE(ConnectChannel()); 1397 ASSERT_TRUE(ConnectChannel());
1487 1398
1488 base::RunLoop().Run(); 1399 base::RunLoop().Run();
1489 channel()->Close(); 1400 channel()->Close();
1490 1401
1491 EXPECT_TRUE(WaitForClientShutdown()); 1402 EXPECT_TRUE(WaitForClientShutdown());
1492 DestroyChannel(); 1403 DestroyChannel();
1493 } 1404 }
1494 1405
1495 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestVerifyGlobalPidClient, 1406 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(IPCChannelMojoTestVerifyGlobalPidClient) {
1496 ChannelClient) {
1497 IPC::Channel::SetGlobalPid(kMagicChildId); 1407 IPC::Channel::SetGlobalPid(kMagicChildId);
1498 ListenerThatQuits listener; 1408 ListenerThatQuits listener;
1499 Connect(&listener); 1409 Connect(&listener);
1500 1410
1501 base::RunLoop().Run(); 1411 base::RunLoop().Run();
1502 1412
1503 Close(); 1413 Close();
1504 } 1414 }
1505 1415
1506 #endif // OS_LINUX 1416 #endif // OS_LINUX
1507 1417
1508 } // namespace 1418 } // namespace
OLDNEW
« no previous file with comments | « ipc/DEPS ('k') | ipc/ipc_channel_proxy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698