Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / ipc / ipc_test_sink.cc
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 base::ProcessId TestSink::GetSelfPID() const {
39   NOTIMPLEMENTED();
40   return base::ProcessId();
41 }
42
43 bool TestSink::OnMessageReceived(const Message& msg) {
44   ObserverListBase<Listener>::Iterator it(filter_list_);
45   Listener* observer;
46   while ((observer = it.GetNext()) != NULL) {
47     if (observer->OnMessageReceived(msg))
48       return true;
49   }
50
51   // No filter handled the message, so store it.
52   messages_.push_back(Message(msg));
53   return true;
54 }
55
56 void TestSink::ClearMessages() {
57   messages_.clear();
58 }
59
60 const Message* TestSink::GetMessageAt(size_t index) const {
61   if (index >= messages_.size())
62     return NULL;
63   return &messages_[index];
64 }
65
66 const 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
74 const 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
88 void TestSink::AddFilter(Listener* filter) {
89   filter_list_.AddObserver(filter);
90 }
91
92 void TestSink::RemoveFilter(Listener* filter) {
93   filter_list_.RemoveObserver(filter);
94 }
95
96 #if defined(OS_POSIX) && !defined(OS_NACL)
97
98 int TestSink::GetClientFileDescriptor() const {
99   NOTREACHED();
100   return -1;
101 }
102
103 base::ScopedFD TestSink::TakeClientFileDescriptor() {
104   NOTREACHED();
105   return base::ScopedFD();
106 }
107
108 #endif  // defined(OS_POSIX) && !defined(OS_NACL)
109
110 }  // namespace IPC