| Index: ipc/ipc_channel_proxy.h
|
| diff --git a/ipc/ipc_channel_proxy.h b/ipc/ipc_channel_proxy.h
|
| index 1f5ecf450df7f7c6d8a486a3d4efb76a95e1f81e..b326b6740fae4589ebb4dd7e70e4a7874a82ec24 100644
|
| --- a/ipc/ipc_channel_proxy.h
|
| +++ b/ipc/ipc_channel_proxy.h
|
| @@ -14,6 +14,7 @@
|
| #include "ipc/ipc_channel.h"
|
| #include "ipc/ipc_channel_handle.h"
|
| #include "ipc/ipc_listener.h"
|
| +#include "ipc/ipc_message_start.h"
|
| #include "ipc/ipc_sender.h"
|
|
|
| namespace base {
|
| @@ -88,6 +89,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 +232,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_;
|
| 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.
|
| + // Note that |message_global_filters_| will be given first offering of any
|
| + // given message. It's the filter implementer and installer's
|
| + // responsibility to ensure that a filter is either global or selective to
|
| + // ensure proper message filtering order.
|
| + std::vector<MessageFilter*> message_global_filters_;
|
| + std::vector<MessageFilter*> message_class_filters_[LastIPCMsgStart];
|
| +
|
| // 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_;
|
|
|