| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MOJO_EDK_TEST_SCOPED_IPC_SUPPORT_H_ |
| #define MOJO_EDK_TEST_SCOPED_IPC_SUPPORT_H_ |
| |
| #include "base/callback.h" |
| #include "mojo/edk/embedder/master_process_delegate.h" |
| #include "mojo/edk/embedder/platform_task_runner.h" |
| #include "mojo/edk/embedder/process_delegate.h" |
| #include "mojo/edk/embedder/process_type.h" |
| #include "mojo/edk/embedder/scoped_platform_handle.h" |
| #include "mojo/edk/embedder/slave_process_delegate.h" |
| #include "mojo/edk/util/waitable_event.h" |
| #include "mojo/public/cpp/system/macros.h" |
| |
| namespace mojo { |
| namespace test { |
| |
| namespace internal { |
| |
| class ScopedIPCSupportHelper final { |
| public: |
| ScopedIPCSupportHelper(); |
| ~ScopedIPCSupportHelper(); |
| |
| void Init(embedder::ProcessType process_type, |
| embedder::ProcessDelegate* process_delegate, |
| embedder::PlatformTaskRunnerRefPtr, |
| embedder::ScopedPlatformHandle platform_handle); |
| |
| void OnShutdownCompleteImpl(); |
| |
| private: |
| embedder::PlatformTaskRunnerRefPtr io_thread_task_runner_; |
| |
| // Set after shut down. |
| util::ManualResetWaitableEvent event_; |
| |
| MOJO_DISALLOW_COPY_AND_ASSIGN(ScopedIPCSupportHelper); |
| }; |
| |
| } // namespace internal |
| |
| // A simple class that calls |mojo::embedder::InitIPCSupport()| (with |
| // |ProcessType::NONE|) on construction and |ShutdownIPCSupport()| on |
| // destruction (or |ShutdownIPCSupportOnIOThread()| if destroyed on the I/O |
| // thread). |
| class ScopedIPCSupport final : public embedder::ProcessDelegate { |
| public: |
| explicit ScopedIPCSupport( |
| embedder::PlatformTaskRunnerRefPtr io_thread_task_runner); |
| ~ScopedIPCSupport() override; |
| |
| private: |
| // |ProcessDelegate| implementation: |
| // Note: Executed on the I/O thread. |
| void OnShutdownComplete() override; |
| |
| internal::ScopedIPCSupportHelper helper_; |
| |
| MOJO_DISALLOW_COPY_AND_ASSIGN(ScopedIPCSupport); |
| }; |
| |
| // Like |ScopedIPCSupport|, but with |ProcessType::MASTER|. It will (optionally) |
| // call a callback (on the I/O thread) on receiving |OnSlaveDisconnect()|. |
| class ScopedMasterIPCSupport final : public embedder::MasterProcessDelegate { |
| public: |
| explicit ScopedMasterIPCSupport( |
| embedder::PlatformTaskRunnerRefPtr io_thread_task_runner); |
| ScopedMasterIPCSupport( |
| embedder::PlatformTaskRunnerRefPtr io_thread_task_runner, |
| base::Callback<void(embedder::SlaveInfo slave_info)> on_slave_disconnect); |
| ~ScopedMasterIPCSupport() override; |
| |
| private: |
| // |MasterProcessDelegate| implementation: |
| // Note: Executed on the I/O thread. |
| void OnShutdownComplete() override; |
| void OnSlaveDisconnect(embedder::SlaveInfo slave_info) override; |
| |
| internal::ScopedIPCSupportHelper helper_; |
| base::Callback<void(embedder::SlaveInfo slave_info)> on_slave_disconnect_; |
| |
| MOJO_DISALLOW_COPY_AND_ASSIGN(ScopedMasterIPCSupport); |
| }; |
| |
| // Like |ScopedIPCSupport|, but with |ProcessType::SLAVE|. It will (optionally) |
| // call a callback (on the I/O thread) on receiving |OnMasterDisconnect()|. |
| class ScopedSlaveIPCSupport final : public embedder::SlaveProcessDelegate { |
| public: |
| ScopedSlaveIPCSupport( |
| embedder::PlatformTaskRunnerRefPtr io_thread_task_runner, |
| embedder::ScopedPlatformHandle platform_handle); |
| ScopedSlaveIPCSupport( |
| embedder::PlatformTaskRunnerRefPtr io_thread_task_runner, |
| embedder::ScopedPlatformHandle platform_handle, |
| base::Closure on_master_disconnect); |
| ~ScopedSlaveIPCSupport() override; |
| |
| private: |
| // |SlaveProcessDelegate| implementation: |
| // Note: Executed on the I/O thread. |
| void OnShutdownComplete() override; |
| void OnMasterDisconnect() override; |
| |
| internal::ScopedIPCSupportHelper helper_; |
| base::Closure on_master_disconnect_; |
| |
| MOJO_DISALLOW_COPY_AND_ASSIGN(ScopedSlaveIPCSupport); |
| }; |
| |
| } // namespace test |
| } // namespace mojo |
| |
| #endif // MOJO_EDK_TEST_SCOPED_IPC_SUPPORT_H_ |