diff options
Diffstat (limited to 'chromium/media/remoting/courier_renderer_unittest.cc')
-rw-r--r-- | chromium/media/remoting/courier_renderer_unittest.cc | 161 |
1 files changed, 114 insertions, 47 deletions
diff --git a/chromium/media/remoting/courier_renderer_unittest.cc b/chromium/media/remoting/courier_renderer_unittest.cc index a51f3dc86ef..4d13c140856 100644 --- a/chromium/media/remoting/courier_renderer_unittest.cc +++ b/chromium/media/remoting/courier_renderer_unittest.cc @@ -7,6 +7,7 @@ #include <memory> #include "base/bind.h" +#include "base/check.h" #include "base/run_loop.h" #include "base/test/simple_test_tick_clock.h" #include "base/test/task_environment.h" @@ -20,6 +21,7 @@ #include "media/remoting/proto_enum_utils.h" #include "media/remoting/proto_utils.h" #include "media/remoting/renderer_controller.h" +#include "media/remoting/rpc_broker.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -146,16 +148,7 @@ class RendererClientImpl final : public RendererClient { class CourierRendererTest : public testing::Test { public: - CourierRendererTest() - : receiver_renderer_handle_(10), - receiver_audio_demuxer_callback_handle_(11), - receiver_video_demuxer_callback_handle_(12), - sender_client_handle_(RpcBroker::kInvalidHandle), - sender_renderer_callback_handle_(RpcBroker::kInvalidHandle), - sender_audio_demuxer_handle_(RpcBroker::kInvalidHandle), - sender_video_demuxer_handle_(RpcBroker::kInvalidHandle), - received_audio_ds_init_cb_(false), - received_video_ds_init_cb_(false) {} + CourierRendererTest() = default; ~CourierRendererTest() override = default; // Use this function to mimic receiver to handle RPC message for renderer @@ -165,40 +158,87 @@ class CourierRendererTest : public testing::Test { ASSERT_TRUE(rpc->ParseFromArray(message->data(), message->size())); switch (rpc->proc()) { case pb::RpcMessage::RPC_ACQUIRE_RENDERER: { + DCHECK(rpc->has_integer_value()); + sender_renderer_handle_ = rpc->integer_value(); // Issues RPC_ACQUIRE_RENDERER_DONE RPC message. - std::unique_ptr<pb::RpcMessage> acquire_done(new pb::RpcMessage()); - acquire_done->set_handle(rpc->integer_value()); + auto acquire_done = std::make_unique<pb::RpcMessage>(); + acquire_done->set_handle(sender_renderer_handle_); acquire_done->set_proc(pb::RpcMessage::RPC_ACQUIRE_RENDERER_DONE); acquire_done->set_integer_value(receiver_renderer_handle_); controller_->GetRpcBroker()->ProcessMessageFromRemote( std::move(acquire_done)); } break; + case pb::RpcMessage::RPC_ACQUIRE_DEMUXER: { + if (!is_backward_compatible_mode_) { + int acquire_demuxer_handle = RpcBroker::kAcquireDemuxerHandle; + EXPECT_EQ(rpc->handle(), acquire_demuxer_handle); + sender_audio_demuxer_handle_ = + rpc->acquire_demuxer_rpc().audio_demuxer_handle(); + sender_video_demuxer_handle_ = + rpc->acquire_demuxer_rpc().video_demuxer_handle(); + + // Issues audio RPC_DS_INITIALIZE RPC message. + if (sender_audio_demuxer_handle_ != RpcBroker::kInvalidHandle) { + auto ds_init = std::make_unique<pb::RpcMessage>(); + ds_init->set_handle(sender_audio_demuxer_handle_); + ds_init->set_proc(pb::RpcMessage::RPC_DS_INITIALIZE); + ds_init->set_integer_value(receiver_audio_demuxer_callback_handle_); + controller_->GetRpcBroker()->ProcessMessageFromRemote( + std::move(ds_init)); + } + + // Issues video RPC_DS_INITIALIZE RPC message. + if (sender_video_demuxer_handle_ != RpcBroker::kInvalidHandle) { + auto ds_init = std::make_unique<pb::RpcMessage>(); + ds_init->set_handle(sender_video_demuxer_handle_); + ds_init->set_proc(pb::RpcMessage::RPC_DS_INITIALIZE); + ds_init->set_integer_value(receiver_video_demuxer_callback_handle_); + controller_->GetRpcBroker()->ProcessMessageFromRemote( + std::move(ds_init)); + } + } + } break; case pb::RpcMessage::RPC_R_INITIALIZE: { - EXPECT_EQ(rpc->handle(), receiver_renderer_handle_); sender_renderer_callback_handle_ = rpc->renderer_initialize_rpc().callback_handle(); sender_client_handle_ = rpc->renderer_initialize_rpc().client_handle(); - sender_audio_demuxer_handle_ = - rpc->renderer_initialize_rpc().audio_demuxer_handle(); - sender_video_demuxer_handle_ = - rpc->renderer_initialize_rpc().video_demuxer_handle(); - - // Issues audio RPC_DS_INITIALIZE RPC message. - if (sender_audio_demuxer_handle_ != RpcBroker::kInvalidHandle) { - std::unique_ptr<pb::RpcMessage> ds_init(new pb::RpcMessage()); - ds_init->set_handle(sender_audio_demuxer_handle_); - ds_init->set_proc(pb::RpcMessage::RPC_DS_INITIALIZE); - ds_init->set_integer_value(receiver_audio_demuxer_callback_handle_); - controller_->GetRpcBroker()->ProcessMessageFromRemote( - std::move(ds_init)); - } - if (sender_video_demuxer_handle_ != RpcBroker::kInvalidHandle) { - std::unique_ptr<pb::RpcMessage> ds_init(new pb::RpcMessage()); - ds_init->set_handle(sender_video_demuxer_handle_); - ds_init->set_proc(pb::RpcMessage::RPC_DS_INITIALIZE); - ds_init->set_integer_value(receiver_video_demuxer_callback_handle_); + + if (is_backward_compatible_mode_) { + EXPECT_EQ(rpc->handle(), receiver_renderer_handle_); + + sender_audio_demuxer_handle_ = + rpc->renderer_initialize_rpc().audio_demuxer_handle(); + sender_video_demuxer_handle_ = + rpc->renderer_initialize_rpc().video_demuxer_handle(); + + // Issues audio RPC_DS_INITIALIZE RPC message. + if (sender_audio_demuxer_handle_ != RpcBroker::kInvalidHandle) { + auto ds_init = std::make_unique<pb::RpcMessage>(); + ds_init->set_handle(sender_audio_demuxer_handle_); + ds_init->set_proc(pb::RpcMessage::RPC_DS_INITIALIZE); + ds_init->set_integer_value(receiver_audio_demuxer_callback_handle_); + controller_->GetRpcBroker()->ProcessMessageFromRemote( + std::move(ds_init)); + } + + // Issues video RPC_DS_INITIALIZE RPC message. + if (sender_video_demuxer_handle_ != RpcBroker::kInvalidHandle) { + auto ds_init = std::make_unique<pb::RpcMessage>(); + ds_init->set_handle(sender_video_demuxer_handle_); + ds_init->set_proc(pb::RpcMessage::RPC_DS_INITIALIZE); + ds_init->set_integer_value(receiver_video_demuxer_callback_handle_); + controller_->GetRpcBroker()->ProcessMessageFromRemote( + std::move(ds_init)); + } + } else { + // Issues RPC_R_INITIALIZE_CALLBACK RPC message when receiving + // RPC_R_INITIALIZE. + auto init_cb = std::make_unique<pb::RpcMessage>(); + init_cb->set_handle(sender_renderer_callback_handle_); + init_cb->set_proc(pb::RpcMessage::RPC_R_INITIALIZE_CALLBACK); + init_cb->set_boolean_value(is_successfully_initialized_); controller_->GetRpcBroker()->ProcessMessageFromRemote( - std::move(ds_init)); + std::move(init_cb)); } } break; case pb::RpcMessage::RPC_DS_INITIALIZE_CALLBACK: { @@ -207,20 +247,24 @@ class CourierRendererTest : public testing::Test { if (rpc->handle() == receiver_video_demuxer_callback_handle_) received_video_ds_init_cb_ = true; - // Issues RPC_R_INITIALIZE_CALLBACK RPC message when receiving - // RPC_DS_INITIALIZE_CALLBACK on available streams. + // Check whether the demuxer at the receiver end is initialized. if (received_audio_ds_init_cb_ == (sender_audio_demuxer_handle_ != RpcBroker::kInvalidHandle) && received_video_ds_init_cb_ == (sender_video_demuxer_handle_ != RpcBroker::kInvalidHandle)) { - std::unique_ptr<pb::RpcMessage> init_cb(new pb::RpcMessage()); + is_receiver_demuxer_initialized_ = true; + } + + if (is_backward_compatible_mode_ && is_receiver_demuxer_initialized_) { + // Issues RPC_R_INITIALIZE_CALLBACK RPC message when receiving + // RPC_DS_INITIALIZE_CALLBACK on available streams. + auto init_cb = std::make_unique<pb::RpcMessage>(); init_cb->set_handle(sender_renderer_callback_handle_); init_cb->set_proc(pb::RpcMessage::RPC_R_INITIALIZE_CALLBACK); init_cb->set_boolean_value(is_successfully_initialized_); controller_->GetRpcBroker()->ProcessMessageFromRemote( std::move(init_cb)); } - } break; case pb::RpcMessage::RPC_R_FLUSHUNTIL: { // Issues RPC_R_FLUSHUNTIL_CALLBACK RPC message. @@ -269,8 +313,16 @@ class CourierRendererTest : public testing::Test { RunPendingTasks(); } + void InitializeRendererBackwardsCompatible() { + is_backward_compatible_mode_ = true; + InitializeRenderer(); + } + bool IsRendererInitialized() const { - return renderer_->state_ == CourierRenderer::STATE_PLAYING; + EXPECT_TRUE(received_audio_ds_init_cb_); + EXPECT_TRUE(received_video_ds_init_cb_); + return renderer_->state_ == CourierRenderer::STATE_PLAYING && + is_receiver_demuxer_initialized_; } bool DidEncounterFatalError() const { @@ -402,17 +454,24 @@ class CourierRendererTest : public testing::Test { base::SimpleTestTickClock clock_; // RPC handles. - const int receiver_renderer_handle_; - const int receiver_audio_demuxer_callback_handle_; - const int receiver_video_demuxer_callback_handle_; - int sender_client_handle_; - int sender_renderer_callback_handle_; - int sender_audio_demuxer_handle_; - int sender_video_demuxer_handle_; + const int receiver_renderer_handle_{10}; + const int receiver_audio_demuxer_callback_handle_{11}; + const int receiver_video_demuxer_callback_handle_{12}; + int sender_renderer_handle_; + int sender_client_handle_{RpcBroker::kInvalidHandle}; + int sender_renderer_callback_handle_{RpcBroker::kInvalidHandle}; + int sender_audio_demuxer_handle_{RpcBroker::kInvalidHandle}; + int sender_video_demuxer_handle_{RpcBroker::kInvalidHandle}; + + // Indicates whether the test runs in backward-compatible mode. + bool is_backward_compatible_mode_ = false; + + // Indicates whether the demuxer at receiver is initialized or not. + bool is_receiver_demuxer_initialized_ = false; // Indicate whether RPC_DS_INITIALIZE_CALLBACK RPC messages are received. - bool received_audio_ds_init_cb_; - bool received_video_ds_init_cb_; + bool received_audio_ds_init_cb_ = false; + bool received_video_ds_init_cb_ = false; // Indicates whether the test wants to simulate successful initialization in // the renderer on the receiver side. @@ -433,6 +492,14 @@ TEST_F(CourierRendererTest, Initialize) { ASSERT_EQ(render_client_->status(), PIPELINE_OK); } +TEST_F(CourierRendererTest, InitializeBackwardCompatible) { + InitializeRendererBackwardsCompatible(); + RunPendingTasks(); + + ASSERT_TRUE(IsRendererInitialized()); + ASSERT_EQ(render_client_->status(), PIPELINE_OK); +} + TEST_F(CourierRendererTest, InitializeFailed) { is_successfully_initialized_ = false; InitializeRenderer(); |