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

Side by Side Diff: content/browser/presentation/presentation_service_impl_unittest.cc

Issue 1131053005: [Presentation API] Convert screen availability API into Client style. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/message_loop/message_loop.h" 6 #include "base/message_loop/message_loop.h"
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/test/test_timeouts.h" 8 #include "base/test/test_timeouts.h"
9 #include "content/browser/presentation/presentation_service_impl.h" 9 #include "content/browser/presentation/presentation_service_impl.h"
10 #include "content/public/browser/presentation_service_delegate.h" 10 #include "content/public/browser/presentation_service_delegate.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 const std::string& presentation_id, 88 const std::string& presentation_id,
89 const PresentationSessionSuccessCallback& success_cb, 89 const PresentationSessionSuccessCallback& success_cb,
90 const PresentationSessionErrorCallback& error_cb)); 90 const PresentationSessionErrorCallback& error_cb));
91 MOCK_METHOD3(ListenForSessionMessages, 91 MOCK_METHOD3(ListenForSessionMessages,
92 void( 92 void(
93 int render_process_id, 93 int render_process_id,
94 int render_frame_id, 94 int render_frame_id,
95 const PresentationSessionMessageCallback& message_cb)); 95 const PresentationSessionMessageCallback& message_cb));
96 }; 96 };
97 97
98 class MockPresentationServiceClient :
99 public presentation::PresentationServiceClient {
100 public:
101 MOCK_METHOD1(OnScreenAvailabilityUpdated, void(bool available));
102 };
103
98 class PresentationServiceImplTest : public RenderViewHostImplTestHarness { 104 class PresentationServiceImplTest : public RenderViewHostImplTestHarness {
99 public: 105 public:
100 PresentationServiceImplTest() 106 PresentationServiceImplTest()
101 : callback_count_(0), default_session_started_count_(0) {} 107 : default_session_started_count_(0) {}
102 108
103 void SetUp() override { 109 void SetUp() override {
104 RenderViewHostImplTestHarness::SetUp(); 110 RenderViewHostImplTestHarness::SetUp();
105 111
106 auto request = mojo::GetProxy(&service_ptr_); 112 auto request = mojo::GetProxy(&service_ptr_);
107
108 EXPECT_CALL(mock_delegate_, AddObserver(_, _, _)).Times(1); 113 EXPECT_CALL(mock_delegate_, AddObserver(_, _, _)).Times(1);
109 service_impl_.reset(new PresentationServiceImpl( 114 service_impl_.reset(new PresentationServiceImpl(
110 contents()->GetMainFrame(), contents(), &mock_delegate_)); 115 contents()->GetMainFrame(), contents(), &mock_delegate_));
111 service_impl_->Bind(request.Pass()); 116 service_impl_->Bind(request.Pass());
117
118 presentation::PresentationServiceClientPtr client_ptr;
119 client_binding_.reset(
120 new mojo::Binding<presentation::PresentationServiceClient>(
121 &mock_client_, mojo::GetProxy(&client_ptr)));
122 service_impl_->SetClient(client_ptr.Pass());
112 } 123 }
113 124
114 void TearDown() override { 125 void TearDown() override {
115 service_ptr_.reset(); 126 service_ptr_.reset();
116 if (service_impl_.get()) { 127 if (service_impl_.get()) {
117 EXPECT_CALL(mock_delegate_, RemoveObserver(_, _)).Times(1); 128 EXPECT_CALL(mock_delegate_, RemoveObserver(_, _)).Times(1);
118 service_impl_.reset(); 129 service_impl_.reset();
119 } 130 }
120 RenderViewHostImplTestHarness::TearDown(); 131 RenderViewHostImplTestHarness::TearDown();
121 } 132 }
122 133
123 void ListenForScreenAvailabilityAndWait( 134 void ListenForScreenAvailabilityAndWait(bool delegate_success) {
124 const std::string& presentation_url,
125 const base::Callback<void(const std::string&, bool)>& callback,
126 bool delegate_success) {
127 base::RunLoop run_loop; 135 base::RunLoop run_loop;
128 // This will call to |service_impl_| via mojo. Process the message 136 // This will call to |service_impl_| via mojo. Process the message
129 // using RunLoop. 137 // using RunLoop.
130 // The callback shouldn't be invoked since there is no availability 138 // The callback shouldn't be invoked since there is no availability
131 // result yet. 139 // result yet.
132 EXPECT_CALL(mock_delegate_, AddScreenAvailabilityListener(_, _, _)) 140 EXPECT_CALL(mock_delegate_, AddScreenAvailabilityListener(_, _, _))
133 .WillOnce(DoAll( 141 .WillOnce(DoAll(
134 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), 142 InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit),
135 Return(delegate_success))); 143 Return(delegate_success)));
136 service_ptr_->ListenForScreenAvailability(presentation_url, callback); 144 service_ptr_->ListenForScreenAvailability();
137 run_loop.Run(); 145 run_loop.Run();
138 146
139 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_delegate_)); 147 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_delegate_));
140 } 148 }
141 149
142 void ExpectListenerDoesNotExist(const std::string& presentation_url) {
143 const auto& contexts = service_impl_->availability_contexts_;
144 auto it = contexts.find(presentation_url);
145 EXPECT_TRUE(it == contexts.end());
146 }
147
148 void RunLoopFor(base::TimeDelta duration) { 150 void RunLoopFor(base::TimeDelta duration) {
149 base::RunLoop run_loop; 151 base::RunLoop run_loop;
150 base::MessageLoop::current()->PostDelayedTask( 152 base::MessageLoop::current()->PostDelayedTask(
151 FROM_HERE, run_loop.QuitClosure(), duration); 153 FROM_HERE, run_loop.QuitClosure(), duration);
152 run_loop.Run(); 154 run_loop.Run();
153 } 155 }
154 156
155 void SaveQuitClosureAndRunLoop() { 157 void SaveQuitClosureAndRunLoop() {
156 base::RunLoop run_loop; 158 base::RunLoop run_loop;
157 run_loop_quit_closure_ = run_loop.QuitClosure(); 159 run_loop_quit_closure_ = run_loop.QuitClosure();
158 run_loop.Run(); 160 run_loop.Run();
159 run_loop_quit_closure_.Reset(); 161 run_loop_quit_closure_.Reset();
160 } 162 }
161 163
162 void ShouldNotBeCalled(const std::string& presentation_url, bool available) { 164 void SimulateScreenAvailabilityChangeAndWait(bool available) {
163 FAIL() << "Callback unexpectedly invoked with " 165 auto* listener = service_impl_->screen_availability_listener_.get();
164 << "url = " << presentation_url << ", available = " << available; 166 ASSERT_TRUE(listener);
165 }
166 167
167 void SimulateScreenAvailabilityChange( 168 base::RunLoop run_loop;
168 const std::string& presentation_url, bool available) { 169 EXPECT_CALL(mock_client_, OnScreenAvailabilityUpdated(available))
169 const auto& contexts = service_impl_->availability_contexts_; 170 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
170 auto it = contexts.find(presentation_url); 171 listener->OnScreenAvailabilityChanged(available);
171 ASSERT_TRUE(it != contexts.end()); 172 run_loop.Run();
172 it->second->OnScreenAvailabilityChanged(available);
173 }
174
175 void ScreenAvailabilityChangedCallback(
176 bool expected,
177 const std::string& presentation_url,
178 bool available) {
179 ++callback_count_;
180 EXPECT_EQ(expected, available);
181 if (!run_loop_quit_closure_.is_null())
182 run_loop_quit_closure_.Run();
183 } 173 }
184 174
185 void ExpectReset() { 175 void ExpectReset() {
186 EXPECT_CALL(mock_delegate_, Reset(_, _)).Times(1); 176 EXPECT_CALL(mock_delegate_, Reset(_, _)).Times(1);
187 } 177 }
188 178
189 void ExpectCleanState() { 179 void ExpectCleanState() {
190 EXPECT_TRUE(service_impl_->availability_contexts_.empty());
191 EXPECT_TRUE(service_impl_->default_presentation_url_.empty()); 180 EXPECT_TRUE(service_impl_->default_presentation_url_.empty());
192 EXPECT_TRUE(service_impl_->default_presentation_id_.empty()); 181 EXPECT_TRUE(service_impl_->default_presentation_id_.empty());
193 EXPECT_TRUE(service_impl_->queued_start_session_requests_.empty()); 182 EXPECT_TRUE(service_impl_->queued_start_session_requests_.empty());
183 EXPECT_FALSE(service_impl_->screen_availability_listener_.get());
194 EXPECT_FALSE(service_impl_->default_session_start_context_.get()); 184 EXPECT_FALSE(service_impl_->default_session_start_context_.get());
195 EXPECT_FALSE(service_impl_->on_session_messages_callback_.get()); 185 EXPECT_FALSE(service_impl_->on_session_messages_callback_.get());
196 } 186 }
197 187
198 void ExpectNewSessionMojoCallbackSuccess( 188 void ExpectNewSessionMojoCallbackSuccess(
199 presentation::PresentationSessionInfoPtr info, 189 presentation::PresentationSessionInfoPtr info,
200 presentation::PresentationErrorPtr error) { 190 presentation::PresentationErrorPtr error) {
201 EXPECT_FALSE(info.is_null()); 191 EXPECT_FALSE(info.is_null());
202 EXPECT_TRUE(error.is_null()); 192 EXPECT_TRUE(error.is_null());
203 if (!run_loop_quit_closure_.is_null()) 193 if (!run_loop_quit_closure_.is_null())
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 messages->push_back( 273 messages->push_back(
284 content::PresentationSessionMessage::CreateBinaryMessage( 274 content::PresentationSessionMessage::CreateBinaryMessage(
285 presentation_url, presentation_id, 275 presentation_url, presentation_id,
286 scoped_ptr<std::vector<uint8_t>>( 276 scoped_ptr<std::vector<uint8_t>>(
287 new std::vector<uint8_t>(binary_data)))); 277 new std::vector<uint8_t>(binary_data))));
288 message_cb.Run(messages.Pass()); 278 message_cb.Run(messages.Pass());
289 SaveQuitClosureAndRunLoop(); 279 SaveQuitClosureAndRunLoop();
290 } 280 }
291 281
292 MockPresentationServiceDelegate mock_delegate_; 282 MockPresentationServiceDelegate mock_delegate_;
283
293 scoped_ptr<PresentationServiceImpl> service_impl_; 284 scoped_ptr<PresentationServiceImpl> service_impl_;
294 mojo::InterfacePtr<presentation::PresentationService> service_ptr_; 285 mojo::InterfacePtr<presentation::PresentationService> service_ptr_;
286
287 MockPresentationServiceClient mock_client_;
288 scoped_ptr<mojo::Binding<presentation::PresentationServiceClient>>
289 client_binding_;
290
295 base::Closure run_loop_quit_closure_; 291 base::Closure run_loop_quit_closure_;
296 int callback_count_;
297 int default_session_started_count_; 292 int default_session_started_count_;
298 mojo::Array<presentation::SessionMessagePtr> expected_msgs_; 293 mojo::Array<presentation::SessionMessagePtr> expected_msgs_;
299 }; 294 };
300 295
301 TEST_F(PresentationServiceImplTest, ListenForScreenAvailability) { 296 TEST_F(PresentationServiceImplTest, ListenForScreenAvailability) {
302 std::string presentation_url("http://fooUrl"); 297 ListenForScreenAvailabilityAndWait(true);
303 ListenForScreenAvailabilityAndWait(
304 presentation_url,
305 base::Bind(
306 &PresentationServiceImplTest::ScreenAvailabilityChangedCallback,
307 base::Unretained(this), true),
308 true);
309 298
310 // Different presentation URL. 299 SimulateScreenAvailabilityChangeAndWait(true);
311 ListenForScreenAvailabilityAndWait( 300 SimulateScreenAvailabilityChangeAndWait(false);
312 "http://barUrl", 301 SimulateScreenAvailabilityChangeAndWait(true);
313 base::Bind(&PresentationServiceImplTest::ShouldNotBeCalled,
314 base::Unretained(this)),
315 true);
316
317 // Result now available; callback will be invoked with availability result.
318 SimulateScreenAvailabilityChange(presentation_url, true);
319 SaveQuitClosureAndRunLoop();
320
321 EXPECT_EQ(1, callback_count_);
322
323 // Result updated but callback not invoked since it's been erased.
324 SimulateScreenAvailabilityChange(presentation_url, false);
325
326 // Register another callback which should immediately invoke callback
327 // since updated result is available.
328 service_ptr_->ListenForScreenAvailability(
329 presentation_url,
330 base::Bind(
331 &PresentationServiceImplTest::ScreenAvailabilityChangedCallback,
332 base::Unretained(this),
333 false));
334 SaveQuitClosureAndRunLoop();
335 EXPECT_EQ(2, callback_count_);
336 } 302 }
337 303
338 TEST_F(PresentationServiceImplTest, Reset) { 304 TEST_F(PresentationServiceImplTest, Reset) {
339 std::string presentation_url("http://fooUrl"); 305 ListenForScreenAvailabilityAndWait(true);
340 ListenForScreenAvailabilityAndWait(
341 presentation_url,
342 base::Bind(&PresentationServiceImplTest::ShouldNotBeCalled,
343 base::Unretained(this)),
344 true);
345 306
346 ExpectReset(); 307 ExpectReset();
347 service_impl_->Reset(); 308 service_impl_->Reset();
348 ExpectCleanState(); 309 ExpectCleanState();
349
350 EXPECT_EQ(0, callback_count_);
351 } 310 }
352 311
353 TEST_F(PresentationServiceImplTest, DidNavigateThisFrame) { 312 TEST_F(PresentationServiceImplTest, DidNavigateThisFrame) {
354 std::string presentation_url("http://fooUrl"); 313 ListenForScreenAvailabilityAndWait(true);
355 ListenForScreenAvailabilityAndWait(
356 presentation_url,
357 base::Bind(&PresentationServiceImplTest::ShouldNotBeCalled,
358 base::Unretained(this)),
359 true);
360 314
361 ExpectReset(); 315 ExpectReset();
362 service_impl_->DidNavigateAnyFrame( 316 service_impl_->DidNavigateAnyFrame(
363 contents()->GetMainFrame(), 317 contents()->GetMainFrame(),
364 content::LoadCommittedDetails(), 318 content::LoadCommittedDetails(),
365 content::FrameNavigateParams()); 319 content::FrameNavigateParams());
366 ExpectCleanState(); 320 ExpectCleanState();
367 } 321 }
368 322
369 TEST_F(PresentationServiceImplTest, DidNavigateNotThisFrame) { 323 TEST_F(PresentationServiceImplTest, DidNavigateNotThisFrame) {
370 std::string presentation_url("http://fooUrl"); 324 ListenForScreenAvailabilityAndWait(true);
371 ListenForScreenAvailabilityAndWait(
372 presentation_url,
373 base::Bind(
374 &PresentationServiceImplTest::ScreenAvailabilityChangedCallback,
375 base::Unretained(this),
376 true),
377 true);
378 325
379 // TODO(imcheng): How to get a different RenderFrameHost? 326 // TODO(imcheng): How to get a different RenderFrameHost?
380 service_impl_->DidNavigateAnyFrame( 327 service_impl_->DidNavigateAnyFrame(
381 nullptr, 328 nullptr,
382 content::LoadCommittedDetails(), 329 content::LoadCommittedDetails(),
383 content::FrameNavigateParams()); 330 content::FrameNavigateParams());
384 331
385 // Availability is reported and callback is invoked since it was not 332 // Availability is reported and callback is invoked since it was not
386 // removed. 333 // removed.
387 SimulateScreenAvailabilityChange(presentation_url, true); 334 SimulateScreenAvailabilityChangeAndWait(true);
388 SaveQuitClosureAndRunLoop();
389 EXPECT_EQ(1, callback_count_);
390 } 335 }
391 336
392 TEST_F(PresentationServiceImplTest, ThisRenderFrameDeleted) { 337 TEST_F(PresentationServiceImplTest, ThisRenderFrameDeleted) {
393 std::string presentation_url("http://fooUrl"); 338 ListenForScreenAvailabilityAndWait(true);
394 ListenForScreenAvailabilityAndWait(
395 presentation_url,
396 base::Bind(&PresentationServiceImplTest::ShouldNotBeCalled,
397 base::Unretained(this)),
398 true);
399 339
400 ExpectReset(); 340 ExpectReset();
401 341
402 // Since the frame matched the service, |service_impl_| will be deleted. 342 // Since the frame matched the service, |service_impl_| will be deleted.
403 PresentationServiceImpl* service = service_impl_.release(); 343 PresentationServiceImpl* service = service_impl_.release();
404 EXPECT_CALL(mock_delegate_, RemoveObserver(_, _)).Times(1); 344 EXPECT_CALL(mock_delegate_, RemoveObserver(_, _)).Times(1);
405 service->RenderFrameDeleted(contents()->GetMainFrame()); 345 service->RenderFrameDeleted(contents()->GetMainFrame());
406 } 346 }
407 347
408 TEST_F(PresentationServiceImplTest, NotThisRenderFrameDeleted) { 348 TEST_F(PresentationServiceImplTest, NotThisRenderFrameDeleted) {
409 std::string presentation_url("http://fooUrl"); 349 ListenForScreenAvailabilityAndWait(true);
410 ListenForScreenAvailabilityAndWait(
411 presentation_url,
412 base::Bind(
413 &PresentationServiceImplTest::ScreenAvailabilityChangedCallback,
414 base::Unretained(this),
415 true),
416 true);
417 350
418 // TODO(imcheng): How to get a different RenderFrameHost? 351 // TODO(imcheng): How to get a different RenderFrameHost?
419 service_impl_->RenderFrameDeleted(nullptr); 352 service_impl_->RenderFrameDeleted(nullptr);
420 353
421 // Availability is reported and callback should be invoked since listener 354 // Availability is reported and callback should be invoked since listener
422 // has not been deleted. 355 // has not been deleted.
423 SimulateScreenAvailabilityChange(presentation_url, true); 356 SimulateScreenAvailabilityChangeAndWait(true);
424 SaveQuitClosureAndRunLoop();
425 EXPECT_EQ(1, callback_count_);
426 }
427
428 TEST_F(PresentationServiceImplTest, ListenForScreenAvailabilityTwice) {
429 std::string presentation_url("http://fooUrl");
430 ListenForScreenAvailabilityAndWait(
431 presentation_url,
432 base::Bind(
433 &PresentationServiceImplTest::ScreenAvailabilityChangedCallback,
434 base::Unretained(this),
435 false),
436 true);
437
438 // Second call should overwrite the callback from first call.
439 // It shouldn't result in an extra call to delegate.
440 service_ptr_->ListenForScreenAvailability(
441 presentation_url,
442 base::Bind(
443 &PresentationServiceImplTest::ScreenAvailabilityChangedCallback,
444 base::Unretained(this),
445 false));
446
447 // Cannot use ListenForScreenAvailabilityAndWait here since the mock delegate
448 // won't be triggered again to quit the RunLoop.
449 RunLoopFor(base::TimeDelta::FromMilliseconds(50));
450
451 // Result now available; callback will be invoked with availability result.
452 SimulateScreenAvailabilityChange(presentation_url, false);
453 SaveQuitClosureAndRunLoop();
454
455 EXPECT_EQ(2, callback_count_);
456 } 357 }
457 358
458 TEST_F(PresentationServiceImplTest, DelegateFails) { 359 TEST_F(PresentationServiceImplTest, DelegateFails) {
459 std::string presentation_url("http://fooUrl"); 360 ListenForScreenAvailabilityAndWait(false);
460 ListenForScreenAvailabilityAndWait( 361 ASSERT_FALSE(service_impl_->screen_availability_listener_.get());
461 presentation_url,
462 base::Bind(&PresentationServiceImplTest::ShouldNotBeCalled,
463 base::Unretained(this)),
464 false);
465
466 ExpectListenerDoesNotExist(presentation_url);
467 } 362 }
468 363
469 TEST_F(PresentationServiceImplTest, SetDefaultPresentationUrl) { 364 TEST_F(PresentationServiceImplTest, SetDefaultPresentationUrl) {
470 std::string url1("http://fooUrl"); 365 std::string url1("http://fooUrl");
471 std::string dpu_id("dpuId"); 366 std::string dpu_id("dpuId");
472 EXPECT_CALL(mock_delegate_, 367 EXPECT_CALL(mock_delegate_,
473 SetDefaultPresentationUrl(_, _, Eq(url1), Eq(dpu_id))) 368 SetDefaultPresentationUrl(_, _, Eq(url1), Eq(dpu_id)))
474 .Times(1); 369 .Times(1);
475 service_impl_->SetDefaultPresentationURL(url1, dpu_id); 370 service_impl_->SetDefaultPresentationURL(url1, dpu_id);
476 EXPECT_EQ(url1, service_impl_->default_presentation_url_); 371 EXPECT_EQ(url1, service_impl_->default_presentation_url_);
477 372
478 // Now there should be a callback registered with the DPU. 373 // Now there should be a listener for DPU = |url1|.
479 ListenForScreenAvailabilityAndWait( 374 ListenForScreenAvailabilityAndWait(true);
480 url1, 375 auto* listener = service_impl_->screen_availability_listener_.get();
481 base::Bind( 376 ASSERT_TRUE(listener);
482 &PresentationServiceImplTest::ScreenAvailabilityChangedCallback, 377 EXPECT_EQ(url1, listener->GetPresentationUrl());
483 base::Unretained(this), true),
484 true);
485 const auto& contexts = service_impl_->availability_contexts_;
486 auto it = contexts.find(url1);
487 ASSERT_TRUE(it != contexts.end());
488 EXPECT_TRUE(it->second->HasPendingCallbacks());
489 378
490 std::string url2("http://barUrl"); 379 std::string url2("http://barUrl");
491 // Sets different DPU. 380 // Sets different DPU.
492 // Adds listener for url2 and removes listener for url1. 381 // Adds listener for url2 and removes listener for url1.
493 // Also, the callback from url1 is transferred to url2.
494 EXPECT_CALL( 382 EXPECT_CALL(
495 mock_delegate_, 383 mock_delegate_,
496 AddScreenAvailabilityListener(_, _, _)) 384 AddScreenAvailabilityListener(_, _, _))
497 .WillOnce(Return(true)); 385 .WillOnce(Return(true));
498 EXPECT_CALL( 386 EXPECT_CALL(
499 mock_delegate_, 387 mock_delegate_,
500 RemoveScreenAvailabilityListener(_, _, _)) 388 RemoveScreenAvailabilityListener(_, _, _))
501 .Times(1); 389 .Times(1);
502 EXPECT_CALL(mock_delegate_, 390 EXPECT_CALL(mock_delegate_,
503 SetDefaultPresentationUrl(_, _, Eq(url2), Eq(dpu_id))) 391 SetDefaultPresentationUrl(_, _, Eq(url2), Eq(dpu_id)))
504 .Times(1); 392 .Times(1);
505 service_impl_->SetDefaultPresentationURL(url2, dpu_id); 393 service_impl_->SetDefaultPresentationURL(url2, dpu_id);
506 EXPECT_EQ(url2, service_impl_->default_presentation_url_); 394 EXPECT_EQ(url2, service_impl_->default_presentation_url_);
507 395
508 it = contexts.find(url2); 396 listener = service_impl_->screen_availability_listener_.get();
509 ASSERT_TRUE(it != contexts.end()); 397 ASSERT_TRUE(listener);
510 EXPECT_TRUE(it->second->HasPendingCallbacks()); 398 EXPECT_EQ(url2, listener->GetPresentationUrl());
511 } 399 }
512 400
513 TEST_F(PresentationServiceImplTest, SetSameDefaultPresentationUrl) { 401 TEST_F(PresentationServiceImplTest, SetSameDefaultPresentationUrl) {
514 std::string url("http://fooUrl"); 402 std::string url("http://fooUrl");
515 std::string dpu_id("dpuId"); 403 std::string dpu_id("dpuId");
516 EXPECT_CALL(mock_delegate_, 404 EXPECT_CALL(mock_delegate_,
517 SetDefaultPresentationUrl(_, _, Eq(url), Eq(dpu_id))) 405 SetDefaultPresentationUrl(_, _, Eq(url), Eq(dpu_id)))
518 .Times(1); 406 .Times(1);
519 service_impl_->SetDefaultPresentationURL(url, dpu_id); 407 service_impl_->SetDefaultPresentationURL(url, dpu_id);
520 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_delegate_)); 408 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_delegate_));
521 EXPECT_EQ(url, service_impl_->default_presentation_url_); 409 EXPECT_EQ(url, service_impl_->default_presentation_url_);
522 410
523 // Same URL as before; no-ops. 411 // Same URL as before; no-ops.
524 service_impl_->SetDefaultPresentationURL(url, dpu_id); 412 service_impl_->SetDefaultPresentationURL(url, dpu_id);
525 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_delegate_)); 413 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_delegate_));
526 EXPECT_EQ(url, service_impl_->default_presentation_url_); 414 EXPECT_EQ(url, service_impl_->default_presentation_url_);
527 } 415 }
528 416
529 TEST_F(PresentationServiceImplTest, ClearDefaultPresentationUrl) {
530 std::string url("http://fooUrl");
531 std::string dpu_id("dpuId");
532 EXPECT_CALL(mock_delegate_,
533 SetDefaultPresentationUrl(_, _, Eq(url), Eq(dpu_id)))
534 .Times(1);
535 service_impl_->SetDefaultPresentationURL(url, dpu_id);
536 EXPECT_EQ(url, service_impl_->default_presentation_url_);
537
538 // Now there should be a callback registered with the DPU.
539 ListenForScreenAvailabilityAndWait(
540 url,
541 base::Bind(
542 &PresentationServiceImplTest::ScreenAvailabilityChangedCallback,
543 base::Unretained(this), true),
544 true);
545
546 const auto& contexts = service_impl_->availability_contexts_;
547 auto it = contexts.find(url);
548 ASSERT_TRUE(it != contexts.end());
549 EXPECT_TRUE(it->second->HasPendingCallbacks());
550
551 // Clears the default presentation URL. Transfers the listener from url to
552 // "1-UA" mode.
553 EXPECT_CALL(
554 mock_delegate_,
555 AddScreenAvailabilityListener(_, _, _))
556 .WillOnce(Return(true));
557 EXPECT_CALL(
558 mock_delegate_,
559 RemoveScreenAvailabilityListener(_, _, _))
560 .Times(1);
561 EXPECT_CALL(
562 mock_delegate_,
563 SetDefaultPresentationUrl(_, _, Eq(std::string()), Eq(std::string())))
564 .Times(1);
565 service_impl_->SetDefaultPresentationURL(std::string(), std::string());
566 EXPECT_TRUE(service_impl_->default_presentation_url_.empty());
567
568 it = contexts.find(url);
569 ASSERT_TRUE(it == contexts.end());
570 }
571
572 TEST_F(PresentationServiceImplTest, StartSessionSuccess) { 417 TEST_F(PresentationServiceImplTest, StartSessionSuccess) {
573 std::string presentation_url("http://fooUrl"); 418 std::string presentation_url("http://fooUrl");
574 std::string presentation_id("presentationId"); 419 std::string presentation_id("presentationId");
575 service_ptr_->StartSession( 420 service_ptr_->StartSession(
576 presentation_url, 421 presentation_url,
577 presentation_id, 422 presentation_id,
578 base::Bind( 423 base::Bind(
579 &PresentationServiceImplTest::ExpectNewSessionMojoCallbackSuccess, 424 &PresentationServiceImplTest::ExpectNewSessionMojoCallbackSuccess,
580 base::Unretained(this))); 425 base::Unretained(this)));
581 base::RunLoop run_loop; 426 base::RunLoop run_loop;
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 RunLoopFor(TestTimeouts::tiny_timeout()); 622 RunLoopFor(TestTimeouts::tiny_timeout());
778 623
779 ExpectReset(); 624 ExpectReset();
780 service_impl_->Reset(); 625 service_impl_->Reset();
781 ExpectCleanState(); 626 ExpectCleanState();
782 SaveQuitClosureAndRunLoop(); 627 SaveQuitClosureAndRunLoop();
783 EXPECT_EQ(1, default_session_started_count_); 628 EXPECT_EQ(1, default_session_started_count_);
784 } 629 }
785 630
786 } // namespace content 631 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698