| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/remoting/remote_renderer_impl.h" | 5 #include "media/remoting/remote_renderer_impl.h" |
| 6 | 6 |
| 7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "media/base/pipeline_status.h" | 8 #include "media/base/pipeline_status.h" |
| 9 #include "media/remoting/fake_remoting_controller.h" | 9 #include "media/remoting/fake_remoting_controller.h" |
| 10 #include "media/remoting/fake_remoting_demuxer_stream_provider.h" | 10 #include "media/remoting/fake_remoting_demuxer_stream_provider.h" |
| 11 #include "media/remoting/remoting_controller.h" | 11 #include "media/remoting/remoting_renderer_controller.h" |
| 12 #include "testing/gmock/include/gmock/gmock.h" | 12 #include "testing/gmock/include/gmock/gmock.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 14 | 14 |
| 15 using testing::_; | 15 using testing::_; |
| 16 using testing::Invoke; | 16 using testing::Invoke; |
| 17 using testing::Return; | 17 using testing::Return; |
| 18 | 18 |
| 19 namespace media { | 19 namespace media { |
| 20 | 20 |
| 21 class RendererClientImpl : public RendererClient { | 21 class RendererClientImpl : public RendererClient { |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 ASSERT_TRUE(rpc->ParseFromArray(message->data(), message->size())); | 110 ASSERT_TRUE(rpc->ParseFromArray(message->data(), message->size())); |
| 111 switch (rpc->proc()) { | 111 switch (rpc->proc()) { |
| 112 case remoting::pb::RpcMessage::RPC_ACQUIRE_RENDERER: { | 112 case remoting::pb::RpcMessage::RPC_ACQUIRE_RENDERER: { |
| 113 // Issues RPC_ACQUIRE_RENDERER_DONE RPC message. | 113 // Issues RPC_ACQUIRE_RENDERER_DONE RPC message. |
| 114 std::unique_ptr<remoting::pb::RpcMessage> acquire_done( | 114 std::unique_ptr<remoting::pb::RpcMessage> acquire_done( |
| 115 new remoting::pb::RpcMessage()); | 115 new remoting::pb::RpcMessage()); |
| 116 acquire_done->set_handle(rpc->integer_value()); | 116 acquire_done->set_handle(rpc->integer_value()); |
| 117 acquire_done->set_proc( | 117 acquire_done->set_proc( |
| 118 remoting::pb::RpcMessage::RPC_ACQUIRE_RENDERER_DONE); | 118 remoting::pb::RpcMessage::RPC_ACQUIRE_RENDERER_DONE); |
| 119 acquire_done->set_integer_value(receiver_renderer_handle_); | 119 acquire_done->set_integer_value(receiver_renderer_handle_); |
| 120 remoting_controller_->GetRpcBroker()->ProcessMessageFromRemote( | 120 remoting_renderer_controller_->GetRpcBroker()->ProcessMessageFromRemote( |
| 121 std::move(acquire_done)); | 121 std::move(acquire_done)); |
| 122 } break; | 122 } break; |
| 123 case remoting::pb::RpcMessage::RPC_R_INITIALIZE: { | 123 case remoting::pb::RpcMessage::RPC_R_INITIALIZE: { |
| 124 EXPECT_EQ(rpc->handle(), receiver_renderer_handle_); | 124 EXPECT_EQ(rpc->handle(), receiver_renderer_handle_); |
| 125 sender_renderer_callback_handle_ = | 125 sender_renderer_callback_handle_ = |
| 126 rpc->renderer_initialize_rpc().callback_handle(); | 126 rpc->renderer_initialize_rpc().callback_handle(); |
| 127 sender_client_handle_ = rpc->renderer_initialize_rpc().client_handle(); | 127 sender_client_handle_ = rpc->renderer_initialize_rpc().client_handle(); |
| 128 sender_audio_demuxer_handle_ = | 128 sender_audio_demuxer_handle_ = |
| 129 rpc->renderer_initialize_rpc().audio_demuxer_handle(); | 129 rpc->renderer_initialize_rpc().audio_demuxer_handle(); |
| 130 sender_video_demuxer_handle_ = | 130 sender_video_demuxer_handle_ = |
| 131 rpc->renderer_initialize_rpc().video_demuxer_handle(); | 131 rpc->renderer_initialize_rpc().video_demuxer_handle(); |
| 132 | 132 |
| 133 // Issues audio RPC_DS_INITIALIZE RPC message. | 133 // Issues audio RPC_DS_INITIALIZE RPC message. |
| 134 if (sender_audio_demuxer_handle_ != remoting::kInvalidHandle) { | 134 if (sender_audio_demuxer_handle_ != remoting::kInvalidHandle) { |
| 135 std::unique_ptr<remoting::pb::RpcMessage> ds_init( | 135 std::unique_ptr<remoting::pb::RpcMessage> ds_init( |
| 136 new remoting::pb::RpcMessage()); | 136 new remoting::pb::RpcMessage()); |
| 137 ds_init->set_handle(sender_audio_demuxer_handle_); | 137 ds_init->set_handle(sender_audio_demuxer_handle_); |
| 138 ds_init->set_proc(remoting::pb::RpcMessage::RPC_DS_INITIALIZE); | 138 ds_init->set_proc(remoting::pb::RpcMessage::RPC_DS_INITIALIZE); |
| 139 ds_init->set_integer_value(receiver_audio_demuxer_callback_handle_); | 139 ds_init->set_integer_value(receiver_audio_demuxer_callback_handle_); |
| 140 remoting_controller_->GetRpcBroker()->ProcessMessageFromRemote( | 140 remoting_renderer_controller_->GetRpcBroker() |
| 141 std::move(ds_init)); | 141 ->ProcessMessageFromRemote(std::move(ds_init)); |
| 142 } | 142 } |
| 143 if (sender_video_demuxer_handle_ != remoting::kInvalidHandle) { | 143 if (sender_video_demuxer_handle_ != remoting::kInvalidHandle) { |
| 144 std::unique_ptr<remoting::pb::RpcMessage> ds_init( | 144 std::unique_ptr<remoting::pb::RpcMessage> ds_init( |
| 145 new remoting::pb::RpcMessage()); | 145 new remoting::pb::RpcMessage()); |
| 146 ds_init->set_handle(sender_video_demuxer_handle_); | 146 ds_init->set_handle(sender_video_demuxer_handle_); |
| 147 ds_init->set_proc(remoting::pb::RpcMessage::RPC_DS_INITIALIZE); | 147 ds_init->set_proc(remoting::pb::RpcMessage::RPC_DS_INITIALIZE); |
| 148 ds_init->set_integer_value(receiver_video_demuxer_callback_handle_); | 148 ds_init->set_integer_value(receiver_video_demuxer_callback_handle_); |
| 149 remoting_controller_->GetRpcBroker()->ProcessMessageFromRemote( | 149 remoting_renderer_controller_->GetRpcBroker() |
| 150 std::move(ds_init)); | 150 ->ProcessMessageFromRemote(std::move(ds_init)); |
| 151 } | 151 } |
| 152 } break; | 152 } break; |
| 153 case remoting::pb::RpcMessage::RPC_DS_INITIALIZE_CALLBACK: { | 153 case remoting::pb::RpcMessage::RPC_DS_INITIALIZE_CALLBACK: { |
| 154 if (rpc->handle() == receiver_audio_demuxer_callback_handle_) | 154 if (rpc->handle() == receiver_audio_demuxer_callback_handle_) |
| 155 received_audio_ds_init_cb_ = true; | 155 received_audio_ds_init_cb_ = true; |
| 156 if (rpc->handle() == receiver_video_demuxer_callback_handle_) | 156 if (rpc->handle() == receiver_video_demuxer_callback_handle_) |
| 157 received_video_ds_init_cb_ = true; | 157 received_video_ds_init_cb_ = true; |
| 158 | 158 |
| 159 // Issues RPC_R_INITIALIZE_CALLBACK RPC message when receiving | 159 // Issues RPC_R_INITIALIZE_CALLBACK RPC message when receiving |
| 160 // RPC_DS_INITIALIZE_CALLBACK on available streams. | 160 // RPC_DS_INITIALIZE_CALLBACK on available streams. |
| 161 if (received_audio_ds_init_cb_ == | 161 if (received_audio_ds_init_cb_ == |
| 162 (sender_audio_demuxer_handle_ != remoting::kInvalidHandle) && | 162 (sender_audio_demuxer_handle_ != remoting::kInvalidHandle) && |
| 163 received_video_ds_init_cb_ == | 163 received_video_ds_init_cb_ == |
| 164 (sender_video_demuxer_handle_ != remoting::kInvalidHandle)) { | 164 (sender_video_demuxer_handle_ != remoting::kInvalidHandle)) { |
| 165 std::unique_ptr<remoting::pb::RpcMessage> init_cb( | 165 std::unique_ptr<remoting::pb::RpcMessage> init_cb( |
| 166 new remoting::pb::RpcMessage()); | 166 new remoting::pb::RpcMessage()); |
| 167 init_cb->set_handle(sender_renderer_callback_handle_); | 167 init_cb->set_handle(sender_renderer_callback_handle_); |
| 168 init_cb->set_proc( | 168 init_cb->set_proc( |
| 169 remoting::pb::RpcMessage::RPC_R_INITIALIZE_CALLBACK); | 169 remoting::pb::RpcMessage::RPC_R_INITIALIZE_CALLBACK); |
| 170 init_cb->set_boolean_value(true); | 170 init_cb->set_boolean_value(true); |
| 171 remoting_controller_->GetRpcBroker()->ProcessMessageFromRemote( | 171 remoting_renderer_controller_->GetRpcBroker() |
| 172 std::move(init_cb)); | 172 ->ProcessMessageFromRemote(std::move(init_cb)); |
| 173 renderer_initialized_ = true; | 173 renderer_initialized_ = true; |
| 174 } | 174 } |
| 175 | 175 |
| 176 } break; | 176 } break; |
| 177 case remoting::pb::RpcMessage::RPC_R_FLUSHUNTIL: { | 177 case remoting::pb::RpcMessage::RPC_R_FLUSHUNTIL: { |
| 178 // Issues RPC_R_FLUSHUNTIL_CALLBACK RPC message. | 178 // Issues RPC_R_FLUSHUNTIL_CALLBACK RPC message. |
| 179 std::unique_ptr<remoting::pb::RpcMessage> flush_cb( | 179 std::unique_ptr<remoting::pb::RpcMessage> flush_cb( |
| 180 new remoting::pb::RpcMessage()); | 180 new remoting::pb::RpcMessage()); |
| 181 flush_cb->set_handle(rpc->renderer_flushuntil_rpc().callback_handle()); | 181 flush_cb->set_handle(rpc->renderer_flushuntil_rpc().callback_handle()); |
| 182 flush_cb->set_proc(remoting::pb::RpcMessage::RPC_R_FLUSHUNTIL_CALLBACK); | 182 flush_cb->set_proc(remoting::pb::RpcMessage::RPC_R_FLUSHUNTIL_CALLBACK); |
| 183 remoting_controller_->GetRpcBroker()->ProcessMessageFromRemote( | 183 remoting_renderer_controller_->GetRpcBroker()->ProcessMessageFromRemote( |
| 184 std::move(flush_cb)); | 184 std::move(flush_cb)); |
| 185 | 185 |
| 186 } break; | 186 } break; |
| 187 | 187 |
| 188 default: | 188 default: |
| 189 NOTREACHED(); | 189 NOTREACHED(); |
| 190 } | 190 } |
| 191 RunPendingTasks(); | 191 RunPendingTasks(); |
| 192 } | 192 } |
| 193 | 193 |
| 194 // Callback from RpcBroker when sending message to remote sink. | 194 // Callback from RpcBroker when sending message to remote sink. |
| 195 void OnSendMessageToSink(std::unique_ptr<std::vector<uint8_t>> message) { | 195 void OnSendMessageToSink(std::unique_ptr<std::vector<uint8_t>> message) { |
| 196 std::unique_ptr<remoting::pb::RpcMessage> rpc( | 196 std::unique_ptr<remoting::pb::RpcMessage> rpc( |
| 197 new remoting::pb::RpcMessage()); | 197 new remoting::pb::RpcMessage()); |
| 198 ASSERT_TRUE(rpc->ParseFromArray(message->data(), message->size())); | 198 ASSERT_TRUE(rpc->ParseFromArray(message->data(), message->size())); |
| 199 received_rpc_.push_back(std::move(rpc)); | 199 received_rpc_.push_back(std::move(rpc)); |
| 200 } | 200 } |
| 201 | 201 |
| 202 protected: | 202 protected: |
| 203 void InitializeRenderer() { | 203 void InitializeRenderer() { |
| 204 // Register media::RendererClient implementation. | 204 // Register media::RendererClient implementation. |
| 205 render_client_.reset(new RendererClientImpl()); | 205 render_client_.reset(new RendererClientImpl()); |
| 206 demuxer_stream_provider_.reset(new FakeRemotingDemuxerStreamProvider()); | 206 demuxer_stream_provider_.reset(new FakeRemotingDemuxerStreamProvider()); |
| 207 EXPECT_CALL(*render_client_, OnPipelineStatus(_)).Times(1); | 207 EXPECT_CALL(*render_client_, OnPipelineStatus(_)).Times(1); |
| 208 DCHECK(remote_renderer_impl_); | 208 DCHECK(remote_renderer_impl_); |
| 209 // Redirect RPC message for simulate receiver scenario | 209 // Redirect RPC message for simulate receiver scenario |
| 210 remoting_controller_->GetRpcBroker()->SetMessageCallbackForTesting( | 210 remoting_renderer_controller_->GetRpcBroker()->SetMessageCallbackForTesting( |
| 211 base::Bind(&RemoteRendererImplTest::RpcMessageResponseBot, | 211 base::Bind(&RemoteRendererImplTest::RpcMessageResponseBot, |
| 212 base::Unretained(this))); | 212 base::Unretained(this))); |
| 213 RunPendingTasks(); | 213 RunPendingTasks(); |
| 214 remote_renderer_impl_->Initialize( | 214 remote_renderer_impl_->Initialize( |
| 215 demuxer_stream_provider_.get(), render_client_.get(), | 215 demuxer_stream_provider_.get(), render_client_.get(), |
| 216 base::Bind(&RendererClientImpl::OnPipelineStatus, | 216 base::Bind(&RendererClientImpl::OnPipelineStatus, |
| 217 base::Unretained(render_client_.get()))); | 217 base::Unretained(render_client_.get()))); |
| 218 RunPendingTasks(); | 218 RunPendingTasks(); |
| 219 // Redirect RPC message back to save for later check. | 219 // Redirect RPC message back to save for later check. |
| 220 remoting_controller_->GetRpcBroker()->SetMessageCallbackForTesting( | 220 remoting_renderer_controller_->GetRpcBroker()->SetMessageCallbackForTesting( |
| 221 base::Bind(&RemoteRendererImplTest::OnSendMessageToSink, | 221 base::Bind(&RemoteRendererImplTest::OnSendMessageToSink, |
| 222 base::Unretained(this))); | 222 base::Unretained(this))); |
| 223 RunPendingTasks(); | 223 RunPendingTasks(); |
| 224 } | 224 } |
| 225 | 225 |
| 226 bool IsRendererInitialized() const { | 226 bool IsRendererInitialized() const { |
| 227 return remote_renderer_impl_->state_ == RemoteRendererImpl::STATE_PLAYING; | 227 return remote_renderer_impl_->state_ == RemoteRendererImpl::STATE_PLAYING; |
| 228 } | 228 } |
| 229 | 229 |
| 230 void OnReceivedRpc(std::unique_ptr<remoting::pb::RpcMessage> message) { | 230 void OnReceivedRpc(std::unique_ptr<remoting::pb::RpcMessage> message) { |
| 231 remote_renderer_impl_->OnReceivedRpc(std::move(message)); | 231 remote_renderer_impl_->OnReceivedRpc(std::move(message)); |
| 232 } | 232 } |
| 233 | 233 |
| 234 void SetUp() override { | 234 void SetUp() override { |
| 235 // Creates RemotingController. | 235 // Creates RemotingRendererController. |
| 236 remoter_factory_.reset(new FakeRemoterFactory(true)); | 236 remoting_renderer_controller_ = |
| 237 remoting_controller_ = CreateRemotingController(remoter_factory_.get()); | 237 base::MakeUnique<RemotingRendererController>( |
| 238 CreateRemotingSourceImpl(false)); |
| 238 // Redirect RPC message to RemoteRendererImplTest::OnSendMessageToSink(). | 239 // Redirect RPC message to RemoteRendererImplTest::OnSendMessageToSink(). |
| 239 remoting_controller_->GetRpcBroker()->SetMessageCallbackForTesting( | 240 remoting_renderer_controller_->GetRpcBroker()->SetMessageCallbackForTesting( |
| 240 base::Bind(&RemoteRendererImplTest::OnSendMessageToSink, | 241 base::Bind(&RemoteRendererImplTest::OnSendMessageToSink, |
| 241 base::Unretained(this))); | 242 base::Unretained(this))); |
| 242 | 243 |
| 243 // Creates RemoteRendererImpl. | 244 // Creates RemoteRendererImpl. |
| 244 remote_renderer_impl_.reset( | 245 remote_renderer_impl_.reset( |
| 245 new RemoteRendererImpl(base::ThreadTaskRunnerHandle::Get(), | 246 new RemoteRendererImpl(base::ThreadTaskRunnerHandle::Get(), |
| 246 remoting_controller_->GetWeakPtr())); | 247 remoting_renderer_controller_->GetWeakPtr())); |
| 247 RunPendingTasks(); | 248 RunPendingTasks(); |
| 248 } | 249 } |
| 249 | 250 |
| 250 RemoteRendererImpl::State state() const { | 251 RemoteRendererImpl::State state() const { |
| 251 return remote_renderer_impl_->state_; | 252 return remote_renderer_impl_->state_; |
| 252 } | 253 } |
| 253 | 254 |
| 254 void RunPendingTasks() { base::RunLoop().RunUntilIdle(); } | 255 void RunPendingTasks() { base::RunLoop().RunUntilIdle(); } |
| 255 | 256 |
| 256 // Gets first available RpcMessage with specific |proc|. | 257 // Gets first available RpcMessage with specific |proc|. |
| 257 const remoting::pb::RpcMessage* PeekRpcMessage(int proc) const { | 258 const remoting::pb::RpcMessage* PeekRpcMessage(int proc) const { |
| 258 for (auto& s : received_rpc_) { | 259 for (auto& s : received_rpc_) { |
| 259 if (proc == s->proc()) | 260 if (proc == s->proc()) |
| 260 return s.get(); | 261 return s.get(); |
| 261 } | 262 } |
| 262 return nullptr; | 263 return nullptr; |
| 263 } | 264 } |
| 264 int ReceivedRpcMessageCount() const { return received_rpc_.size(); } | 265 int ReceivedRpcMessageCount() const { return received_rpc_.size(); } |
| 265 void ResetReceivedRpcMessage() { received_rpc_.clear(); } | 266 void ResetReceivedRpcMessage() { received_rpc_.clear(); } |
| 266 | 267 |
| 267 void ValidateCurrentTime(base::TimeDelta current, | 268 void ValidateCurrentTime(base::TimeDelta current, |
| 268 base::TimeDelta current_max) const { | 269 base::TimeDelta current_max) const { |
| 269 ASSERT_EQ(remote_renderer_impl_->current_media_time_, current); | 270 ASSERT_EQ(remote_renderer_impl_->current_media_time_, current); |
| 270 ASSERT_EQ(remote_renderer_impl_->current_max_time_, current_max); | 271 ASSERT_EQ(remote_renderer_impl_->current_max_time_, current_max); |
| 271 } | 272 } |
| 272 | 273 |
| 273 std::unique_ptr<FakeRemoterFactory> remoter_factory_; | 274 std::unique_ptr<RemotingRendererController> remoting_renderer_controller_; |
| 274 std::unique_ptr<RemotingController> remoting_controller_; | |
| 275 std::unique_ptr<RendererClientImpl> render_client_; | 275 std::unique_ptr<RendererClientImpl> render_client_; |
| 276 std::unique_ptr<FakeRemotingDemuxerStreamProvider> demuxer_stream_provider_; | 276 std::unique_ptr<FakeRemotingDemuxerStreamProvider> demuxer_stream_provider_; |
| 277 std::unique_ptr<RemoteRendererImpl> remote_renderer_impl_; | 277 std::unique_ptr<RemoteRendererImpl> remote_renderer_impl_; |
| 278 base::MessageLoop message_loop_; | 278 base::MessageLoop message_loop_; |
| 279 | 279 |
| 280 // RPC handles. | 280 // RPC handles. |
| 281 const int receiver_renderer_handle_; | 281 const int receiver_renderer_handle_; |
| 282 const int receiver_audio_demuxer_callback_handle_; | 282 const int receiver_audio_demuxer_callback_handle_; |
| 283 const int receiver_video_demuxer_callback_handle_; | 283 const int receiver_video_demuxer_callback_handle_; |
| 284 int sender_client_handle_; | 284 int sender_client_handle_; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 310 | 310 |
| 311 TEST_F(RemoteRendererImplTest, Flush) { | 311 TEST_F(RemoteRendererImplTest, Flush) { |
| 312 // Initialize Renderer. | 312 // Initialize Renderer. |
| 313 InitializeRenderer(); | 313 InitializeRenderer(); |
| 314 RunPendingTasks(); | 314 RunPendingTasks(); |
| 315 ASSERT_TRUE(IsRendererInitialized()); | 315 ASSERT_TRUE(IsRendererInitialized()); |
| 316 ASSERT_EQ(render_client_->status(), PIPELINE_OK); | 316 ASSERT_EQ(render_client_->status(), PIPELINE_OK); |
| 317 | 317 |
| 318 // Flush Renderer. | 318 // Flush Renderer. |
| 319 // Redirect RPC message for simulate receiver scenario | 319 // Redirect RPC message for simulate receiver scenario |
| 320 remoting_controller_->GetRpcBroker()->SetMessageCallbackForTesting(base::Bind( | 320 remoting_renderer_controller_->GetRpcBroker()->SetMessageCallbackForTesting( |
| 321 &RemoteRendererImplTest::RpcMessageResponseBot, base::Unretained(this))); | 321 base::Bind(&RemoteRendererImplTest::RpcMessageResponseBot, |
| 322 base::Unretained(this))); |
| 322 RunPendingTasks(); | 323 RunPendingTasks(); |
| 323 EXPECT_CALL(*render_client_, OnFlushCallback()).Times(1); | 324 EXPECT_CALL(*render_client_, OnFlushCallback()).Times(1); |
| 324 remote_renderer_impl_->Flush( | 325 remote_renderer_impl_->Flush( |
| 325 base::Bind(&RendererClientImpl::OnFlushCallback, | 326 base::Bind(&RendererClientImpl::OnFlushCallback, |
| 326 base::Unretained(render_client_.get()))); | 327 base::Unretained(render_client_.get()))); |
| 327 RunPendingTasks(); | 328 RunPendingTasks(); |
| 328 } | 329 } |
| 329 | 330 |
| 330 TEST_F(RemoteRendererImplTest, StartPlayingFrom) { | 331 TEST_F(RemoteRendererImplTest, StartPlayingFrom) { |
| 331 // Initialize Renderer | 332 // Initialize Renderer |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 TEST_F(RemoteRendererImplTest, SetPlaybackRate) { | 366 TEST_F(RemoteRendererImplTest, SetPlaybackRate) { |
| 366 // Without initializing renderer, SetPlaybackRate() will be no-op. | 367 // Without initializing renderer, SetPlaybackRate() will be no-op. |
| 367 remote_renderer_impl_->SetPlaybackRate(-1.5); | 368 remote_renderer_impl_->SetPlaybackRate(-1.5); |
| 368 RunPendingTasks(); | 369 RunPendingTasks(); |
| 369 ASSERT_EQ(0, ReceivedRpcMessageCount()); | 370 ASSERT_EQ(0, ReceivedRpcMessageCount()); |
| 370 | 371 |
| 371 // Initialize Renderer | 372 // Initialize Renderer |
| 372 InitializeRenderer(); | 373 InitializeRenderer(); |
| 373 RunPendingTasks(); | 374 RunPendingTasks(); |
| 374 | 375 |
| 375 remoting_controller_->GetRpcBroker()->SetMessageCallbackForTesting(base::Bind( | 376 remoting_renderer_controller_->GetRpcBroker()->SetMessageCallbackForTesting( |
| 376 &RemoteRendererImplTest::OnSendMessageToSink, base::Unretained(this))); | 377 base::Bind(&RemoteRendererImplTest::OnSendMessageToSink, |
| 378 base::Unretained(this))); |
| 377 remote_renderer_impl_->SetPlaybackRate(2.5); | 379 remote_renderer_impl_->SetPlaybackRate(2.5); |
| 378 RunPendingTasks(); | 380 RunPendingTasks(); |
| 379 ASSERT_EQ(1, ReceivedRpcMessageCount()); | 381 ASSERT_EQ(1, ReceivedRpcMessageCount()); |
| 380 // Checks if it sends out RPC message with correct value. | 382 // Checks if it sends out RPC message with correct value. |
| 381 const remoting::pb::RpcMessage* rpc = | 383 const remoting::pb::RpcMessage* rpc = |
| 382 PeekRpcMessage(remoting::pb::RpcMessage::RPC_R_SETPLAYBACKRATE); | 384 PeekRpcMessage(remoting::pb::RpcMessage::RPC_R_SETPLAYBACKRATE); |
| 383 ASSERT_TRUE(rpc); | 385 ASSERT_TRUE(rpc); |
| 384 ASSERT_TRUE(rpc->double_value() == 2.5); | 386 ASSERT_TRUE(rpc->double_value() == 2.5); |
| 385 } | 387 } |
| 386 | 388 |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 // Issues RPC_RC_ONDURATIONCHANGE RPC message. | 536 // Issues RPC_RC_ONDURATIONCHANGE RPC message. |
| 535 EXPECT_CALL(*render_client_, OnDurationChange(_)).Times(0); | 537 EXPECT_CALL(*render_client_, OnDurationChange(_)).Times(0); |
| 536 std::unique_ptr<remoting::pb::RpcMessage> rpc(new remoting::pb::RpcMessage()); | 538 std::unique_ptr<remoting::pb::RpcMessage> rpc(new remoting::pb::RpcMessage()); |
| 537 rpc->set_handle(5); | 539 rpc->set_handle(5); |
| 538 rpc->set_proc(remoting::pb::RpcMessage::RPC_RC_ONDURATIONCHANGE); | 540 rpc->set_proc(remoting::pb::RpcMessage::RPC_RC_ONDURATIONCHANGE); |
| 539 rpc->set_integer64_value(-345); | 541 rpc->set_integer64_value(-345); |
| 540 OnReceivedRpc(std::move(rpc)); | 542 OnReceivedRpc(std::move(rpc)); |
| 541 RunPendingTasks(); | 543 RunPendingTasks(); |
| 542 } | 544 } |
| 543 } // namespace media | 545 } // namespace media |
| OLD | NEW |