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