blob: e97cffd4448fee541075737514e35a28fd5f2b88 [file] [log] [blame]
brettw@google.comc0f85582011-01-21 08:50:27 +09001// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ipc/ipc_test_sink.h"
6
tfarina@chromium.orgbeba2922012-11-18 04:20:05 +09007#include "ipc/ipc_listener.h"
brettw@google.comc0f85582011-01-21 08:50:27 +09008#include "ipc/ipc_message.h"
9
10namespace IPC {
11
12TestSink::TestSink() {
13}
14
15TestSink::~TestSink() {
16}
17
18bool TestSink::Send(Message* message) {
19 OnMessageReceived(*message);
20 delete message;
21 return true;
22}
23
morrita@chromium.orgfde2b6b2014-06-07 05:13:51 +090024bool TestSink::Connect() {
25 NOTIMPLEMENTED();
26 return false;
27}
28
29void TestSink::Close() {
30 NOTIMPLEMENTED();
31}
32
33base::ProcessId TestSink::GetPeerPID() const {
34 NOTIMPLEMENTED();
35 return base::ProcessId();
36}
37
morrita@chromium.org15996aa2014-08-05 08:44:17 +090038base::ProcessId TestSink::GetSelfPID() const {
39 NOTIMPLEMENTED();
40 return base::ProcessId();
41}
42
brettw@google.comc0f85582011-01-21 08:50:27 +090043bool TestSink::OnMessageReceived(const Message& msg) {
brettw@chromium.orgdb1259e2012-06-30 07:05:26 +090044 ObserverListBase<Listener>::Iterator it(filter_list_);
45 Listener* observer;
bryner@chromium.org44ae58f2011-02-01 06:43:31 +090046 while ((observer = it.GetNext()) != NULL) {
47 if (observer->OnMessageReceived(msg))
48 return true;
49 }
50
51 // No filter handled the message, so store it.
brettw@google.comc0f85582011-01-21 08:50:27 +090052 messages_.push_back(Message(msg));
53 return true;
54}
55
56void TestSink::ClearMessages() {
57 messages_.clear();
58}
59
60const Message* TestSink::GetMessageAt(size_t index) const {
61 if (index >= messages_.size())
62 return NULL;
63 return &messages_[index];
64}
65
66const Message* TestSink::GetFirstMessageMatching(uint32 id) const {
67 for (size_t i = 0; i < messages_.size(); i++) {
68 if (messages_[i].type() == id)
69 return &messages_[i];
70 }
71 return NULL;
72}
73
74const Message* TestSink::GetUniqueMessageMatching(uint32 id) const {
75 size_t found_index = 0;
76 size_t found_count = 0;
77 for (size_t i = 0; i < messages_.size(); i++) {
78 if (messages_[i].type() == id) {
79 found_count++;
80 found_index = i;
81 }
82 }
83 if (found_count != 1)
84 return NULL; // Didn't find a unique one.
85 return &messages_[found_index];
86}
87
brettw@chromium.orgdb1259e2012-06-30 07:05:26 +090088void TestSink::AddFilter(Listener* filter) {
bryner@chromium.org44ae58f2011-02-01 06:43:31 +090089 filter_list_.AddObserver(filter);
90}
91
brettw@chromium.orgdb1259e2012-06-30 07:05:26 +090092void TestSink::RemoveFilter(Listener* filter) {
bryner@chromium.org44ae58f2011-02-01 06:43:31 +090093 filter_list_.RemoveObserver(filter);
94}
95
morrita@chromium.orgfde2b6b2014-06-07 05:13:51 +090096#if defined(OS_POSIX) && !defined(OS_NACL)
97
98int TestSink::GetClientFileDescriptor() const {
99 NOTREACHED();
100 return -1;
101}
102
103int TestSink::TakeClientFileDescriptor() {
104 NOTREACHED();
105 return -1;
106}
107
morrita@chromium.orgfde2b6b2014-06-07 05:13:51 +0900108#endif // defined(OS_POSIX) && !defined(OS_NACL)
109
brettw@google.comc0f85582011-01-21 08:50:27 +0900110} // namespace IPC