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

Side by Side Diff: ipc/ipc_channel.h

Issue 1903663004: IPC: Fix attachment brokering race condition. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments from tsepez. Created 4 years, 8 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 IPC_IPC_CHANNEL_H_ 5 #ifndef IPC_IPC_CHANNEL_H_
6 #define IPC_IPC_CHANNEL_H_ 6 #define IPC_IPC_CHANNEL_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 const IPC::ChannelHandle& channel_handle, 158 const IPC::ChannelHandle& channel_handle,
159 Listener* listener); 159 Listener* listener);
160 160
161 ~Channel() override; 161 ~Channel() override;
162 162
163 // Connect the pipe. On the server side, this will initiate 163 // Connect the pipe. On the server side, this will initiate
164 // waiting for connections. On the client, it attempts to 164 // waiting for connections. On the client, it attempts to
165 // connect to a pre-existing pipe. Note, calling Connect() 165 // connect to a pre-existing pipe. Note, calling Connect()
166 // will not block the calling thread and may complete 166 // will not block the calling thread and may complete
167 // asynchronously. 167 // asynchronously.
168 //
169 // The subclass implementation must call WillConnect() at the beginning of its
170 // implementation.
168 virtual bool Connect() WARN_UNUSED_RESULT = 0; 171 virtual bool Connect() WARN_UNUSED_RESULT = 0;
169 172
170 // Close this Channel explicitly. May be called multiple times. 173 // Close this Channel explicitly. May be called multiple times.
171 // On POSIX calling close on an IPC channel that listens for connections will 174 // On POSIX calling close on an IPC channel that listens for connections will
172 // cause it to close any accepted connections, and it will stop listening for 175 // cause it to close any accepted connections, and it will stop listening for
173 // new connections. If you just want to close the currently accepted 176 // new connections. If you just want to close the currently accepted
174 // connection and listen for new ones, use ResetToAcceptingConnectionState. 177 // connection and listen for new ones, use ResetToAcceptingConnectionState.
175 virtual void Close() = 0; 178 virtual void Close() = 0;
176 179
177 // Get its own process id. This value is told to the peer. 180 // Get its own process id. This value is told to the peer.
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 ~OutputElement(); 251 ~OutputElement();
249 size_t size() const { return message_ ? message_->size() : length_; } 252 size_t size() const { return message_ ? message_->size() : length_; }
250 const void* data() const { return message_ ? message_->data() : buffer_; } 253 const void* data() const { return message_ ? message_->data() : buffer_; }
251 Message* get_message() const { return message_.get(); } 254 Message* get_message() const { return message_.get(); }
252 255
253 private: 256 private:
254 scoped_ptr<Message> message_; 257 scoped_ptr<Message> message_;
255 void* buffer_; 258 void* buffer_;
256 size_t length_; 259 size_t length_;
257 }; 260 };
261
262 // Endpoint overrides.
263 void OnSetAttachmentBrokerEndpoint() override;
264
265 // Subclasses must call this method at the beginning of their implementation
266 // of Connect().
267 void WillConnect();
268
269 private:
270 bool did_start_connect_ = false;
258 }; 271 };
259 272
260 #if defined(OS_POSIX) 273 #if defined(OS_POSIX)
261 // SocketPair() creates a pair of socket FDs suitable for using with 274 // SocketPair() creates a pair of socket FDs suitable for using with
262 // IPC::Channel. 275 // IPC::Channel.
263 IPC_EXPORT bool SocketPair(int* fd1, int* fd2); 276 IPC_EXPORT bool SocketPair(int* fd1, int* fd2);
264 #endif 277 #endif
265 278
266 } // namespace IPC 279 } // namespace IPC
267 280
268 #endif // IPC_IPC_CHANNEL_H_ 281 #endif // IPC_IPC_CHANNEL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698