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