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 |