1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
ipc / ipc_test_sink.cc [blame]
// Copyright 2011 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ipc/ipc_test_sink.h"
#include <stddef.h>
#include <stdint.h>
#include "build/build_config.h"
#include "ipc/ipc_listener.h"
#include "ipc/ipc_message.h"
namespace IPC {
TestSink::TestSink() = default;
TestSink::~TestSink() = default;
bool TestSink::Send(Message* message) {
OnMessageReceived(*message);
delete message;
return true;
}
bool TestSink::Connect() {
NOTIMPLEMENTED();
return false;
}
void TestSink::Close() {
NOTIMPLEMENTED();
}
bool TestSink::OnMessageReceived(const Message& msg) {
for (auto& observer : filter_list_) {
if (observer.OnMessageReceived(msg))
return true;
}
// No filter handled the message, so store it.
messages_.push_back(Message(msg));
return true;
}
void TestSink::ClearMessages() {
messages_.clear();
}
const Message* TestSink::GetMessageAt(size_t index) const {
if (index >= messages_.size())
return NULL;
return &messages_[index];
}
const Message* TestSink::GetFirstMessageMatching(uint32_t id) const {
for (size_t i = 0; i < messages_.size(); i++) {
if (messages_[i].type() == id)
return &messages_[i];
}
return NULL;
}
const Message* TestSink::GetUniqueMessageMatching(uint32_t id) const {
size_t found_index = 0;
size_t found_count = 0;
for (size_t i = 0; i < messages_.size(); i++) {
if (messages_[i].type() == id) {
found_count++;
found_index = i;
}
}
if (found_count != 1)
return NULL; // Didn't find a unique one.
return &messages_[found_index];
}
void TestSink::AddFilter(Listener* filter) {
filter_list_.AddObserver(filter);
}
void TestSink::RemoveFilter(Listener* filter) {
filter_list_.RemoveObserver(filter);
}
} // namespace IPC