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

Unified Diff: mojo/edk/system/channel.h

Issue 664763002: Mojo: Change the way message pipes are passed over channels. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git/+/master
Patch Set: Created 6 years, 2 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | mojo/edk/system/channel.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/edk/system/channel.h
diff --git a/mojo/edk/system/channel.h b/mojo/edk/system/channel.h
index 57bd9ce661eb966809675d782528b7a6aed26441..c09f4c0117270cc37eb3780af8a9f14269dde1c2 100644
--- a/mojo/edk/system/channel.h
+++ b/mojo/edk/system/channel.h
@@ -80,24 +80,22 @@ class MOJO_SYSTEM_IMPL_EXPORT Channel
// Attaches the given endpoint to this channel and runs it. |is_bootstrap|
// should be set if and only if it is the first endpoint on the channel. This
// assigns the endpoint both local and remote IDs. If |is_bootstrap| is set,
- // both are the bootstrap ID (given by |ChannelEndpointId::GetBootstrap()|).
+ // both are the bootstrap ID (given by |ChannelEndpointId::GetBootstrap()|);
+ // if not, it will also send a |kSubtypeChannelAttachAndRunEndpoint| message
+ // to the remote side to tell it to create an endpoint as well.
//
// (Bootstrapping is symmetric: Both sides attach and run endpoints with
// |is_bootstrap| set, which establishes the first message pipe across a
// channel.)
//
+ // This returns the *remote* ID (which will be the bootstrap ID in the
+ // bootstrap case, and a "remote ID", i.e., one for which |is_remote()|
+ // returns true, otherwise).
+ //
// TODO(vtl): Maybe limit the number of attached message pipes.
- void AttachAndRunEndpoint(scoped_refptr<ChannelEndpoint> endpoint,
- bool is_bootstrap);
-
- // Tells the other side of the channel to run a message pipe endpoint (which
- // must already be attached); |local_id| and |remote_id| are relative to this
- // channel (i.e., |local_id| is the other side's remote ID and |remote_id| is
- // its local ID).
- // TODO(vtl): Maybe we should just have a flag argument to
- // |RunMessagePipeEndpoint()| that tells it to do this.
- void RunRemoteMessagePipeEndpoint(ChannelEndpointId local_id,
- ChannelEndpointId remote_id);
+ ChannelEndpointId AttachAndRunEndpoint(
+ scoped_refptr<ChannelEndpoint> endpoint,
+ bool is_bootstrap);
// This forwards |message| verbatim to |raw_channel_|.
bool WriteMessage(scoped_ptr<MessageInTransit> message);
@@ -107,15 +105,20 @@ class MOJO_SYSTEM_IMPL_EXPORT Channel
// |FlushWriteBufferAndShutdown()| or something like that.
bool IsWriteBufferEmpty();
- // This removes the given endpoint from this channel (|local_id| and
- // |remote_id| are specified as an optimization; the latter should be an
- // invalid |ChannelEndpointId| if the endpoint is not yet running). Note: If
- // this is called, the |Channel| will *not* call
+ // Removes the given endpoint from this channel (|local_id| and |remote_id|
+ // are specified as an optimization; the latter should be an invalid
+ // |ChannelEndpointId| if the endpoint is not yet running). Note: If this is
+ // called, the |Channel| will *not* call
// |ChannelEndpoint::DetachFromChannel()|.
void DetachEndpoint(ChannelEndpoint* endpoint,
ChannelEndpointId local_id,
ChannelEndpointId remote_id);
+ // Takes ownership of an incoming message pipe (i.e., one that was created via
+ // a |kSubtypeChannelAttachAndRunEndpoint| message).
+ scoped_refptr<MessagePipe> PassIncomingMessagePipe(
+ ChannelEndpointId local_id);
+
// See |RawChannel::GetSerializedPlatformHandleSize()|.
size_t GetSerializedPlatformHandleSize() const;
@@ -141,9 +144,9 @@ class MOJO_SYSTEM_IMPL_EXPORT Channel
const MessageInTransit::View& message_view,
embedder::ScopedPlatformHandleVectorPtr platform_handles);
- // Handles "run message pipe endpoint" messages.
- bool OnRunMessagePipeEndpoint(ChannelEndpointId local_id,
- ChannelEndpointId remote_id);
+ // Handles "attach and run endpoint" messages.
+ bool OnAttachAndRunEndpoint(ChannelEndpointId local_id,
+ ChannelEndpointId remote_id);
// Handles "remove message pipe endpoint" messages.
bool OnRemoveMessagePipeEndpoint(ChannelEndpointId local_id,
ChannelEndpointId remote_id);
@@ -186,6 +189,11 @@ class MOJO_SYSTEM_IMPL_EXPORT Channel
// Note: The IDs generated by this should be checked for existence before use.
LocalChannelEndpointIdGenerator local_id_generator_;
+ typedef base::hash_map<ChannelEndpointId, scoped_refptr<MessagePipe>>
+ IdToMessagePipeMap;
+ // Map from local IDs to pending/incoming endpoints (i.e., those which do not
+ // yet have a dispatcher attached).
+ IdToMessagePipeMap incoming_message_pipes_;
// TODO(vtl): We need to keep track of remote IDs (so that we don't collide
// if/when we wrap).
RemoteChannelEndpointIdGenerator remote_id_generator_;
« no previous file with comments | « no previous file | mojo/edk/system/channel.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698