1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef IPC_MESSAGE_FILTER_H_ 6 #define IPC_MESSAGE_FILTER_H_ 7 8 #include <vector> 9 10 #include "base/memory/ref_counted.h" 11 #include "ipc/ipc_export.h" 12 13 namespace IPC { 14 15 class Sender; 16 class Message; 17 18 // A class that receives messages on the thread where the IPC channel is 19 // running. It can choose to prevent the default action for an IPC message. 20 class IPC_EXPORT MessageFilter 21 : public base::RefCountedThreadSafe<MessageFilter> { 22 public: 23 MessageFilter(); 24 25 // Called on the background thread to provide the filter with access to the 26 // channel. Called when the IPC channel is initialized or when AddFilter 27 // is called if the channel is already initialized. 28 virtual void OnFilterAdded(Sender* sender); 29 30 // Called on the background thread when the filter has been removed from 31 // the ChannelProxy and when the Channel is closing. After a filter is 32 // removed, it will not be called again. 33 virtual void OnFilterRemoved(); 34 35 // Called to inform the filter that the IPC channel is connected and we 36 // have received the internal Hello message from the peer. 37 virtual void OnChannelConnected(int32 peer_pid); 38 39 // Called when there is an error on the channel, typically that the channel 40 // has been closed. 41 virtual void OnChannelError(); 42 43 // Called to inform the filter that the IPC channel will be destroyed. 44 // OnFilterRemoved is called immediately after this. 45 virtual void OnChannelClosing(); 46 47 // Return true to indicate that the message was handled, or false to let 48 // the message be handled in the default way. 49 virtual bool OnMessageReceived(const Message& message); 50 51 // Called to query the Message classes supported by the filter. Return 52 // false to indicate that all message types should reach the filter, or true 53 // if the resulting contents of |supported_message_classes| may be used to 54 // selectively offer messages of a particular class to the filter. 55 virtual bool GetSupportedMessageClasses( 56 std::vector<uint32>* supported_message_classes) const; 57 58 protected: 59 virtual ~MessageFilter(); 60 61 private: 62 friend class base::RefCountedThreadSafe<MessageFilter>; 63 }; 64 65 } // namespace IPC 66 67 #endif // IPC_MESSAGE_FILTER_H_ 68