ipc_test_sink.cc 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. #include "ipc/ipc_test_sink.h"
  5. #include <stddef.h>
  6. #include <stdint.h>
  7. #include "build/build_config.h"
  8. #include "ipc/ipc_listener.h"
  9. #include "ipc/ipc_message.h"
  10. namespace IPC {
  11. TestSink::TestSink() = default;
  12. TestSink::~TestSink() = default;
  13. bool TestSink::Send(Message* message) {
  14. OnMessageReceived(*message);
  15. delete message;
  16. return true;
  17. }
  18. bool TestSink::Connect() {
  19. NOTIMPLEMENTED();
  20. return false;
  21. }
  22. void TestSink::Close() {
  23. NOTIMPLEMENTED();
  24. }
  25. bool TestSink::OnMessageReceived(const Message& msg) {
  26. for (auto& observer : filter_list_) {
  27. if (observer.OnMessageReceived(msg))
  28. return true;
  29. }
  30. // No filter handled the message, so store it.
  31. messages_.push_back(Message(msg));
  32. return true;
  33. }
  34. void TestSink::ClearMessages() {
  35. messages_.clear();
  36. }
  37. const Message* TestSink::GetMessageAt(size_t index) const {
  38. if (index >= messages_.size())
  39. return NULL;
  40. return &messages_[index];
  41. }
  42. const Message* TestSink::GetFirstMessageMatching(uint32_t id) const {
  43. for (size_t i = 0; i < messages_.size(); i++) {
  44. if (messages_[i].type() == id)
  45. return &messages_[i];
  46. }
  47. return NULL;
  48. }
  49. const Message* TestSink::GetUniqueMessageMatching(uint32_t id) const {
  50. size_t found_index = 0;
  51. size_t found_count = 0;
  52. for (size_t i = 0; i < messages_.size(); i++) {
  53. if (messages_[i].type() == id) {
  54. found_count++;
  55. found_index = i;
  56. }
  57. }
  58. if (found_count != 1)
  59. return NULL; // Didn't find a unique one.
  60. return &messages_[found_index];
  61. }
  62. void TestSink::AddFilter(Listener* filter) {
  63. filter_list_.AddObserver(filter);
  64. }
  65. void TestSink::RemoveFilter(Listener* filter) {
  66. filter_list_.RemoveObserver(filter);
  67. }
  68. } // namespace IPC