diff options
Diffstat (limited to 'ipc/ipc_test_sink.cc')
-rw-r--r-- | ipc/ipc_test_sink.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/ipc/ipc_test_sink.cc b/ipc/ipc_test_sink.cc index 95900b6..4404239 100644 --- a/ipc/ipc_test_sink.cc +++ b/ipc/ipc_test_sink.cc @@ -21,6 +21,14 @@ bool TestSink::Send(Message* message) { } bool TestSink::OnMessageReceived(const Message& msg) { + ObserverListBase<Channel::Listener>::Iterator it(filter_list_); + Channel::Listener* observer; + while ((observer = it.GetNext()) != NULL) { + if (observer->OnMessageReceived(msg)) + return true; + } + + // No filter handled the message, so store it. messages_.push_back(Message(msg)); return true; } @@ -57,4 +65,12 @@ const Message* TestSink::GetUniqueMessageMatching(uint32 id) const { return &messages_[found_index]; } +void TestSink::AddFilter(Channel::Listener* filter) { + filter_list_.AddObserver(filter); +} + +void TestSink::RemoveFilter(Channel::Listener* filter) { + filter_list_.RemoveObserver(filter); +} + } // namespace IPC |