| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef IPC_MESSAGE_FILTER_ROUTER_H_ |
| #define IPC_MESSAGE_FILTER_ROUTER_H_ |
| |
| #include <vector> |
| |
| #include "ipc/ipc_message_start.h" |
| |
| namespace IPC { |
| |
| class Message; |
| class MessageFilter; |
| |
| class MessageFilterRouter { |
| public: |
| typedef std::vector<MessageFilter*> MessageFilters; |
| |
| MessageFilterRouter(); |
| ~MessageFilterRouter(); |
| |
| void AddFilter(MessageFilter* filter); |
| void RemoveFilter(MessageFilter* filter); |
| bool TryFilters(const Message& message); |
| void Clear(); |
| |
| private: |
| // List of global and selective filters; a given filter will exist 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. |
| MessageFilters global_filters_; |
| MessageFilters message_class_filters_[LastIPCMsgStart]; |
| }; |
| |
| } // namespace IPC |
| |
| #endif // IPC_MESSAGE_FILTER_ROUTER_H_ |