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

Side by Side Diff: mojo/edk/system/channel.h

Issue 1396783004: Convert mojo::system::ChannelEndpointClient to use our new refcounting stuff (instead of base's). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 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 unified diff | Download patch
« no previous file with comments | « no previous file | mojo/edk/system/channel.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #ifndef MOJO_EDK_SYSTEM_CHANNEL_H_ 5 #ifndef MOJO_EDK_SYSTEM_CHANNEL_H_
6 #define MOJO_EDK_SYSTEM_CHANNEL_H_ 6 #define MOJO_EDK_SYSTEM_CHANNEL_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
11 #include <unordered_map> 11 #include <unordered_map>
12 12
13 #include "base/memory/ref_counted.h"
14 #include "base/threading/thread_checker.h" 13 #include "base/threading/thread_checker.h"
15 #include "mojo/edk/embedder/scoped_platform_handle.h" 14 #include "mojo/edk/embedder/scoped_platform_handle.h"
16 #include "mojo/edk/system/channel_endpoint.h" 15 #include "mojo/edk/system/channel_endpoint.h"
17 #include "mojo/edk/system/channel_endpoint_id.h" 16 #include "mojo/edk/system/channel_endpoint_id.h"
18 #include "mojo/edk/system/incoming_endpoint.h" 17 #include "mojo/edk/system/incoming_endpoint.h"
19 #include "mojo/edk/system/message_in_transit.h" 18 #include "mojo/edk/system/message_in_transit.h"
20 #include "mojo/edk/system/mutex.h" 19 #include "mojo/edk/system/mutex.h"
21 #include "mojo/edk/system/raw_channel.h" 20 #include "mojo/edk/system/raw_channel.h"
22 #include "mojo/edk/system/ref_counted.h" 21 #include "mojo/edk/system/ref_counted.h"
23 #include "mojo/edk/system/ref_ptr.h" 22 #include "mojo/edk/system/ref_ptr.h"
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 // Case 3: The endpoint's peer is remote (i.e., it has a peer 145 // Case 3: The endpoint's peer is remote (i.e., it has a peer
147 // |ChannelEndpoint|). (This has two subcases: the peer endpoint may be on 146 // |ChannelEndpoint|). (This has two subcases: the peer endpoint may be on
148 // this |Channel| or another |Channel|.) 147 // this |Channel| or another |Channel|.)
149 void SerializeEndpointWithClosedPeer(void* destination, 148 void SerializeEndpointWithClosedPeer(void* destination,
150 MessageInTransitQueue* message_queue); 149 MessageInTransitQueue* message_queue);
151 // This one returns the |ChannelEndpoint| for the serialized endpoint (which 150 // This one returns the |ChannelEndpoint| for the serialized endpoint (which
152 // can be used by, e.g., a |ProxyMessagePipeEndpoint|. 151 // can be used by, e.g., a |ProxyMessagePipeEndpoint|.
153 RefPtr<ChannelEndpoint> SerializeEndpointWithLocalPeer( 152 RefPtr<ChannelEndpoint> SerializeEndpointWithLocalPeer(
154 void* destination, 153 void* destination,
155 MessageInTransitQueue* message_queue, 154 MessageInTransitQueue* message_queue,
156 ChannelEndpointClient* endpoint_client, 155 RefPtr<ChannelEndpointClient>&& endpoint_client,
157 unsigned endpoint_client_port); 156 unsigned endpoint_client_port);
158 void SerializeEndpointWithRemotePeer(void* destination, 157 void SerializeEndpointWithRemotePeer(void* destination,
159 MessageInTransitQueue* message_queue, 158 MessageInTransitQueue* message_queue,
160 RefPtr<ChannelEndpoint>&& peer_endpoint); 159 RefPtr<ChannelEndpoint>&& peer_endpoint);
161 160
162 // Deserializes an endpoint that was sent from the peer |Channel| (using 161 // Deserializes an endpoint that was sent from the peer |Channel| (using
163 // |SerializeEndpoint...()|. |source| should be (a copy of) the data that 162 // |SerializeEndpoint...()|. |source| should be (a copy of) the data that
164 // |SerializeEndpoint...()| wrote, and must be (at least) 163 // |SerializeEndpoint...()| wrote, and must be (at least)
165 // |GetSerializedEndpointSize()| bytes. This returns the deserialized 164 // |GetSerializedEndpointSize()| bytes. This returns the deserialized
166 // |IncomingEndpoint| (which can be converted into a |MessagePipe|) or null on 165 // |IncomingEndpoint| (which can be converted into a |MessagePipe|) or null on
167 // error. 166 // error.
168 scoped_refptr<IncomingEndpoint> DeserializeEndpoint(const void* source); 167 RefPtr<IncomingEndpoint> DeserializeEndpoint(const void* source);
169 168
170 // See |RawChannel::GetSerializedPlatformHandleSize()|. 169 // See |RawChannel::GetSerializedPlatformHandleSize()|.
171 size_t GetSerializedPlatformHandleSize() const; 170 size_t GetSerializedPlatformHandleSize() const;
172 171
173 embedder::PlatformSupport* platform_support() const { 172 embedder::PlatformSupport* platform_support() const {
174 return platform_support_; 173 return platform_support_;
175 } 174 }
176 175
177 private: 176 private:
178 FRIEND_REF_COUNTED_THREAD_SAFE(Channel); 177 FRIEND_REF_COUNTED_THREAD_SAFE(Channel);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 258
260 using IdToEndpointMap = 259 using IdToEndpointMap =
261 std::unordered_map<ChannelEndpointId, RefPtr<ChannelEndpoint>>; 260 std::unordered_map<ChannelEndpointId, RefPtr<ChannelEndpoint>>;
262 // Map from local IDs to endpoints. If the endpoint is null, this means that 261 // Map from local IDs to endpoints. If the endpoint is null, this means that
263 // we're just waiting for the remove ack before removing the entry. 262 // we're just waiting for the remove ack before removing the entry.
264 IdToEndpointMap local_id_to_endpoint_map_ MOJO_GUARDED_BY(mutex_); 263 IdToEndpointMap local_id_to_endpoint_map_ MOJO_GUARDED_BY(mutex_);
265 // Note: The IDs generated by this should be checked for existence before use. 264 // Note: The IDs generated by this should be checked for existence before use.
266 LocalChannelEndpointIdGenerator local_id_generator_ MOJO_GUARDED_BY(mutex_); 265 LocalChannelEndpointIdGenerator local_id_generator_ MOJO_GUARDED_BY(mutex_);
267 266
268 using IdToIncomingEndpointMap = 267 using IdToIncomingEndpointMap =
269 std::unordered_map<ChannelEndpointId, scoped_refptr<IncomingEndpoint>>; 268 std::unordered_map<ChannelEndpointId, RefPtr<IncomingEndpoint>>;
270 // Map from local IDs to incoming endpoints (i.e., those received inside other 269 // Map from local IDs to incoming endpoints (i.e., those received inside other
271 // messages, but not yet claimed via |DeserializeEndpoint()|). 270 // messages, but not yet claimed via |DeserializeEndpoint()|).
272 IdToIncomingEndpointMap incoming_endpoints_ MOJO_GUARDED_BY(mutex_); 271 IdToIncomingEndpointMap incoming_endpoints_ MOJO_GUARDED_BY(mutex_);
273 // TODO(vtl): We need to keep track of remote IDs (so that we don't collide 272 // TODO(vtl): We need to keep track of remote IDs (so that we don't collide
274 // if/when we wrap). 273 // if/when we wrap).
275 RemoteChannelEndpointIdGenerator remote_id_generator_ MOJO_GUARDED_BY(mutex_); 274 RemoteChannelEndpointIdGenerator remote_id_generator_ MOJO_GUARDED_BY(mutex_);
276 275
277 MOJO_DISALLOW_COPY_AND_ASSIGN(Channel); 276 MOJO_DISALLOW_COPY_AND_ASSIGN(Channel);
278 }; 277 };
279 278
280 } // namespace system 279 } // namespace system
281 } // namespace mojo 280 } // namespace mojo
282 281
283 #endif // MOJO_EDK_SYSTEM_CHANNEL_H_ 282 #endif // MOJO_EDK_SYSTEM_CHANNEL_H_
OLDNEW
« 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