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 |