Chromium Code Reviews| Index: ipc/ipc_channel_proxy.h |
| diff --git a/ipc/ipc_channel_proxy.h b/ipc/ipc_channel_proxy.h |
| index 1f5ecf450df7f7c6d8a486a3d4efb76a95e1f81e..3feb13778575b9357f161fd1a50d3ee81f349fa8 100644 |
| --- a/ipc/ipc_channel_proxy.h |
| +++ b/ipc/ipc_channel_proxy.h |
| @@ -88,6 +88,13 @@ class IPC_EXPORT ChannelProxy : public Sender, public base::NonThreadSafe { |
| // the message be handled in the default way. |
| virtual bool OnMessageReceived(const Message& message); |
| + // Called to query the Message classes supported by the filter. Return |
| + // false to indicate that all message types should reach the filter, or true |
| + // if the resulting contents of |supported_message_classes| may be used to |
| + // selectively offer messages of a particular class to the filter. |
| + virtual bool GetSupportedMessageClasses( |
| + std::vector<uint32>* supported_message_classes) const; |
| + |
| protected: |
| virtual ~MessageFilter(); |
| @@ -224,12 +231,22 @@ class IPC_EXPORT ChannelProxy : public Sender, public base::NonThreadSafe { |
| Listener* listener_; |
| // List of filters. This is only accessed on the IPC thread. |
| - std::vector<scoped_refptr<MessageFilter> > filters_; |
| + std::vector<scoped_refptr<MessageFilter> > all_filters_; |
|
piman
2014/02/11 21:48:46
Do we need this? Can't we just iterate over messag
jdduke (slow)
2014/02/11 23:01:48
Well, there are a few operations where we iterate
|
| scoped_refptr<base::SingleThreadTaskRunner> ipc_task_runner_; |
| scoped_ptr<Channel> channel_; |
| std::string channel_id_; |
| bool channel_connected_called_; |
| + // List of global and selective filters; a given filter from |all_filters_| |
| + // will exists in either |message_global_filters_| OR |
| + // |message_class_filters_|, but not both. |
| + std::vector<MessageFilter*> message_global_filters_; |
| + // TODO(jdduke): Determine if base::SmallMap is a sensible choice here, |
| + // or simply an array of length (LastIPCMsgStart + 1). |
|
epennerAtGoogle
2014/02/10 23:55:47
+1 to just a resized-vector, or something equivale
piman
2014/02/11 21:48:46
An array sg.
Generally, hash_maps are preferred to
jdduke (slow)
2014/02/11 23:01:48
Done.
epennerAtGoogle
2014/02/12 02:34:09
Just FYI, I mentioned vector since it typically ha
|
| + typedef std::map<uint32, std::vector<MessageFilter*> > |
| + MessageClassFilterMap; |
| + MessageClassFilterMap message_class_filters_; |
| + |
| // Holds filters between the AddFilter call on the listerner thread and the |
| // IPC thread when they're added to filters_. |
| std::vector<scoped_refptr<MessageFilter> > pending_filters_; |