summaryrefslogtreecommitdiffstats
path: root/ipc/ipc_test_sink.cc
diff options
context:
space:
mode:
authorbryner@chromium.org <bryner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-31 21:43:31 +0000
committerbryner@chromium.org <bryner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-31 21:43:31 +0000
commit9f9db89fe9a1b4e82ab3cfa25b579f8b46fe389e (patch)
tree48b66216ed6ff61a4c060411c445b681baed438a /ipc/ipc_test_sink.cc
parentb29aa74b75d57e1dc78bb151f1b7b2153d13ae3f (diff)
downloadchromium_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.cc16
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