| 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 "build/build_config.h" | 5 #include "build/build_config.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 ~MessageCountFilter() override {} | 225 ~MessageCountFilter() override {} |
| 226 | 226 |
| 227 size_t messages_received_; | 227 size_t messages_received_; |
| 228 uint32_t supported_message_class_; | 228 uint32_t supported_message_class_; |
| 229 bool is_global_filter_; | 229 bool is_global_filter_; |
| 230 | 230 |
| 231 FilterEvent last_filter_event_; | 231 FilterEvent last_filter_event_; |
| 232 bool message_filtering_enabled_; | 232 bool message_filtering_enabled_; |
| 233 }; | 233 }; |
| 234 | 234 |
| 235 class IPCChannelProxyTest : public IPCChannelMojoTestBase { | 235 class IPCChannelProxyTest : public IPCTestBase { |
| 236 public: | 236 public: |
| 237 IPCChannelProxyTest() {} | 237 IPCChannelProxyTest() {} |
| 238 ~IPCChannelProxyTest() override {} | 238 ~IPCChannelProxyTest() override {} |
| 239 | 239 |
| 240 void SetUp() override { | 240 void SetUp() override { |
| 241 IPCChannelMojoTestBase::SetUp(); | 241 IPCTestBase::SetUp(); |
| 242 | 242 |
| 243 Init("ChannelProxyClient"); | 243 Init("ChannelProxyClient"); |
| 244 | 244 |
| 245 thread_.reset(new base::Thread("ChannelProxyTestServerThread")); | 245 thread_.reset(new base::Thread("ChannelProxyTestServerThread")); |
| 246 base::Thread::Options options; | 246 base::Thread::Options options; |
| 247 options.message_loop_type = base::MessageLoop::TYPE_IO; | 247 options.message_loop_type = base::MessageLoop::TYPE_IO; |
| 248 thread_->StartWithOptions(options); | 248 thread_->StartWithOptions(options); |
| 249 | 249 |
| 250 listener_.reset(new QuitListener()); | 250 listener_.reset(new QuitListener()); |
| 251 channel_proxy_ = IPC::ChannelProxy::Create( | 251 CreateChannelProxy(listener_.get(), thread_->task_runner().get()); |
| 252 TakeHandle().release(), IPC::Channel::MODE_SERVER, listener_.get(), | 252 |
| 253 thread_->task_runner()); | 253 ASSERT_TRUE(StartClient()); |
| 254 } | 254 } |
| 255 | 255 |
| 256 void TearDown() override { | 256 void TearDown() override { |
| 257 channel_proxy_.reset(); | 257 DestroyChannelProxy(); |
| 258 thread_.reset(); | 258 thread_.reset(); |
| 259 listener_.reset(); | 259 listener_.reset(); |
| 260 IPCChannelMojoTestBase::TearDown(); | 260 IPCTestBase::TearDown(); |
| 261 } | 261 } |
| 262 | 262 |
| 263 void SendQuitMessageAndWaitForIdle() { | 263 void SendQuitMessageAndWaitForIdle() { |
| 264 sender()->Send(new WorkerMsg_Quit); | 264 sender()->Send(new WorkerMsg_Quit); |
| 265 base::RunLoop().Run(); | 265 base::RunLoop().Run(); |
| 266 EXPECT_TRUE(WaitForClientShutdown()); | 266 EXPECT_TRUE(WaitForClientShutdown()); |
| 267 } | 267 } |
| 268 | 268 |
| 269 bool DidListenerGetBadMessage() { | 269 bool DidListenerGetBadMessage() { |
| 270 return listener_->bad_message_received_; | 270 return listener_->bad_message_received_; |
| 271 } | 271 } |
| 272 | 272 |
| 273 IPC::ChannelProxy* channel_proxy() { return channel_proxy_.get(); } | |
| 274 IPC::Sender* sender() { return channel_proxy_.get(); } | |
| 275 | |
| 276 private: | 273 private: |
| 277 std::unique_ptr<base::Thread> thread_; | 274 std::unique_ptr<base::Thread> thread_; |
| 278 std::unique_ptr<QuitListener> listener_; | 275 std::unique_ptr<QuitListener> listener_; |
| 279 std::unique_ptr<IPC::ChannelProxy> channel_proxy_; | |
| 280 }; | 276 }; |
| 281 | 277 |
| 282 TEST_F(IPCChannelProxyTest, MessageClassFilters) { | 278 TEST_F(IPCChannelProxyTest, MessageClassFilters) { |
| 283 // Construct a filter per message class. | 279 // Construct a filter per message class. |
| 284 std::vector<scoped_refptr<MessageCountFilter> > class_filters; | 280 std::vector<scoped_refptr<MessageCountFilter> > class_filters; |
| 285 class_filters.push_back(make_scoped_refptr( | 281 class_filters.push_back(make_scoped_refptr( |
| 286 new MessageCountFilter(TestMsgStart))); | 282 new MessageCountFilter(TestMsgStart))); |
| 287 class_filters.push_back(make_scoped_refptr( | 283 class_filters.push_back(make_scoped_refptr( |
| 288 new MessageCountFilter(UtilityMsgStart))); | 284 new MessageCountFilter(UtilityMsgStart))); |
| 289 for (size_t i = 0; i < class_filters.size(); ++i) | 285 for (size_t i = 0; i < class_filters.size(); ++i) |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 // TODO(jam): for some reason this is flaky on win buildbots. | 418 // TODO(jam): for some reason this is flaky on win buildbots. |
| 423 TEST_F(IPCChannelBadMessageTest, BadMessage) { | 419 TEST_F(IPCChannelBadMessageTest, BadMessage) { |
| 424 sender()->Send(new TestMsg_SendBadMessage()); | 420 sender()->Send(new TestMsg_SendBadMessage()); |
| 425 SendQuitMessageAndWaitForIdle(); | 421 SendQuitMessageAndWaitForIdle(); |
| 426 EXPECT_TRUE(DidListenerGetBadMessage()); | 422 EXPECT_TRUE(DidListenerGetBadMessage()); |
| 427 } | 423 } |
| 428 #endif | 424 #endif |
| 429 | 425 |
| 430 #endif | 426 #endif |
| 431 | 427 |
| 432 DEFINE_IPC_CHANNEL_MOJO_TEST_CLIENT(ChannelProxyClient) { | 428 MULTIPROCESS_IPC_TEST_CLIENT_MAIN(ChannelProxyClient) { |
| 429 base::MessageLoopForIO main_message_loop; |
| 433 ChannelReflectorListener listener; | 430 ChannelReflectorListener listener; |
| 434 Connect(&listener); | 431 std::unique_ptr<IPC::Channel> channel(IPC::Channel::CreateClient( |
| 435 listener.Init(channel()); | 432 IPCTestBase::GetChannelName("ChannelProxyClient"), &listener, |
| 433 main_message_loop.task_runner())); |
| 434 CHECK(channel->Connect()); |
| 435 listener.Init(channel.get()); |
| 436 | 436 |
| 437 base::RunLoop().Run(); | 437 base::RunLoop().Run(); |
| 438 Close(); | 438 return 0; |
| 439 } | 439 } |
| 440 | 440 |
| 441 } // namespace | 441 } // namespace |
| OLD | NEW |