From 9f9db89fe9a1b4e82ab3cfa25b579f8b46fe389e Mon Sep 17 00:00:00 2001 From: "bryner@chromium.org" Date: Mon, 31 Jan 2011 21:43:31 +0000 Subject: Add support for attaching filters to an IPC TestSink. The filters can see every message that is sent to the sink, which is useful when if the test is waiting for a specific message to arrive. BUG=none TEST=none Review URL: http://codereview.chromium.org/6387007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@73194 0039d316-1c4b-4281-b951-d872f2087c98 --- ipc/ipc_test_sink.cc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'ipc/ipc_test_sink.cc') 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::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 -- cgit v1.1