mock_receiver_controller.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // Copyright 2020 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. #ifndef MEDIA_REMOTING_MOCK_RECEIVER_CONTROLLER_H_
  5. #define MEDIA_REMOTING_MOCK_RECEIVER_CONTROLLER_H_
  6. #include <memory>
  7. #include <vector>
  8. #include "base/memory/scoped_refptr.h"
  9. #include "base/no_destructor.h"
  10. #include "media/mojo/mojom/media_types.mojom.h"
  11. #include "media/mojo/mojom/remoting.mojom.h"
  12. #include "media/remoting/receiver_controller.h"
  13. #include "testing/gmock/include/gmock/gmock.h"
  14. #include "testing/gtest/include/gtest/gtest.h"
  15. #include "ui/gfx/geometry/size.h"
  16. namespace media {
  17. class MojoDecoderBufferWriter;
  18. namespace remoting {
  19. class MockRemotee : public mojom::Remotee {
  20. public:
  21. MockRemotee();
  22. ~MockRemotee() override;
  23. void BindMojoReceiver(mojo::PendingReceiver<Remotee> receiver);
  24. void SendAudioFrame(uint32_t frame_count,
  25. scoped_refptr<DecoderBuffer> buffer);
  26. void SendVideoFrame(uint32_t frame_count,
  27. scoped_refptr<DecoderBuffer> buffer);
  28. // mojom::Remotee implementation
  29. void OnRemotingSinkReady(
  30. mojo::PendingRemote<mojom::RemotingSink> remoting_sink) override;
  31. void SendMessageToSource(const std::vector<uint8_t>& message) override;
  32. void StartDataStreams(
  33. mojo::PendingRemote<mojom::RemotingDataStreamReceiver> audio_stream,
  34. mojo::PendingRemote<mojom::RemotingDataStreamReceiver> video_stream)
  35. override;
  36. void OnFlushUntil(uint32_t audio_count, uint32_t video_count) override;
  37. void OnVideoNaturalSizeChange(const gfx::Size& size) override;
  38. void Reset();
  39. gfx::Size changed_size() { return changed_size_; }
  40. uint32_t flush_audio_count() { return flush_audio_count_; }
  41. uint32_t flush_video_count() { return flush_video_count_; }
  42. mojo::PendingRemote<mojom::Remotee> BindNewPipeAndPassRemote() {
  43. return receiver_.BindNewPipeAndPassRemote();
  44. }
  45. mojo::Remote<mojom::RemotingDataStreamReceiver> audio_stream_;
  46. mojo::Remote<mojom::RemotingDataStreamReceiver> video_stream_;
  47. private:
  48. gfx::Size changed_size_;
  49. uint32_t flush_audio_count_{0};
  50. uint32_t flush_video_count_{0};
  51. std::unique_ptr<MojoDecoderBufferWriter> audio_buffer_writer_;
  52. std::unique_ptr<MojoDecoderBufferWriter> video_buffer_writer_;
  53. mojo::Remote<mojom::RemotingSink> remoting_sink_;
  54. mojo::Receiver<mojom::Remotee> receiver_{this};
  55. };
  56. class MockReceiverController : public ReceiverController {
  57. public:
  58. static MockReceiverController* GetInstance();
  59. MockRemotee* mock_remotee() { return mock_remotee_.get(); }
  60. private:
  61. friend base::NoDestructor<MockReceiverController>;
  62. friend testing::StrictMock<MockReceiverController>;
  63. friend testing::NiceMock<MockReceiverController>;
  64. MockReceiverController();
  65. ~MockReceiverController() override;
  66. void OnSendRpc(std::vector<uint8_t> message);
  67. std::unique_ptr<MockRemotee> mock_remotee_;
  68. };
  69. } // namespace remoting
  70. } // namespace media
  71. #endif // MEDIA_REMOTING_MOCK_RECEIVER_CONTROLLER_H_