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