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

Side by Side Diff: ipc/ipc_channel_proxy.h

Issue 975903002: Add a flag to dump IPC messages sent from the renderer to the browser. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup in external_ipc_dumper.cc Created 5 years, 9 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_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"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 // the consumer of IPC::ChannelProxy the ability to respond to incoming 50 // the consumer of IPC::ChannelProxy the ability to respond to incoming
51 // messages on this background thread instead of on their own thread, which may 51 // messages on this background thread instead of on their own thread, which may
52 // be bogged down with other processing. The result can be greatly improved 52 // be bogged down with other processing. The result can be greatly improved
53 // latency for messages that can be handled on a background thread. 53 // latency for messages that can be handled on a background thread.
54 // 54 //
55 // The consumer of IPC::ChannelProxy is responsible for allocating the Thread 55 // The consumer of IPC::ChannelProxy is responsible for allocating the Thread
56 // instance where the IPC::Channel will be created and operated. 56 // instance where the IPC::Channel will be created and operated.
57 // 57 //
58 class IPC_EXPORT ChannelProxy : public Sender, public base::NonThreadSafe { 58 class IPC_EXPORT ChannelProxy : public Sender, public base::NonThreadSafe {
59 public: 59 public:
60 // Interface for a filter to be imposed on outgoing messages which can
inferno 2015/03/05 18:46:48 All code ifdefed.
61 // re-write the message. Used for testing.
62 class OutgoingMessageFilter {
63 public:
64 virtual Message* Rewrite(Message* message) = 0;
65 };
66
60 // Initializes a channel proxy. The channel_handle and mode parameters are 67 // Initializes a channel proxy. The channel_handle and mode parameters are
61 // passed directly to the underlying IPC::Channel. The listener is called on 68 // passed directly to the underlying IPC::Channel. The listener is called on
62 // the thread that creates the ChannelProxy. The filter's OnMessageReceived 69 // the thread that creates the ChannelProxy. The filter's OnMessageReceived
63 // method is called on the thread where the IPC::Channel is running. The 70 // method is called on the thread where the IPC::Channel is running. The
64 // filter may be null if the consumer is not interested in handling messages 71 // filter may be null if the consumer is not interested in handling messages
65 // on the background thread. Any message not handled by the filter will be 72 // on the background thread. Any message not handled by the filter will be
66 // dispatched to the listener. The given task runner correspond to a thread 73 // dispatched to the listener. The given task runner correspond to a thread
67 // on which IPC::Channel is created and used (e.g. IO thread). 74 // on which IPC::Channel is created and used (e.g. IO thread).
68 static scoped_ptr<ChannelProxy> Create( 75 static scoped_ptr<ChannelProxy> Create(
69 const IPC::ChannelHandle& channel_handle, 76 const IPC::ChannelHandle& channel_handle,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 // Ordinarily, messages sent to the ChannelProxy are routed to the matching 112 // Ordinarily, messages sent to the ChannelProxy are routed to the matching
106 // listener on the worker thread. This API allows code to intercept messages 113 // listener on the worker thread. This API allows code to intercept messages
107 // before they are sent to the worker thread. 114 // before they are sent to the worker thread.
108 // If you call this before the target process is launched, then you're 115 // If you call this before the target process is launched, then you're
109 // guaranteed to not miss any messages. But if you call this anytime after, 116 // guaranteed to not miss any messages. But if you call this anytime after,
110 // then some messages might be missed since the filter is added internally on 117 // then some messages might be missed since the filter is added internally on
111 // the IO thread. 118 // the IO thread.
112 void AddFilter(MessageFilter* filter); 119 void AddFilter(MessageFilter* filter);
113 void RemoveFilter(MessageFilter* filter); 120 void RemoveFilter(MessageFilter* filter);
114 121
122 void set_outgoing_message_filter(OutgoingMessageFilter* filter) {
123 outgoing_message_filter_ = filter;
124 }
125
115 // Set the task runner on which dispatched messages are posted. Both the new 126 // Set the task runner on which dispatched messages are posted. Both the new
116 // task runner and the existing task runner must run on the same thread, and 127 // task runner and the existing task runner must run on the same thread, and
117 // must belong to the calling thread. 128 // must belong to the calling thread.
118 void SetListenerTaskRunner( 129 void SetListenerTaskRunner(
119 scoped_refptr<base::SingleThreadTaskRunner> listener_task_runner); 130 scoped_refptr<base::SingleThreadTaskRunner> listener_task_runner);
120 131
121 // Called to clear the pointer to the IPC task runner when it's going away. 132 // Called to clear the pointer to the IPC task runner when it's going away.
122 void ClearIPCTaskRunner(); 133 void ClearIPCTaskRunner();
123 134
124 // Get the process ID for the connected peer. 135 // Get the process ID for the connected peer.
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 // Lock for pending_filters_. 236 // Lock for pending_filters_.
226 base::Lock pending_filters_lock_; 237 base::Lock pending_filters_lock_;
227 238
228 // Cached copy of the peer process ID. Set on IPC but read on both IPC and 239 // Cached copy of the peer process ID. Set on IPC but read on both IPC and
229 // listener threads. 240 // listener threads.
230 base::ProcessId peer_pid_; 241 base::ProcessId peer_pid_;
231 }; 242 };
232 243
233 Context* context() { return context_.get(); } 244 Context* context() { return context_.get(); }
234 245
246 OutgoingMessageFilter* outgoing_message_filter() {
inferno 2015/03/05 18:46:48 () const {
247 return outgoing_message_filter_;
248 }
249
235 private: 250 private:
236 friend class IpcSecurityTestUtil; 251 friend class IpcSecurityTestUtil;
237 252
238 // By maintaining this indirection (ref-counted) to our internal state, we 253 // By maintaining this indirection (ref-counted) to our internal state, we
239 // can safely be destroyed while the background thread continues to do stuff 254 // can safely be destroyed while the background thread continues to do stuff
240 // that involves this data. 255 // that involves this data.
241 scoped_refptr<Context> context_; 256 scoped_refptr<Context> context_;
242 257
243 // Whether the channel has been initialized. 258 // Whether the channel has been initialized.
244 bool did_init_; 259 bool did_init_;
260
261 OutgoingMessageFilter* outgoing_message_filter_;
245 }; 262 };
246 263
247 } // namespace IPC 264 } // namespace IPC
248 265
249 #endif // IPC_IPC_CHANNEL_PROXY_H_ 266 #endif // IPC_IPC_CHANNEL_PROXY_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698