| Index: mojo/edk/system/remote_message_pipe_bootstrap.h
|
| diff --git a/mojo/edk/system/remote_message_pipe_bootstrap.h b/mojo/edk/system/remote_message_pipe_bootstrap.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..00139ed6f587a73bad1f809c3f3c5528df793870
|
| --- /dev/null
|
| +++ b/mojo/edk/system/remote_message_pipe_bootstrap.h
|
| @@ -0,0 +1,76 @@
|
| +// Copyright 2016 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_SYSTEM_REMOTE_MESSAGE_PIPE_BOOTSTRAP_H_
|
| +#define MOJO_EDK_SYSTEM_REMOTE_MESSAGE_PIPE_BOOTSTRAP_H_
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/macros.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "base/task_runner.h"
|
| +#include "mojo/edk/embedder/scoped_platform_handle.h"
|
| +#include "mojo/edk/system/channel.h"
|
| +#include "mojo/edk/system/ports/port_ref.h"
|
| +
|
| +namespace mojo {
|
| +namespace edk {
|
| +
|
| +class NodeController;
|
| +
|
| +// This is used by Core to negotiate a new cross-process message pipe given
|
| +// an arbitrary platform channel. One end of the channel must be passed to
|
| +// CreateForParent() in the parent process, and the other end must be passed to
|
| +// CreateForChild() in the child process.
|
| +class RemoteMessagePipeBootstrap
|
| + : public Channel::Delegate,
|
| + public base::MessageLoop::DestructionObserver {
|
| + public:
|
| + ~RemoteMessagePipeBootstrap() override;
|
| +
|
| + // The NodeController should already have reserved a local port for |token|
|
| + // before calling this method.
|
| + static void CreateForParent(NodeController* node_controller,
|
| + ScopedPlatformHandle platform_handle,
|
| + const std::string& token);
|
| +
|
| + // |port| must be a reference to an uninitialized local port.
|
| + static void CreateForChild(NodeController* node_controller,
|
| + ScopedPlatformHandle platform_handle,
|
| + const ports::PortRef& port,
|
| + const base::Closure& callback);
|
| +
|
| + // Handle a received token.
|
| + virtual void OnTokenReceived(const std::string& token) = 0;
|
| +
|
| + protected:
|
| + explicit RemoteMessagePipeBootstrap(ScopedPlatformHandle platform_handle);
|
| +
|
| + void ShutDown();
|
| +
|
| + bool shutting_down_ = false;
|
| + scoped_refptr<base::TaskRunner> io_task_runner_;
|
| + scoped_refptr<Channel> channel_;
|
| +
|
| + private:
|
| + // base::MessageLoop::DestructionObserver:
|
| + void WillDestroyCurrentMessageLoop() override;
|
| +
|
| + // Channel::Delegate:
|
| + void OnChannelMessage(const void* payload,
|
| + size_t payload_size,
|
| + ScopedPlatformHandleVectorPtr handles) override;
|
| + void OnChannelError() override;
|
| +
|
| + void ShutDownNow();
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(RemoteMessagePipeBootstrap);
|
| +};
|
| +
|
| +} // namespace edk
|
| +} // namespace mojo
|
| +
|
| +#endif // MOJO_EDK_SYSTEM_REMOTE_MESSAGE_PIPE_BOOTSTRAP_H_
|
|
|