[email protected] | 3ff2a10 | 2011-01-20 23:50:27 | [diff] [blame] | 1 | // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
[email protected] | a16ed65e | 2009-02-14 01:35:27 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. | ||||
4 | |||||
[email protected] | 3ff2a10 | 2011-01-20 23:50:27 | [diff] [blame] | 5 | #include "ipc/ipc_test_sink.h" |
6 | |||||
[email protected] | 0ee99068 | 2012-11-17 19:20:05 | [diff] [blame] | 7 | #include "ipc/ipc_listener.h" |
[email protected] | a83d4229 | 2010-08-17 22:51:10 | [diff] [blame] | 8 | #include "ipc/ipc_message.h" |
[email protected] | a16ed65e | 2009-02-14 01:35:27 | [diff] [blame] | 9 | |
10 | namespace IPC { | ||||
11 | |||||
12 | TestSink::TestSink() { | ||||
13 | } | ||||
14 | |||||
15 | TestSink::~TestSink() { | ||||
16 | } | ||||
17 | |||||
[email protected] | 3ff2a10 | 2011-01-20 23:50:27 | [diff] [blame] | 18 | bool TestSink::Send(Message* message) { |
[email protected] | 90b721e6 | 2010-04-05 17:35:01 | [diff] [blame] | 19 | OnMessageReceived(*message); |
20 | delete message; | ||||
21 | return true; | ||||
22 | } | ||||
23 | |||||
[email protected] | 6db8d990 | 2010-12-24 08:36:25 | [diff] [blame] | 24 | bool TestSink::OnMessageReceived(const Message& msg) { |
[email protected] | b7f59e82 | 2012-06-29 22:05:26 | [diff] [blame] | 25 | ObserverListBase<Listener>::Iterator it(filter_list_); |
26 | Listener* observer; | ||||
[email protected] | 9f9db89 | 2011-01-31 21:43:31 | [diff] [blame] | 27 | while ((observer = it.GetNext()) != NULL) { |
28 | if (observer->OnMessageReceived(msg)) | ||||
29 | return true; | ||||
30 | } | ||||
31 | |||||
32 | // No filter handled the message, so store it. | ||||
[email protected] | 445623e6 | 2010-03-25 23:20:24 | [diff] [blame] | 33 | messages_.push_back(Message(msg)); |
[email protected] | 6db8d990 | 2010-12-24 08:36:25 | [diff] [blame] | 34 | return true; |
[email protected] | a16ed65e | 2009-02-14 01:35:27 | [diff] [blame] | 35 | } |
36 | |||||
37 | void TestSink::ClearMessages() { | ||||
38 | messages_.clear(); | ||||
39 | } | ||||
40 | |||||
41 | const Message* TestSink::GetMessageAt(size_t index) const { | ||||
42 | if (index >= messages_.size()) | ||||
43 | return NULL; | ||||
44 | return &messages_[index]; | ||||
45 | } | ||||
46 | |||||
[email protected] | 168ae92 | 2009-12-04 18:08:45 | [diff] [blame] | 47 | const Message* TestSink::GetFirstMessageMatching(uint32 id) const { |
[email protected] | a16ed65e | 2009-02-14 01:35:27 | [diff] [blame] | 48 | for (size_t i = 0; i < messages_.size(); i++) { |
49 | if (messages_[i].type() == id) | ||||
50 | return &messages_[i]; | ||||
51 | } | ||||
52 | return NULL; | ||||
53 | } | ||||
54 | |||||
[email protected] | 168ae92 | 2009-12-04 18:08:45 | [diff] [blame] | 55 | const Message* TestSink::GetUniqueMessageMatching(uint32 id) const { |
[email protected] | a16ed65e | 2009-02-14 01:35:27 | [diff] [blame] | 56 | size_t found_index = 0; |
57 | size_t found_count = 0; | ||||
58 | for (size_t i = 0; i < messages_.size(); i++) { | ||||
59 | if (messages_[i].type() == id) { | ||||
60 | found_count++; | ||||
61 | found_index = i; | ||||
62 | } | ||||
63 | } | ||||
64 | if (found_count != 1) | ||||
65 | return NULL; // Didn't find a unique one. | ||||
66 | return &messages_[found_index]; | ||||
67 | } | ||||
68 | |||||
[email protected] | b7f59e82 | 2012-06-29 22:05:26 | [diff] [blame] | 69 | void TestSink::AddFilter(Listener* filter) { |
[email protected] | 9f9db89 | 2011-01-31 21:43:31 | [diff] [blame] | 70 | filter_list_.AddObserver(filter); |
71 | } | ||||
72 | |||||
[email protected] | b7f59e82 | 2012-06-29 22:05:26 | [diff] [blame] | 73 | void TestSink::RemoveFilter(Listener* filter) { |
[email protected] | 9f9db89 | 2011-01-31 21:43:31 | [diff] [blame] | 74 | filter_list_.RemoveObserver(filter); |
75 | } | ||||
76 | |||||
[email protected] | a16ed65e | 2009-02-14 01:35:27 | [diff] [blame] | 77 | } // namespace IPC |