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

Side by Side Diff: mojo/system/raw_channel.h

Issue 223783006: Mojo: Make Channel take a RawChannel rather than creating it. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: spurious space Created 6 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 | Annotate | Revision Log
« no previous file with comments | « mojo/system/multiprocess_message_pipe_unittest.cc ('k') | mojo/system/raw_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_SYSTEM_RAW_CHANNEL_H_ 5 #ifndef MOJO_SYSTEM_RAW_CHANNEL_H_
6 #define MOJO_SYSTEM_RAW_CHANNEL_H_ 6 #define MOJO_SYSTEM_RAW_CHANNEL_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 // After |OnFatalError(FATAL_ERROR_FAILED_READ)| there won't be further 65 // After |OnFatalError(FATAL_ERROR_FAILED_READ)| there won't be further
66 // |OnReadMessage()| calls. 66 // |OnReadMessage()| calls.
67 virtual void OnFatalError(FatalError fatal_error) = 0; 67 virtual void OnFatalError(FatalError fatal_error) = 0;
68 68
69 protected: 69 protected:
70 virtual ~Delegate() {} 70 virtual ~Delegate() {}
71 }; 71 };
72 72
73 // Static factory method. |handle| should be a handle to a 73 // Static factory method. |handle| should be a handle to a
74 // (platform-appropriate) bidirectional communication channel (e.g., a socket 74 // (platform-appropriate) bidirectional communication channel (e.g., a socket
75 // on POSIX, a named pipe on Windows). Does *not* take ownership of |delegate| 75 // on POSIX, a named pipe on Windows).
76 // and |message_loop_for_io|, which must remain alive while this object does. 76 static scoped_ptr<RawChannel> Create(embedder::ScopedPlatformHandle handle);
77 static RawChannel* Create(embedder::ScopedPlatformHandle handle,
78 Delegate* delegate,
79 base::MessageLoopForIO* message_loop_for_io);
80 77
81 // This must be called (on an I/O thread) before this object is used. Returns 78 // This must be called (on an I/O thread) before this object is used. Does
82 // true on success. On failure, |Shutdown()| should *not* be called. 79 // *not* take ownership of |delegate|. Both the I/O thread and |delegate| must
83 bool Init(); 80 // remain alive for the lifetime of this object. Returns true on success. On
81 // failure, |Shutdown()| should *not* be called.
82 bool Init(Delegate* delegate);
84 83
85 // This must be called (on the I/O thread) before this object is destroyed. 84 // This must be called (on the I/O thread) before this object is destroyed.
86 void Shutdown(); 85 void Shutdown();
87 86
88 // Writes the given message (or schedules it to be written). This is 87 // Writes the given message (or schedules it to be written). This is
89 // thread-safe. Returns true on success. 88 // thread-safe. Returns true on success.
90 bool WriteMessage(scoped_ptr<MessageInTransit> message); 89 bool WriteMessage(scoped_ptr<MessageInTransit> message);
91 90
92 // Returns true if the write buffer is empty (i.e., all messages written using 91 // Returns true if the write buffer is empty (i.e., all messages written using
93 // |WriteMessage()| have actually been sent. 92 // |WriteMessage()| have actually been sent.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 // TODO(vtl): When C++11 is available, switch this to a deque of 142 // TODO(vtl): When C++11 is available, switch this to a deque of
144 // |scoped_ptr|/|unique_ptr|s. 143 // |scoped_ptr|/|unique_ptr|s.
145 std::deque<MessageInTransit*> message_queue_; 144 std::deque<MessageInTransit*> message_queue_;
146 // The first message may have been partially sent. |offset_| indicates the 145 // The first message may have been partially sent. |offset_| indicates the
147 // position in the first message where to start the next write. 146 // position in the first message where to start the next write.
148 size_t offset_; 147 size_t offset_;
149 148
150 DISALLOW_COPY_AND_ASSIGN(WriteBuffer); 149 DISALLOW_COPY_AND_ASSIGN(WriteBuffer);
151 }; 150 };
152 151
153 RawChannel(Delegate* delegate, base::MessageLoopForIO* message_loop_for_io); 152 RawChannel();
154 153
155 base::MessageLoopForIO* message_loop_for_io() { return message_loop_for_io_; } 154 base::MessageLoopForIO* message_loop_for_io() { return message_loop_for_io_; }
156 base::Lock& write_lock() { return write_lock_; } 155 base::Lock& write_lock() { return write_lock_; }
157 156
158 // Only accessed on the I/O thread. 157 // Only accessed on the I/O thread.
159 ReadBuffer* read_buffer(); 158 ReadBuffer* read_buffer();
160 159
161 // Only accessed under |write_lock_|. 160 // Only accessed under |write_lock_|.
162 WriteBuffer* write_buffer_no_lock(); 161 WriteBuffer* write_buffer_no_lock();
163 162
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 // thread WITHOUT |write_lock_| held. 215 // thread WITHOUT |write_lock_| held.
217 void CallOnFatalError(Delegate::FatalError fatal_error); 216 void CallOnFatalError(Delegate::FatalError fatal_error);
218 217
219 // If |result| is true, updates the write buffer and schedules a write 218 // If |result| is true, updates the write buffer and schedules a write
220 // operation to run later if there are more contents to write. If |result| is 219 // operation to run later if there are more contents to write. If |result| is
221 // false or any error occurs during the method execution, cancels pending 220 // false or any error occurs during the method execution, cancels pending
222 // writes and returns false. 221 // writes and returns false.
223 // Must be called only if |write_stopped_| is false and under |write_lock_|. 222 // Must be called only if |write_stopped_| is false and under |write_lock_|.
224 bool OnWriteCompletedNoLock(bool result, size_t bytes_written); 223 bool OnWriteCompletedNoLock(bool result, size_t bytes_written);
225 224
226 Delegate* const delegate_; 225 // Set in |Init()| and never changed (hence usable on any thread without
227 base::MessageLoopForIO* const message_loop_for_io_; 226 // locking):
227 Delegate* delegate_;
228 base::MessageLoopForIO* message_loop_for_io_;
228 229
229 // Only used on the I/O thread: 230 // Only used on the I/O thread:
230 bool read_stopped_; 231 bool read_stopped_;
231 scoped_ptr<ReadBuffer> read_buffer_; 232 scoped_ptr<ReadBuffer> read_buffer_;
232 233
233 base::Lock write_lock_; // Protects the following members. 234 base::Lock write_lock_; // Protects the following members.
234 bool write_stopped_; 235 bool write_stopped_;
235 scoped_ptr<WriteBuffer> write_buffer_; 236 scoped_ptr<WriteBuffer> write_buffer_;
236 237
237 // This is used for posting tasks from write threads to the I/O thread. It 238 // This is used for posting tasks from write threads to the I/O thread. It
238 // must only be accessed under |write_lock_|. The weak pointers it produces 239 // must only be accessed under |write_lock_|. The weak pointers it produces
239 // are only used/invalidated on the I/O thread. 240 // are only used/invalidated on the I/O thread.
240 base::WeakPtrFactory<RawChannel> weak_ptr_factory_; 241 base::WeakPtrFactory<RawChannel> weak_ptr_factory_;
241 242
242 DISALLOW_COPY_AND_ASSIGN(RawChannel); 243 DISALLOW_COPY_AND_ASSIGN(RawChannel);
243 }; 244 };
244 245
245 } // namespace system 246 } // namespace system
246 } // namespace mojo 247 } // namespace mojo
247 248
248 #endif // MOJO_SYSTEM_RAW_CHANNEL_H_ 249 #endif // MOJO_SYSTEM_RAW_CHANNEL_H_
OLDNEW
« no previous file with comments | « mojo/system/multiprocess_message_pipe_unittest.cc ('k') | mojo/system/raw_channel.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698