| OLD | NEW |
| 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 "content/browser/presentation/presentation_service_impl.h" | 5 #include "content/browser/presentation/presentation_service_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <memory> | 10 #include <memory> |
| 11 #include <string> | 11 #include <string> |
| 12 #include <utility> | 12 #include <utility> |
| 13 #include <vector> | 13 #include <vector> |
| 14 | 14 |
| 15 #include "base/location.h" | 15 #include "base/location.h" |
| 16 #include "base/run_loop.h" | 16 #include "base/run_loop.h" |
| 17 #include "base/single_thread_task_runner.h" | 17 #include "base/single_thread_task_runner.h" |
| 18 #include "base/test/test_timeouts.h" | 18 #include "base/test/test_timeouts.h" |
| 19 #include "base/threading/thread_task_runner_handle.h" | 19 #include "base/threading/thread_task_runner_handle.h" |
| 20 #include "content/public/browser/presentation_service_delegate.h" | 20 #include "content/public/browser/presentation_service_delegate.h" |
| 21 #include "content/public/common/presentation_constants.h" | 21 #include "content/public/common/presentation_constants.h" |
| 22 #include "content/public/common/presentation_session.h" | 22 #include "content/public/common/presentation_session.h" |
| 23 #include "content/test/test_render_frame_host.h" | 23 #include "content/test/test_render_frame_host.h" |
| 24 #include "content/test/test_render_view_host.h" | 24 #include "content/test/test_render_view_host.h" |
| 25 #include "content/test/test_web_contents.h" | 25 #include "content/test/test_web_contents.h" |
| 26 #include "mojo/public/cpp/bindings/interface_ptr.h" | 26 #include "mojo/public/cpp/bindings/interface_ptr.h" |
| 27 #include "testing/gmock/include/gmock/gmock.h" | 27 #include "testing/gmock/include/gmock/gmock.h" |
| 28 | 28 |
| 29 using ::testing::_; | 29 using ::testing::_; |
| 30 using ::testing::ByRef; | |
| 31 using ::testing::Eq; | 30 using ::testing::Eq; |
| 32 using ::testing::InvokeWithoutArgs; | 31 using ::testing::InvokeWithoutArgs; |
| 33 using ::testing::Mock; | 32 using ::testing::Mock; |
| 34 using ::testing::Return; | 33 using ::testing::Return; |
| 35 using ::testing::SaveArg; | 34 using ::testing::SaveArg; |
| 36 | 35 |
| 37 namespace content { | 36 namespace content { |
| 38 | 37 |
| 39 namespace { | 38 namespace { |
| 40 | 39 |
| 41 // Matches Mojo structs. | 40 // Matches Mojo structs. |
| 42 MATCHER_P(Equals, expected, "") { | 41 MATCHER_P(Equals, expected, "") { |
| 43 return expected.Equals(arg); | 42 return expected.Equals(arg); |
| 44 } | 43 } |
| 45 | 44 |
| 46 // Matches blink::mojom::PresentationSessionInfo passed by reference. | 45 // Matches content::PresentationSessionInfo. |
| 47 MATCHER_P(SessionInfoEquals, expected, "") { | 46 MATCHER_P(SessionInfoEquals, expected, "") { |
| 48 blink::mojom::PresentationSessionInfo& expected_value = expected; | 47 return expected.presentation_url == arg.presentation_url && |
| 49 return expected_value.Equals(arg); | 48 expected.presentation_id == arg.presentation_id; |
| 50 } | |
| 51 | |
| 52 // Matches content::PresentationSessionInfo passed by reference. | |
| 53 MATCHER_P(ContentSessionInfoEquals, expected, "") { | |
| 54 const content::PresentationSessionInfo& expected_value = expected; | |
| 55 return expected_value.presentation_url == arg.presentation_url && | |
| 56 expected_value.presentation_id == arg.presentation_id; | |
| 57 } | 49 } |
| 58 | 50 |
| 59 const char kPresentationId[] = "presentationId"; | 51 const char kPresentationId[] = "presentationId"; |
| 60 const char kPresentationUrl1[] = "http://foo.com/index.html"; | 52 const char kPresentationUrl1[] = "http://foo.com/index.html"; |
| 61 const char kPresentationUrl2[] = "http://example.com/index.html"; | 53 const char kPresentationUrl2[] = "http://example.com/index.html"; |
| 62 const char kPresentationUrl3[] = "http://example.net/index.html"; | 54 const char kPresentationUrl3[] = "http://example.net/index.html"; |
| 63 | 55 |
| 64 void DoNothing(blink::mojom::PresentationSessionInfoPtr info, | 56 void DoNothing(const base::Optional<content::PresentationSessionInfo>& info, |
| 65 blink::mojom::PresentationErrorPtr error) {} | 57 const base::Optional<content::PresentationError>& error) {} |
| 66 | 58 |
| 67 } // namespace | 59 } // namespace |
| 68 | 60 |
| 69 class MockPresentationServiceDelegate | 61 class MockPresentationServiceDelegate |
| 70 : public ControllerPresentationServiceDelegate { | 62 : public ControllerPresentationServiceDelegate { |
| 71 public: | 63 public: |
| 72 MOCK_METHOD3(AddObserver, | 64 MOCK_METHOD3(AddObserver, |
| 73 void(int render_process_id, | 65 void(int render_process_id, |
| 74 int render_frame_id, | 66 int render_frame_id, |
| 75 PresentationServiceDelegate::Observer* observer)); | 67 PresentationServiceDelegate::Observer* observer)); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 }; | 178 }; |
| 187 | 179 |
| 188 class MockPresentationConnection : public blink::mojom::PresentationConnection { | 180 class MockPresentationConnection : public blink::mojom::PresentationConnection { |
| 189 public: | 181 public: |
| 190 void OnMessage(blink::mojom::ConnectionMessagePtr message, | 182 void OnMessage(blink::mojom::ConnectionMessagePtr message, |
| 191 const base::Callback<void(bool)>& send_message_cb) override { | 183 const base::Callback<void(bool)>& send_message_cb) override { |
| 192 OnConnectionMessageReceived(*message); | 184 OnConnectionMessageReceived(*message); |
| 193 } | 185 } |
| 194 MOCK_METHOD1(OnConnectionMessageReceived, | 186 MOCK_METHOD1(OnConnectionMessageReceived, |
| 195 void(const blink::mojom::ConnectionMessage& message)); | 187 void(const blink::mojom::ConnectionMessage& message)); |
| 196 MOCK_METHOD1(DidChangeState, | 188 MOCK_METHOD1(DidChangeState, void(PresentationConnectionState state)); |
| 197 void(blink::mojom::PresentationConnectionState state)); | |
| 198 }; | 189 }; |
| 199 | 190 |
| 200 class MockPresentationServiceClient | 191 class MockPresentationServiceClient |
| 201 : public blink::mojom::PresentationServiceClient { | 192 : public blink::mojom::PresentationServiceClient { |
| 202 public: | 193 public: |
| 203 MOCK_METHOD2(OnScreenAvailabilityUpdated, | 194 MOCK_METHOD2(OnScreenAvailabilityUpdated, |
| 204 void(const GURL& url, bool available)); | 195 void(const GURL& url, bool available)); |
| 205 void OnConnectionStateChanged( | |
| 206 blink::mojom::PresentationSessionInfoPtr connection, | |
| 207 blink::mojom::PresentationConnectionState new_state) override { | |
| 208 OnConnectionStateChanged(*connection, new_state); | |
| 209 } | |
| 210 MOCK_METHOD2(OnConnectionStateChanged, | 196 MOCK_METHOD2(OnConnectionStateChanged, |
| 211 void(const blink::mojom::PresentationSessionInfo& connection, | 197 void(const content::PresentationSessionInfo& connection, |
| 212 blink::mojom::PresentationConnectionState new_state)); | 198 PresentationConnectionState new_state)); |
| 213 | |
| 214 void OnConnectionClosed( | |
| 215 blink::mojom::PresentationSessionInfoPtr connection, | |
| 216 blink::mojom::PresentationConnectionCloseReason reason, | |
| 217 const std::string& message) override { | |
| 218 OnConnectionClosed(*connection, reason, message); | |
| 219 } | |
| 220 MOCK_METHOD3(OnConnectionClosed, | 199 MOCK_METHOD3(OnConnectionClosed, |
| 221 void(const blink::mojom::PresentationSessionInfo& connection, | 200 void(const content::PresentationSessionInfo& connection, |
| 222 blink::mojom::PresentationConnectionCloseReason reason, | 201 PresentationConnectionCloseReason reason, |
| 223 const std::string& message)); | 202 const std::string& message)); |
| 224 | |
| 225 MOCK_METHOD1(OnScreenAvailabilityNotSupported, void(const GURL& url)); | 203 MOCK_METHOD1(OnScreenAvailabilityNotSupported, void(const GURL& url)); |
| 226 | 204 |
| 227 void OnConnectionMessagesReceived( | 205 void OnConnectionMessagesReceived( |
| 228 blink::mojom::PresentationSessionInfoPtr session_info, | 206 const content::PresentationSessionInfo& session_info, |
| 229 std::vector<blink::mojom::ConnectionMessagePtr> messages) override { | 207 std::vector<blink::mojom::ConnectionMessagePtr> messages) override { |
| 230 messages_received_ = std::move(messages); | 208 messages_received_ = std::move(messages); |
| 231 MessagesReceived(); | 209 MessagesReceived(); |
| 232 } | 210 } |
| 233 MOCK_METHOD0(MessagesReceived, void()); | 211 MOCK_METHOD0(MessagesReceived, void()); |
| 234 | 212 |
| 235 void OnDefaultSessionStarted( | |
| 236 blink::mojom::PresentationSessionInfoPtr session_info) override { | |
| 237 OnDefaultSessionStarted(*session_info); | |
| 238 } | |
| 239 MOCK_METHOD1(OnDefaultSessionStarted, | 213 MOCK_METHOD1(OnDefaultSessionStarted, |
| 240 void(const blink::mojom::PresentationSessionInfo& session_info)); | 214 void(const content::PresentationSessionInfo& session_info)); |
| 241 | 215 |
| 242 void OnReceiverConnectionAvailable( | 216 void OnReceiverConnectionAvailable( |
| 243 blink::mojom::PresentationSessionInfoPtr session_info, | 217 const content::PresentationSessionInfo& session_info, |
| 244 blink::mojom::PresentationConnectionPtr controller_conn_ptr, | 218 blink::mojom::PresentationConnectionPtr controller_conn_ptr, |
| 245 blink::mojom::PresentationConnectionRequest receiver_conn_request) | 219 blink::mojom::PresentationConnectionRequest receiver_conn_request) |
| 246 override { | 220 override { |
| 247 OnReceiverConnectionAvailable(*session_info); | 221 OnReceiverConnectionAvailable(session_info); |
| 248 } | 222 } |
| 249 MOCK_METHOD1(OnReceiverConnectionAvailable, | 223 MOCK_METHOD1(OnReceiverConnectionAvailable, |
| 250 void(const blink::mojom::PresentationSessionInfo& session_info)); | 224 void(const content::PresentationSessionInfo& session_info)); |
| 251 | 225 |
| 252 std::vector<blink::mojom::ConnectionMessagePtr> messages_received_; | 226 std::vector<blink::mojom::ConnectionMessagePtr> messages_received_; |
| 253 }; | 227 }; |
| 254 | 228 |
| 255 class PresentationServiceImplTest : public RenderViewHostImplTestHarness { | 229 class PresentationServiceImplTest : public RenderViewHostImplTestHarness { |
| 256 public: | 230 public: |
| 257 PresentationServiceImplTest() | 231 PresentationServiceImplTest() |
| 258 : presentation_url1_(GURL(kPresentationUrl1)), | 232 : presentation_url1_(GURL(kPresentationUrl1)), |
| 259 presentation_url2_(GURL(kPresentationUrl2)), | 233 presentation_url2_(GURL(kPresentationUrl2)), |
| 260 presentation_url3_(GURL(kPresentationUrl3)) {} | 234 presentation_url3_(GURL(kPresentationUrl3)) {} |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 | 312 |
| 339 void ExpectCleanState() { | 313 void ExpectCleanState() { |
| 340 EXPECT_TRUE(service_impl_->default_presentation_urls_.empty()); | 314 EXPECT_TRUE(service_impl_->default_presentation_urls_.empty()); |
| 341 EXPECT_EQ( | 315 EXPECT_EQ( |
| 342 service_impl_->screen_availability_listeners_.find(presentation_url1_), | 316 service_impl_->screen_availability_listeners_.find(presentation_url1_), |
| 343 service_impl_->screen_availability_listeners_.end()); | 317 service_impl_->screen_availability_listeners_.end()); |
| 344 EXPECT_FALSE(service_impl_->on_connection_messages_callback_.get()); | 318 EXPECT_FALSE(service_impl_->on_connection_messages_callback_.get()); |
| 345 } | 319 } |
| 346 | 320 |
| 347 void ExpectNewSessionCallbackSuccess( | 321 void ExpectNewSessionCallbackSuccess( |
| 348 blink::mojom::PresentationSessionInfoPtr info, | 322 const base::Optional<content::PresentationSessionInfo>& info, |
| 349 blink::mojom::PresentationErrorPtr error) { | 323 const base::Optional<content::PresentationError>& error) { |
| 350 EXPECT_FALSE(info.is_null()); | 324 EXPECT_TRUE(info); |
| 351 EXPECT_TRUE(error.is_null()); | 325 EXPECT_FALSE(error); |
| 352 if (!run_loop_quit_closure_.is_null()) | 326 if (!run_loop_quit_closure_.is_null()) |
| 353 run_loop_quit_closure_.Run(); | 327 run_loop_quit_closure_.Run(); |
| 354 } | 328 } |
| 355 | 329 |
| 356 void ExpectNewSessionCallbackError( | 330 void ExpectNewSessionCallbackError( |
| 357 blink::mojom::PresentationSessionInfoPtr info, | 331 const base::Optional<content::PresentationSessionInfo>& info, |
| 358 blink::mojom::PresentationErrorPtr error) { | 332 const base::Optional<content::PresentationError>& error) { |
| 359 EXPECT_TRUE(info.is_null()); | 333 EXPECT_FALSE(info); |
| 360 EXPECT_FALSE(error.is_null()); | 334 EXPECT_TRUE(error); |
| 361 if (!run_loop_quit_closure_.is_null()) | 335 if (!run_loop_quit_closure_.is_null()) |
| 362 run_loop_quit_closure_.Run(); | 336 run_loop_quit_closure_.Run(); |
| 363 } | 337 } |
| 364 | 338 |
| 365 void ExpectConnectionMessages( | 339 void ExpectConnectionMessages( |
| 366 const std::vector<blink::mojom::ConnectionMessagePtr>& expected_msgs, | 340 const std::vector<blink::mojom::ConnectionMessagePtr>& expected_msgs, |
| 367 const std::vector<blink::mojom::ConnectionMessagePtr>& actual_msgs) { | 341 const std::vector<blink::mojom::ConnectionMessagePtr>& actual_msgs) { |
| 368 EXPECT_EQ(expected_msgs.size(), actual_msgs.size()); | 342 EXPECT_EQ(expected_msgs.size(), actual_msgs.size()); |
| 369 for (size_t i = 0; i < actual_msgs.size(); ++i) | 343 for (size_t i = 0; i < actual_msgs.size(); ++i) |
| 370 EXPECT_TRUE(expected_msgs[i].Equals(actual_msgs[i])); | 344 EXPECT_TRUE(expected_msgs[i].Equals(actual_msgs[i])); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 381 const std::vector<uint8_t>& binary_data, | 355 const std::vector<uint8_t>& binary_data, |
| 382 bool pass_ownership) { | 356 bool pass_ownership) { |
| 383 std::vector<blink::mojom::ConnectionMessagePtr> expected_msgs(2); | 357 std::vector<blink::mojom::ConnectionMessagePtr> expected_msgs(2); |
| 384 expected_msgs[0] = blink::mojom::ConnectionMessage::New(); | 358 expected_msgs[0] = blink::mojom::ConnectionMessage::New(); |
| 385 expected_msgs[0]->type = blink::mojom::PresentationMessageType::TEXT; | 359 expected_msgs[0]->type = blink::mojom::PresentationMessageType::TEXT; |
| 386 expected_msgs[0]->message = text_msg; | 360 expected_msgs[0]->message = text_msg; |
| 387 expected_msgs[1] = blink::mojom::ConnectionMessage::New(); | 361 expected_msgs[1] = blink::mojom::ConnectionMessage::New(); |
| 388 expected_msgs[1]->type = blink::mojom::PresentationMessageType::BINARY; | 362 expected_msgs[1]->type = blink::mojom::PresentationMessageType::BINARY; |
| 389 expected_msgs[1]->data = binary_data; | 363 expected_msgs[1]->data = binary_data; |
| 390 | 364 |
| 391 blink::mojom::PresentationSessionInfoPtr session( | 365 content::PresentationSessionInfo session(presentation_url1_, |
| 392 blink::mojom::PresentationSessionInfo::New()); | 366 kPresentationId); |
| 393 session->url = presentation_url1_; | |
| 394 session->id = kPresentationId; | |
| 395 | 367 |
| 396 PresentationConnectionMessageCallback message_cb; | 368 PresentationConnectionMessageCallback message_cb; |
| 397 { | 369 { |
| 398 base::RunLoop run_loop; | 370 base::RunLoop run_loop; |
| 399 EXPECT_CALL(mock_delegate_, ListenForConnectionMessages(_, _, _, _)) | 371 EXPECT_CALL(mock_delegate_, ListenForConnectionMessages(_, _, _, _)) |
| 400 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 372 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 401 SaveArg<3>(&message_cb))); | 373 SaveArg<3>(&message_cb))); |
| 402 service_ptr_->ListenForConnectionMessages(std::move(session)); | 374 service_ptr_->ListenForConnectionMessages(session); |
| 403 run_loop.Run(); | 375 run_loop.Run(); |
| 404 } | 376 } |
| 405 | 377 |
| 406 std::vector<std::unique_ptr<PresentationConnectionMessage>> messages; | 378 std::vector<std::unique_ptr<PresentationConnectionMessage>> messages; |
| 407 std::unique_ptr<content::PresentationConnectionMessage> message; | 379 std::unique_ptr<content::PresentationConnectionMessage> message; |
| 408 message.reset(new content::PresentationConnectionMessage( | 380 message.reset(new content::PresentationConnectionMessage( |
| 409 PresentationMessageType::TEXT)); | 381 PresentationMessageType::TEXT)); |
| 410 message->message = text_msg; | 382 message->message = text_msg; |
| 411 messages.push_back(std::move(message)); | 383 messages.push_back(std::move(message)); |
| 412 message.reset(new content::PresentationConnectionMessage( | 384 message.reset(new content::PresentationConnectionMessage( |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 522 | 494 |
| 523 // Sets different DPUs. | 495 // Sets different DPUs. |
| 524 std::vector<GURL> more_urls = presentation_urls_; | 496 std::vector<GURL> more_urls = presentation_urls_; |
| 525 more_urls.push_back(presentation_url3_); | 497 more_urls.push_back(presentation_url3_); |
| 526 | 498 |
| 527 content::PresentationSessionStartedCallback callback; | 499 content::PresentationSessionStartedCallback callback; |
| 528 EXPECT_CALL(mock_delegate_, SetDefaultPresentationUrls(_, _, more_urls, _)) | 500 EXPECT_CALL(mock_delegate_, SetDefaultPresentationUrls(_, _, more_urls, _)) |
| 529 .WillOnce(SaveArg<3>(&callback)); | 501 .WillOnce(SaveArg<3>(&callback)); |
| 530 service_impl_->SetDefaultPresentationUrls(more_urls); | 502 service_impl_->SetDefaultPresentationUrls(more_urls); |
| 531 | 503 |
| 532 blink::mojom::PresentationSessionInfo session_info; | 504 content::PresentationSessionInfo session_info(presentation_url2_, |
| 533 session_info.url = presentation_url2_; | 505 kPresentationId); |
| 534 session_info.id = kPresentationId; | |
| 535 | 506 |
| 536 base::RunLoop run_loop; | 507 base::RunLoop run_loop; |
| 537 EXPECT_CALL(mock_client_, | 508 EXPECT_CALL(mock_client_, |
| 538 OnDefaultSessionStarted(SessionInfoEquals(ByRef(session_info)))) | 509 OnDefaultSessionStarted(SessionInfoEquals(session_info))) |
| 539 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 510 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 540 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)); | 511 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)); |
| 541 callback.Run( | 512 callback.Run( |
| 542 content::PresentationSessionInfo(presentation_url2_, kPresentationId)); | 513 content::PresentationSessionInfo(presentation_url2_, kPresentationId)); |
| 543 run_loop.Run(); | 514 run_loop.Run(); |
| 544 } | 515 } |
| 545 | 516 |
| 546 TEST_F(PresentationServiceImplTest, | 517 TEST_F(PresentationServiceImplTest, |
| 547 ListenForConnectionStateChange) { | 518 ListenForConnectionStateChange) { |
| 548 content::PresentationSessionInfo connection(presentation_url1_, | 519 content::PresentationSessionInfo connection(presentation_url1_, |
| 549 kPresentationId); | 520 kPresentationId); |
| 550 content::PresentationConnectionStateChangedCallback state_changed_cb; | 521 content::PresentationConnectionStateChangedCallback state_changed_cb; |
| 551 // Trigger state change. It should be propagated back up to |mock_client_|. | 522 // Trigger state change. It should be propagated back up to |mock_client_|. |
| 552 blink::mojom::PresentationSessionInfo presentation_connection; | 523 content::PresentationSessionInfo presentation_connection(presentation_url1_, |
| 553 presentation_connection.url = presentation_url1_; | 524 kPresentationId); |
| 554 presentation_connection.id = kPresentationId; | |
| 555 | 525 |
| 556 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) | 526 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) |
| 557 .WillOnce(SaveArg<3>(&state_changed_cb)); | 527 .WillOnce(SaveArg<3>(&state_changed_cb)); |
| 558 service_impl_->ListenForConnectionStateChange(connection); | 528 service_impl_->ListenForConnectionStateChange(connection); |
| 559 | 529 |
| 560 { | 530 { |
| 561 base::RunLoop run_loop; | 531 base::RunLoop run_loop; |
| 562 EXPECT_CALL(mock_client_, | 532 EXPECT_CALL(mock_client_, |
| 563 OnConnectionStateChanged( | 533 OnConnectionStateChanged( |
| 564 SessionInfoEquals(ByRef(presentation_connection)), | 534 SessionInfoEquals(presentation_connection), |
| 565 blink::mojom::PresentationConnectionState::TERMINATED)) | 535 content::PRESENTATION_CONNECTION_STATE_TERMINATED)) |
| 566 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 536 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 567 state_changed_cb.Run(PresentationConnectionStateChangeInfo( | 537 state_changed_cb.Run(PresentationConnectionStateChangeInfo( |
| 568 PRESENTATION_CONNECTION_STATE_TERMINATED)); | 538 PRESENTATION_CONNECTION_STATE_TERMINATED)); |
| 569 run_loop.Run(); | 539 run_loop.Run(); |
| 570 } | 540 } |
| 571 } | 541 } |
| 572 | 542 |
| 573 TEST_F(PresentationServiceImplTest, ListenForConnectionClose) { | 543 TEST_F(PresentationServiceImplTest, ListenForConnectionClose) { |
| 574 content::PresentationSessionInfo connection(presentation_url1_, | 544 content::PresentationSessionInfo connection(presentation_url1_, |
| 575 kPresentationId); | 545 kPresentationId); |
| 576 content::PresentationConnectionStateChangedCallback state_changed_cb; | 546 content::PresentationConnectionStateChangedCallback state_changed_cb; |
| 577 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) | 547 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) |
| 578 .WillOnce(SaveArg<3>(&state_changed_cb)); | 548 .WillOnce(SaveArg<3>(&state_changed_cb)); |
| 579 service_impl_->ListenForConnectionStateChange(connection); | 549 service_impl_->ListenForConnectionStateChange(connection); |
| 580 | 550 |
| 581 // Trigger connection close. It should be propagated back up to | 551 // Trigger connection close. It should be propagated back up to |
| 582 // |mock_client_|. | 552 // |mock_client_|. |
| 583 blink::mojom::PresentationSessionInfo presentation_connection; | 553 content::PresentationSessionInfo presentation_connection(presentation_url1_, |
| 584 presentation_connection.url = presentation_url1_; | 554 kPresentationId); |
| 585 presentation_connection.id = kPresentationId; | |
| 586 { | 555 { |
| 587 base::RunLoop run_loop; | 556 base::RunLoop run_loop; |
| 588 PresentationConnectionStateChangeInfo closed_info( | 557 PresentationConnectionStateChangeInfo closed_info( |
| 589 PRESENTATION_CONNECTION_STATE_CLOSED); | 558 PRESENTATION_CONNECTION_STATE_CLOSED); |
| 590 closed_info.close_reason = PRESENTATION_CONNECTION_CLOSE_REASON_WENT_AWAY; | 559 closed_info.close_reason = PRESENTATION_CONNECTION_CLOSE_REASON_WENT_AWAY; |
| 591 closed_info.message = "Foo"; | 560 closed_info.message = "Foo"; |
| 592 | 561 |
| 593 EXPECT_CALL( | 562 EXPECT_CALL(mock_client_, |
| 594 mock_client_, | 563 OnConnectionClosed( |
| 595 OnConnectionClosed( | 564 SessionInfoEquals(presentation_connection), |
| 596 SessionInfoEquals(ByRef(presentation_connection)), | 565 PRESENTATION_CONNECTION_CLOSE_REASON_WENT_AWAY, "Foo")) |
| 597 blink::mojom::PresentationConnectionCloseReason::WENT_AWAY, "Foo")) | |
| 598 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 566 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 599 state_changed_cb.Run(closed_info); | 567 state_changed_cb.Run(closed_info); |
| 600 run_loop.Run(); | 568 run_loop.Run(); |
| 601 } | 569 } |
| 602 } | 570 } |
| 603 | 571 |
| 604 TEST_F(PresentationServiceImplTest, SetSameDefaultPresentationUrls) { | 572 TEST_F(PresentationServiceImplTest, SetSameDefaultPresentationUrls) { |
| 605 EXPECT_CALL(mock_delegate_, | 573 EXPECT_CALL(mock_delegate_, |
| 606 SetDefaultPresentationUrls(_, _, presentation_urls_, _)) | 574 SetDefaultPresentationUrls(_, _, presentation_urls_, _)) |
| 607 .Times(1); | 575 .Times(1); |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 710 RunListenForConnectionMessages(text_msg, binary_data, false); | 678 RunListenForConnectionMessages(text_msg, binary_data, false); |
| 711 } | 679 } |
| 712 | 680 |
| 713 TEST_F(PresentationServiceImplTest, ListenForConnectionMessagesWithEmptyMsg) { | 681 TEST_F(PresentationServiceImplTest, ListenForConnectionMessagesWithEmptyMsg) { |
| 714 std::string text_msg(""); | 682 std::string text_msg(""); |
| 715 std::vector<uint8_t> binary_data; | 683 std::vector<uint8_t> binary_data; |
| 716 RunListenForConnectionMessages(text_msg, binary_data, false); | 684 RunListenForConnectionMessages(text_msg, binary_data, false); |
| 717 } | 685 } |
| 718 | 686 |
| 719 TEST_F(PresentationServiceImplTest, SetPresentationConnection) { | 687 TEST_F(PresentationServiceImplTest, SetPresentationConnection) { |
| 720 blink::mojom::PresentationSessionInfoPtr session( | 688 content::PresentationSessionInfo session(presentation_url1_, kPresentationId); |
| 721 blink::mojom::PresentationSessionInfo::New()); | |
| 722 session->url = presentation_url1_; | |
| 723 session->id = kPresentationId; | |
| 724 | 689 |
| 725 blink::mojom::PresentationConnectionPtr connection; | 690 blink::mojom::PresentationConnectionPtr connection; |
| 726 MockPresentationConnection mock_presentation_connection; | 691 MockPresentationConnection mock_presentation_connection; |
| 727 mojo::Binding<blink::mojom::PresentationConnection> connection_binding( | 692 mojo::Binding<blink::mojom::PresentationConnection> connection_binding( |
| 728 &mock_presentation_connection, mojo::MakeRequest(&connection)); | 693 &mock_presentation_connection, mojo::MakeRequest(&connection)); |
| 729 blink::mojom::PresentationConnectionPtr receiver_connection; | 694 blink::mojom::PresentationConnectionPtr receiver_connection; |
| 730 auto request = mojo::MakeRequest(&receiver_connection); | 695 auto request = mojo::MakeRequest(&receiver_connection); |
| 731 | 696 |
| 732 content::PresentationSessionInfo expected(presentation_url1_, | 697 content::PresentationSessionInfo expected(presentation_url1_, |
| 733 kPresentationId); | 698 kPresentationId); |
| 734 EXPECT_CALL(mock_delegate_, | 699 EXPECT_CALL(mock_delegate_, RegisterOffscreenPresentationConnectionRaw( |
| 735 RegisterOffscreenPresentationConnectionRaw( | 700 _, _, SessionInfoEquals(expected), _)); |
| 736 _, _, ContentSessionInfoEquals(ByRef(expected)), _)); | |
| 737 | 701 |
| 738 service_impl_->SetPresentationConnection( | 702 service_impl_->SetPresentationConnection(session, std::move(connection), |
| 739 std::move(session), std::move(connection), std::move(request)); | 703 std::move(request)); |
| 740 } | 704 } |
| 741 | 705 |
| 742 TEST_F(PresentationServiceImplTest, ReceiverPresentationServiceDelegate) { | 706 TEST_F(PresentationServiceImplTest, ReceiverPresentationServiceDelegate) { |
| 743 MockReceiverPresentationServiceDelegate mock_receiver_delegate; | 707 MockReceiverPresentationServiceDelegate mock_receiver_delegate; |
| 744 | 708 |
| 745 PresentationServiceImpl service_impl(contents()->GetMainFrame(), contents(), | 709 PresentationServiceImpl service_impl(contents()->GetMainFrame(), contents(), |
| 746 nullptr, &mock_receiver_delegate); | 710 nullptr, &mock_receiver_delegate); |
| 747 | 711 |
| 748 ReceiverConnectionAvailableCallback callback; | 712 ReceiverConnectionAvailableCallback callback; |
| 749 EXPECT_CALL(mock_receiver_delegate, | 713 EXPECT_CALL(mock_receiver_delegate, |
| 750 RegisterReceiverConnectionAvailableCallback(_)) | 714 RegisterReceiverConnectionAvailableCallback(_)) |
| 751 .WillOnce(SaveArg<0>(&callback)); | 715 .WillOnce(SaveArg<0>(&callback)); |
| 752 | 716 |
| 753 blink::mojom::PresentationServiceClientPtr client_ptr; | 717 blink::mojom::PresentationServiceClientPtr client_ptr; |
| 754 client_binding_.reset( | 718 client_binding_.reset( |
| 755 new mojo::Binding<blink::mojom::PresentationServiceClient>( | 719 new mojo::Binding<blink::mojom::PresentationServiceClient>( |
| 756 &mock_client_, mojo::MakeRequest(&client_ptr))); | 720 &mock_client_, mojo::MakeRequest(&client_ptr))); |
| 757 service_impl.controller_delegate_ = nullptr; | 721 service_impl.controller_delegate_ = nullptr; |
| 758 service_impl.SetClient(std::move(client_ptr)); | 722 service_impl.SetClient(std::move(client_ptr)); |
| 759 EXPECT_FALSE(callback.is_null()); | 723 EXPECT_FALSE(callback.is_null()); |
| 760 | 724 |
| 761 // NO-OP for ControllerPresentationServiceDelegate API functions | 725 // NO-OP for ControllerPresentationServiceDelegate API functions |
| 762 EXPECT_CALL(mock_delegate_, ListenForConnectionMessages(_, _, _, _)).Times(0); | 726 EXPECT_CALL(mock_delegate_, ListenForConnectionMessages(_, _, _, _)).Times(0); |
| 763 | 727 |
| 764 blink::mojom::PresentationSessionInfoPtr session( | 728 content::PresentationSessionInfo session(presentation_url1_, kPresentationId); |
| 765 blink::mojom::PresentationSessionInfo::New()); | 729 service_impl.ListenForConnectionMessages(session); |
| 766 session->url = GURL(kPresentationUrl1); | |
| 767 session->id = kPresentationId; | |
| 768 | |
| 769 service_impl.ListenForConnectionMessages(std::move(session)); | |
| 770 } | 730 } |
| 771 | 731 |
| 772 TEST_F(PresentationServiceImplTest, StartSessionInProgress) { | 732 TEST_F(PresentationServiceImplTest, StartSessionInProgress) { |
| 773 EXPECT_CALL(mock_delegate_, StartSession(_, _, presentation_urls_, _, _)) | 733 EXPECT_CALL(mock_delegate_, StartSession(_, _, presentation_urls_, _, _)) |
| 774 .Times(1); | 734 .Times(1); |
| 775 service_ptr_->StartSession(presentation_urls_, base::Bind(&DoNothing)); | 735 service_ptr_->StartSession(presentation_urls_, base::Bind(&DoNothing)); |
| 776 | 736 |
| 777 // This request should fail immediately, since there is already a StartSession | 737 // This request should fail immediately, since there is already a StartSession |
| 778 // in progress. | 738 // in progress. |
| 779 service_ptr_->StartSession( | 739 service_ptr_->StartSession( |
| 780 presentation_urls_, | 740 presentation_urls_, |
| 781 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError, | 741 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError, |
| 782 base::Unretained(this))); | 742 base::Unretained(this))); |
| 783 SaveQuitClosureAndRunLoop(); | 743 SaveQuitClosureAndRunLoop(); |
| 784 } | 744 } |
| 785 | 745 |
| 786 TEST_F(PresentationServiceImplTest, SendStringMessage) { | 746 TEST_F(PresentationServiceImplTest, SendStringMessage) { |
| 787 std::string message("Test presentation session message"); | 747 std::string message("Test presentation session message"); |
| 788 | 748 |
| 789 blink::mojom::PresentationSessionInfoPtr session( | 749 content::PresentationSessionInfo session(presentation_url1_, kPresentationId); |
| 790 blink::mojom::PresentationSessionInfo::New()); | |
| 791 session->url = presentation_url1_; | |
| 792 session->id = kPresentationId; | |
| 793 blink::mojom::ConnectionMessagePtr message_request( | 750 blink::mojom::ConnectionMessagePtr message_request( |
| 794 blink::mojom::ConnectionMessage::New()); | 751 blink::mojom::ConnectionMessage::New()); |
| 795 message_request->type = blink::mojom::PresentationMessageType::TEXT; | 752 message_request->type = blink::mojom::PresentationMessageType::TEXT; |
| 796 message_request->message = message; | 753 message_request->message = message; |
| 797 service_ptr_->SendConnectionMessage( | 754 service_ptr_->SendConnectionMessage( |
| 798 std::move(session), std::move(message_request), | 755 session, std::move(message_request), |
| 799 base::Bind( | 756 base::Bind( |
| 800 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, | 757 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 801 base::Unretained(this))); | 758 base::Unretained(this))); |
| 802 | 759 |
| 803 base::RunLoop run_loop; | 760 base::RunLoop run_loop; |
| 804 base::Callback<void(bool)> send_message_cb; | 761 base::Callback<void(bool)> send_message_cb; |
| 805 PresentationConnectionMessage* test_message = nullptr; | 762 PresentationConnectionMessage* test_message = nullptr; |
| 806 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 763 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
| 807 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 764 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 808 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 765 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 820 send_message_cb.Run(true); | 777 send_message_cb.Run(true); |
| 821 SaveQuitClosureAndRunLoop(); | 778 SaveQuitClosureAndRunLoop(); |
| 822 } | 779 } |
| 823 | 780 |
| 824 TEST_F(PresentationServiceImplTest, SendArrayBuffer) { | 781 TEST_F(PresentationServiceImplTest, SendArrayBuffer) { |
| 825 // Test Array buffer data. | 782 // Test Array buffer data. |
| 826 const uint8_t buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}; | 783 const uint8_t buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}; |
| 827 std::vector<uint8_t> data; | 784 std::vector<uint8_t> data; |
| 828 data.assign(buffer, buffer + sizeof(buffer)); | 785 data.assign(buffer, buffer + sizeof(buffer)); |
| 829 | 786 |
| 830 blink::mojom::PresentationSessionInfoPtr session( | 787 content::PresentationSessionInfo session(presentation_url1_, kPresentationId); |
| 831 blink::mojom::PresentationSessionInfo::New()); | |
| 832 session->url = presentation_url1_; | |
| 833 session->id = kPresentationId; | |
| 834 blink::mojom::ConnectionMessagePtr message_request( | 788 blink::mojom::ConnectionMessagePtr message_request( |
| 835 blink::mojom::ConnectionMessage::New()); | 789 blink::mojom::ConnectionMessage::New()); |
| 836 message_request->type = blink::mojom::PresentationMessageType::BINARY; | 790 message_request->type = blink::mojom::PresentationMessageType::BINARY; |
| 837 message_request->data = data; | 791 message_request->data = data; |
| 838 service_ptr_->SendConnectionMessage( | 792 service_ptr_->SendConnectionMessage( |
| 839 std::move(session), std::move(message_request), | 793 session, std::move(message_request), |
| 840 base::Bind( | 794 base::Bind( |
| 841 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, | 795 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 842 base::Unretained(this))); | 796 base::Unretained(this))); |
| 843 | 797 |
| 844 base::RunLoop run_loop; | 798 base::RunLoop run_loop; |
| 845 base::Callback<void(bool)> send_message_cb; | 799 base::Callback<void(bool)> send_message_cb; |
| 846 PresentationConnectionMessage* test_message = nullptr; | 800 PresentationConnectionMessage* test_message = nullptr; |
| 847 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 801 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
| 848 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 802 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 849 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 803 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 866 | 820 |
| 867 TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { | 821 TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { |
| 868 // Create buffer with size exceeding the limit. | 822 // Create buffer with size exceeding the limit. |
| 869 // Use same size as in content::kMaxPresentationConnectionMessageSize. | 823 // Use same size as in content::kMaxPresentationConnectionMessageSize. |
| 870 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB. | 824 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB. |
| 871 uint8_t buffer[kMaxBufferSizeInBytes + 1]; | 825 uint8_t buffer[kMaxBufferSizeInBytes + 1]; |
| 872 memset(buffer, 0, kMaxBufferSizeInBytes+1); | 826 memset(buffer, 0, kMaxBufferSizeInBytes+1); |
| 873 std::vector<uint8_t> data; | 827 std::vector<uint8_t> data; |
| 874 data.assign(buffer, buffer + sizeof(buffer)); | 828 data.assign(buffer, buffer + sizeof(buffer)); |
| 875 | 829 |
| 876 blink::mojom::PresentationSessionInfoPtr session( | 830 content::PresentationSessionInfo session(presentation_url1_, kPresentationId); |
| 877 blink::mojom::PresentationSessionInfo::New()); | |
| 878 session->url = presentation_url1_; | |
| 879 session->id = kPresentationId; | |
| 880 blink::mojom::ConnectionMessagePtr message_request( | 831 blink::mojom::ConnectionMessagePtr message_request( |
| 881 blink::mojom::ConnectionMessage::New()); | 832 blink::mojom::ConnectionMessage::New()); |
| 882 message_request->type = blink::mojom::PresentationMessageType::BINARY; | 833 message_request->type = blink::mojom::PresentationMessageType::BINARY; |
| 883 message_request->data = data; | 834 message_request->data = data; |
| 884 service_ptr_->SendConnectionMessage( | 835 service_ptr_->SendConnectionMessage( |
| 885 std::move(session), std::move(message_request), | 836 session, std::move(message_request), |
| 886 base::Bind( | 837 base::Bind( |
| 887 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, | 838 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 888 base::Unretained(this))); | 839 base::Unretained(this))); |
| 889 | 840 |
| 890 base::RunLoop run_loop; | 841 base::RunLoop run_loop; |
| 891 base::Callback<void(bool)> send_message_cb; | 842 base::Callback<void(bool)> send_message_cb; |
| 892 PresentationConnectionMessage* test_message = nullptr; | 843 PresentationConnectionMessage* test_message = nullptr; |
| 893 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 844 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
| 894 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 845 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 895 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 846 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
| 896 run_loop.Run(); | 847 run_loop.Run(); |
| 897 | 848 |
| 898 EXPECT_FALSE(test_message); | 849 EXPECT_FALSE(test_message); |
| 899 send_message_cb.Run(true); | 850 send_message_cb.Run(true); |
| 900 SaveQuitClosureAndRunLoop(); | 851 SaveQuitClosureAndRunLoop(); |
| 901 } | 852 } |
| 902 | 853 |
| 903 TEST_F(PresentationServiceImplTest, SendBlobData) { | 854 TEST_F(PresentationServiceImplTest, SendBlobData) { |
| 904 const uint8_t buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; | 855 const uint8_t buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; |
| 905 std::vector<uint8_t> data; | 856 std::vector<uint8_t> data; |
| 906 data.assign(buffer, buffer + sizeof(buffer)); | 857 data.assign(buffer, buffer + sizeof(buffer)); |
| 907 | 858 |
| 908 blink::mojom::PresentationSessionInfoPtr session( | 859 content::PresentationSessionInfo session(presentation_url1_, kPresentationId); |
| 909 blink::mojom::PresentationSessionInfo::New()); | |
| 910 session->url = presentation_url1_; | |
| 911 session->id = kPresentationId; | |
| 912 blink::mojom::ConnectionMessagePtr message_request( | 860 blink::mojom::ConnectionMessagePtr message_request( |
| 913 blink::mojom::ConnectionMessage::New()); | 861 blink::mojom::ConnectionMessage::New()); |
| 914 message_request->type = blink::mojom::PresentationMessageType::BINARY; | 862 message_request->type = blink::mojom::PresentationMessageType::BINARY; |
| 915 message_request->data = data; | 863 message_request->data = data; |
| 916 service_ptr_->SendConnectionMessage( | 864 service_ptr_->SendConnectionMessage( |
| 917 std::move(session), std::move(message_request), | 865 session, std::move(message_request), |
| 918 base::Bind( | 866 base::Bind( |
| 919 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, | 867 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 920 base::Unretained(this))); | 868 base::Unretained(this))); |
| 921 | 869 |
| 922 base::RunLoop run_loop; | 870 base::RunLoop run_loop; |
| 923 base::Callback<void(bool)> send_message_cb; | 871 base::Callback<void(bool)> send_message_cb; |
| 924 PresentationConnectionMessage* test_message = nullptr; | 872 PresentationConnectionMessage* test_message = nullptr; |
| 925 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 873 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
| 926 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 874 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 927 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 875 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 968 mock_delegate_.set_screen_availability_listening_supported(false); | 916 mock_delegate_.set_screen_availability_listening_supported(false); |
| 969 base::RunLoop run_loop; | 917 base::RunLoop run_loop; |
| 970 EXPECT_CALL(mock_client_, | 918 EXPECT_CALL(mock_client_, |
| 971 OnScreenAvailabilityNotSupported(presentation_url1_)) | 919 OnScreenAvailabilityNotSupported(presentation_url1_)) |
| 972 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 920 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 973 ListenForScreenAvailabilityAndWait(presentation_url1_, false); | 921 ListenForScreenAvailabilityAndWait(presentation_url1_, false); |
| 974 run_loop.Run(); | 922 run_loop.Run(); |
| 975 } | 923 } |
| 976 | 924 |
| 977 } // namespace content | 925 } // namespace content |
| OLD | NEW |