Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1069)

Side by Side Diff: media/remoting/remote_renderer_impl_unittest.cc

Issue 2457563002: Media Remoting: Add remoting control logic for encrypted contents. (Closed)
Patch Set: Bug fix. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698