Home | History | Annotate | Download | only in ipc
      1 // 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 
      7 #include "ipc/ipc_listener.h"
      8 #include "ipc/ipc_message.h"
      9 
     10 namespace IPC {
     11 
     12 TestSink::TestSink() {
     13 }
     14 
     15 TestSink::~TestSink() {
     16 }
     17 
     18 bool TestSink::Send(Message* message) {
     19   OnMessageReceived(*message);
     20   delete message;
     21   return true;
     22 }
     23 
     24 bool TestSink::Connect() {
     25   NOTIMPLEMENTED();
     26   return false;
     27 }
     28 
     29 void TestSink::Close() {
     30   NOTIMPLEMENTED();
     31 }
     32 
     33 base::ProcessId TestSink::GetPeerPID() const {
     34   NOTIMPLEMENTED();
     35   return base::ProcessId();
     36 }
     37 
     38 
     39 bool TestSink::OnMessageReceived(const Message& msg) {
     40   ObserverListBase<Listener>::Iterator it(filter_list_);
     41   Listener* observer;
     42   while ((observer = it.GetNext()) != NULL) {
     43     if (observer->OnMessageReceived(msg))
     44       return true;
     45   }
     46 
     47   // No filter handled the message, so store it.
     48   messages_.push_back(Message(msg));
     49   return true;
     50 }
     51 
     52 void TestSink::ClearMessages() {
     53   messages_.clear();
     54 }
     55 
     56 const Message* TestSink::GetMessageAt(size_t index) const {
     57   if (index >= messages_.size())
     58     return NULL;
     59   return &messages_[index];
     60 }
     61 
     62 const Message* TestSink::GetFirstMessageMatching(uint32 id) const {
     63   for (size_t i = 0; i < messages_.size(); i++) {
     64     if (messages_[i].type() == id)
     65       return &messages_[i];
     66   }
     67   return NULL;
     68 }
     69 
     70 const Message* TestSink::GetUniqueMessageMatching(uint32 id) const {
     71   size_t found_index = 0;
     72   size_t found_count = 0;
     73   for (size_t i = 0; i < messages_.size(); i++) {
     74     if (messages_[i].type() == id) {
     75       found_count++;
     76       found_index = i;
     77     }
     78   }
     79   if (found_count != 1)
     80     return NULL;  // Didn't find a unique one.
     81   return &messages_[found_index];
     82 }
     83 
     84 void TestSink::AddFilter(Listener* filter) {
     85   filter_list_.AddObserver(filter);
     86 }
     87 
     88 void TestSink::RemoveFilter(Listener* filter) {
     89   filter_list_.RemoveObserver(filter);
     90 }
     91 
     92 #if defined(OS_POSIX) && !defined(OS_NACL)
     93 
     94 int TestSink::GetClientFileDescriptor() const {
     95   NOTREACHED();
     96   return -1;
     97 }
     98 
     99 int TestSink::TakeClientFileDescriptor() {
    100   NOTREACHED();
    101   return -1;
    102 }
    103 
    104 #endif  // defined(OS_POSIX) && !defined(OS_NACL)
    105 
    106 }  // namespace IPC
    107