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

Side by Side Diff: ipc/ipc_channel_proxy.h

Issue 338065: Add the ability for objects which derive from RefCountedThreadSafe to specify... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month 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 | « chrome/chrome.gyp ('k') | ipc/ipc_channel_proxy.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 (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/ref_counted.h" 10 #include "base/ref_counted.h"
(...skipping 28 matching lines...) Expand all
39 // the consumer of IPC::ChannelProxy the ability to respond to incoming 39 // the consumer of IPC::ChannelProxy the ability to respond to incoming
40 // messages on this background thread instead of on their own thread, which may 40 // messages on this background thread instead of on their own thread, which may
41 // be bogged down with other processing. The result can be greatly improved 41 // be bogged down with other processing. The result can be greatly improved
42 // latency for messages that can be handled on a background thread. 42 // latency for messages that can be handled on a background thread.
43 // 43 //
44 // The consumer of IPC::ChannelProxy is responsible for allocating the Thread 44 // The consumer of IPC::ChannelProxy is responsible for allocating the Thread
45 // instance where the IPC::Channel will be created and operated. 45 // instance where the IPC::Channel will be created and operated.
46 // 46 //
47 class ChannelProxy : public Message::Sender { 47 class ChannelProxy : public Message::Sender {
48 public: 48 public:
49
50 class MessageFilter;
51 struct MessageFilterTraits {
52 static void Destruct(MessageFilter* filter);
53 };
54
49 // A class that receives messages on the thread where the IPC channel is 55 // A class that receives messages on the thread where the IPC channel is
50 // running. It can choose to prevent the default action for an IPC message. 56 // running. It can choose to prevent the default action for an IPC message.
51 class MessageFilter : public base::RefCountedThreadSafe<MessageFilter> { 57 class MessageFilter
58 : public base::RefCountedThreadSafe<MessageFilter, MessageFilterTraits> {
52 public: 59 public:
53 virtual ~MessageFilter() {} 60 virtual ~MessageFilter() {}
54 61
55 // Called on the background thread to provide the filter with access to the 62 // Called on the background thread to provide the filter with access to the
56 // channel. Called when the IPC channel is initialized or when AddFilter 63 // channel. Called when the IPC channel is initialized or when AddFilter
57 // is called if the channel is already initialized. 64 // is called if the channel is already initialized.
58 virtual void OnFilterAdded(Channel* channel) {} 65 virtual void OnFilterAdded(Channel* channel) {}
59 66
60 // Called on the background thread when the filter has been removed from 67 // Called on the background thread when the filter has been removed from
61 // the ChannelProxy and when the Channel is closing. After a filter is 68 // the ChannelProxy and when the Channel is closing. After a filter is
(...skipping 10 matching lines...) Expand all
72 79
73 // Called to inform the filter that the IPC channel will be destroyed. 80 // Called to inform the filter that the IPC channel will be destroyed.
74 // OnFilterRemoved is called immediately after this. 81 // OnFilterRemoved is called immediately after this.
75 virtual void OnChannelClosing() {} 82 virtual void OnChannelClosing() {}
76 83
77 // Return true to indicate that the message was handled, or false to let 84 // Return true to indicate that the message was handled, or false to let
78 // the message be handled in the default way. 85 // the message be handled in the default way.
79 virtual bool OnMessageReceived(const Message& message) { 86 virtual bool OnMessageReceived(const Message& message) {
80 return false; 87 return false;
81 } 88 }
89
90 // Called when the message filter is about to be deleted. This gives
91 // derived classes the option of controlling which thread they're deleted
92 // on etc.
93 virtual void OnDestruct() {
94 delete this;
95 }
82 }; 96 };
83 97
84 // Initializes a channel proxy. The channel_id and mode parameters are 98 // Initializes a channel proxy. The channel_id and mode parameters are
85 // passed directly to the underlying IPC::Channel. The listener is called on 99 // passed directly to the underlying IPC::Channel. The listener is called on
86 // the thread that creates the ChannelProxy. The filter's OnMessageReceived 100 // the thread that creates the ChannelProxy. The filter's OnMessageReceived
87 // method is called on the thread where the IPC::Channel is running. The 101 // method is called on the thread where the IPC::Channel is running. The
88 // filter may be null if the consumer is not interested in handling messages 102 // filter may be null if the consumer is not interested in handling messages
89 // on the background thread. Any message not handled by the filter will be 103 // on the background thread. Any message not handled by the filter will be
90 // dispatched to the listener. The given message loop indicates where the 104 // dispatched to the listener. The given message loop indicates where the
91 // IPC::Channel should be created. 105 // IPC::Channel should be created.
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 223
210 // By maintaining this indirection (ref-counted) to our internal state, we 224 // By maintaining this indirection (ref-counted) to our internal state, we
211 // can safely be destroyed while the background thread continues to do stuff 225 // can safely be destroyed while the background thread continues to do stuff
212 // that involves this data. 226 // that involves this data.
213 scoped_refptr<Context> context_; 227 scoped_refptr<Context> context_;
214 }; 228 };
215 229
216 } // namespace IPC 230 } // namespace IPC
217 231
218 #endif // IPC_IPC_CHANNEL_PROXY_H__ 232 #endif // IPC_IPC_CHANNEL_PROXY_H__
OLDNEW
« no previous file with comments | « chrome/chrome.gyp ('k') | ipc/ipc_channel_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698