diff options
author | bryner@chromium.org <bryner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-31 21:43:31 +0000 |
---|---|---|
committer | bryner@chromium.org <bryner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-31 21:43:31 +0000 |
commit | 9f9db89fe9a1b4e82ab3cfa25b579f8b46fe389e (patch) | |
tree | 48b66216ed6ff61a4c060411c445b681baed438a /ipc/ipc_test_sink.cc | |
parent | b29aa74b75d57e1dc78bb151f1b7b2153d13ae3f (diff) | |
download | chromium_src-9f9db89fe9a1b4e82ab3cfa25b579f8b46fe389e.zip chromium_src-9f9db89fe9a1b4e82ab3cfa25b579f8b46fe389e.tar.gz chromium_src-9f9db89fe9a1b4e82ab3cfa25b579f8b46fe389e.tar.bz2 |
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
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 |