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

Side by Side Diff: ipc/ipc_channel_proxy.h

Issue 382333002: Introduce ChannelMojo (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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
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_PROXY_H_ 5 #ifndef IPC_IPC_CHANNEL_PROXY_H_
6 #define IPC_IPC_CHANNEL_PROXY_H_ 6 #define IPC_IPC_CHANNEL_PROXY_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/synchronization/lock.h" 12 #include "base/synchronization/lock.h"
13 #include "base/threading/non_thread_safe.h" 13 #include "base/threading/non_thread_safe.h"
14 #include "ipc/ipc_channel.h" 14 #include "ipc/ipc_channel.h"
15 #include "ipc/ipc_channel_handle.h" 15 #include "ipc/ipc_channel_handle.h"
16 #include "ipc/ipc_listener.h" 16 #include "ipc/ipc_listener.h"
17 #include "ipc/ipc_sender.h" 17 #include "ipc/ipc_sender.h"
18 18
19 namespace base { 19 namespace base {
20 class SingleThreadTaskRunner; 20 class SingleThreadTaskRunner;
21 } 21 }
22 22
23 namespace IPC { 23 namespace IPC {
24 24
25 class ChannelFactory;
25 class MessageFilter; 26 class MessageFilter;
26 class MessageFilterRouter; 27 class MessageFilterRouter;
27 class SendCallbackHelper; 28 class SendCallbackHelper;
28 29
29 //----------------------------------------------------------------------------- 30 //-----------------------------------------------------------------------------
30 // IPC::ChannelProxy 31 // IPC::ChannelProxy
31 // 32 //
32 // This class is a helper class that is useful when you wish to run an IPC 33 // This class is a helper class that is useful when you wish to run an IPC
33 // channel on a background thread. It provides you with the option of either 34 // channel on a background thread. It provides you with the option of either
34 // handling IPC messages on that background thread or having them dispatched to 35 // handling IPC messages on that background thread or having them dispatched to
(...skipping 28 matching lines...) Expand all
63 // filter may be null if the consumer is not interested in handling messages 64 // filter may be null if the consumer is not interested in handling messages
64 // on the background thread. Any message not handled by the filter will be 65 // on the background thread. Any message not handled by the filter will be
65 // dispatched to the listener. The given task runner correspond to a thread 66 // dispatched to the listener. The given task runner correspond to a thread
66 // on which IPC::Channel is created and used (e.g. IO thread). 67 // on which IPC::Channel is created and used (e.g. IO thread).
67 static scoped_ptr<ChannelProxy> Create( 68 static scoped_ptr<ChannelProxy> Create(
68 const IPC::ChannelHandle& channel_handle, 69 const IPC::ChannelHandle& channel_handle,
69 Channel::Mode mode, 70 Channel::Mode mode,
70 Listener* listener, 71 Listener* listener,
71 base::SingleThreadTaskRunner* ipc_task_runner); 72 base::SingleThreadTaskRunner* ipc_task_runner);
72 73
74 static scoped_ptr<ChannelProxy> Create(
75 scoped_ptr<ChannelFactory> factory,
76 Listener* listener,
77 base::SingleThreadTaskRunner* ipc_task_runner);
78
73 virtual ~ChannelProxy(); 79 virtual ~ChannelProxy();
74 80
75 // Initializes the channel proxy. Only call this once to initialize a channel 81 // Initializes the channel proxy. Only call this once to initialize a channel
76 // proxy that was not initialized in its constructor. If create_pipe_now is 82 // proxy that was not initialized in its constructor. If create_pipe_now is
77 // true, the pipe is created synchronously. Otherwise it's created on the IO 83 // true, the pipe is created synchronously. Otherwise it's created on the IO
78 // thread. 84 // thread.
79 void Init(const IPC::ChannelHandle& channel_handle, Channel::Mode mode, 85 void Init(const IPC::ChannelHandle& channel_handle, Channel::Mode mode,
80 bool create_pipe_now); 86 bool create_pipe_now);
87 void Init(scoped_ptr<ChannelFactory> factory, bool create_pipe_now);
81 88
82 // Close the IPC::Channel. This operation completes asynchronously, once the 89 // Close the IPC::Channel. This operation completes asynchronously, once the
83 // background thread processes the command to close the channel. It is ok to 90 // background thread processes the command to close the channel. It is ok to
84 // call this method multiple times. Redundant calls are ignored. 91 // call this method multiple times. Redundant calls are ignored.
85 // 92 //
86 // WARNING: MessageFilter objects held by the ChannelProxy is also 93 // WARNING: MessageFilter objects held by the ChannelProxy is also
87 // released asynchronously, and it may in fact have its final reference 94 // released asynchronously, and it may in fact have its final reference
88 // released on the background thread. The caller should be careful to deal 95 // released on the background thread. The caller should be careful to deal
89 // with / allow for this possibility. 96 // with / allow for this possibility.
90 void Close(); 97 void Close();
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 // Called on the consumers thread when the ChannelProxy is closed. At that 171 // Called on the consumers thread when the ChannelProxy is closed. At that
165 // point the consumer is telling us that they don't want to receive any 172 // point the consumer is telling us that they don't want to receive any
166 // more messages, so we honor that wish by forgetting them! 173 // more messages, so we honor that wish by forgetting them!
167 virtual void Clear(); 174 virtual void Clear();
168 175
169 private: 176 private:
170 friend class ChannelProxy; 177 friend class ChannelProxy;
171 friend class SendCallbackHelper; 178 friend class SendCallbackHelper;
172 179
173 // Create the Channel 180 // Create the Channel
174 void CreateChannel(const IPC::ChannelHandle& channel_handle, 181 void CreateChannel(scoped_ptr<ChannelFactory> factory);
175 const Channel::Mode& mode);
176 182
177 // Methods called on the IO thread. 183 // Methods called on the IO thread.
178 void OnSendMessage(scoped_ptr<Message> message_ptr); 184 void OnSendMessage(scoped_ptr<Message> message_ptr);
179 void OnAddFilter(); 185 void OnAddFilter();
180 void OnRemoveFilter(MessageFilter* filter); 186 void OnRemoveFilter(MessageFilter* filter);
181 187
182 // Methods called on the listener thread. 188 // Methods called on the listener thread.
183 void AddFilter(MessageFilter* filter); 189 void AddFilter(MessageFilter* filter);
184 void OnDispatchConnected(); 190 void OnDispatchConnected();
185 void OnDispatchError(); 191 void OnDispatchError();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 // that involves this data. 230 // that involves this data.
225 scoped_refptr<Context> context_; 231 scoped_refptr<Context> context_;
226 232
227 // Whether the channel has been initialized. 233 // Whether the channel has been initialized.
228 bool did_init_; 234 bool did_init_;
229 }; 235 };
230 236
231 } // namespace IPC 237 } // namespace IPC
232 238
233 #endif // IPC_IPC_CHANNEL_PROXY_H_ 239 #endif // IPC_IPC_CHANNEL_PROXY_H_
OLDNEW
« ipc/ipc_channel.h ('K') | « ipc/ipc_channel_posix.cc ('k') | ipc/ipc_channel_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698