// Copyright (c) 2011 The Chromium Authors. All rights reserved. // 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 "ipc/ipc_listener.h" #include "ipc/ipc_message.h" namespace IPC { TestSink::TestSink() { } TestSink::~TestSink() { } bool TestSink::Send(Message* message) { OnMessageReceived(*message); delete message; return true; } bool TestSink::Connect() { NOTIMPLEMENTED(); return false; } void TestSink::Close() { NOTIMPLEMENTED(); } base::ProcessId TestSink::GetPeerPID() const { NOTIMPLEMENTED(); return base::ProcessId(); } base::ProcessId TestSink::GetSelfPID() const { NOTIMPLEMENTED(); return base::ProcessId(); } bool TestSink::OnMessageReceived(const Message& msg) { base::ObserverListBase::Iterator it(&filter_list_); 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; } 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); } #if defined(OS_POSIX) && !defined(OS_NACL) int TestSink::GetClientFileDescriptor() const { NOTREACHED(); return -1; } base::ScopedFD TestSink::TakeClientFileDescriptor() { NOTREACHED(); return base::ScopedFD(); } #endif // defined(OS_POSIX) && !defined(OS_NACL) } // namespace IPC