| 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> |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 | 38 |
| 39 namespace { | 39 namespace { |
| 40 | 40 |
| 41 // Matches Mojo structs. | 41 // Matches Mojo structs. |
| 42 MATCHER_P(Equals, expected, "") { | 42 MATCHER_P(Equals, expected, "") { |
| 43 return expected.Equals(arg); | 43 return expected.Equals(arg); |
| 44 } | 44 } |
| 45 | 45 |
| 46 // Matches PresentationSessionInfo passed by reference. | 46 // Matches PresentationSessionInfo passed by reference. |
| 47 MATCHER_P(SessionInfoEquals, expected, "") { | 47 MATCHER_P(SessionInfoEquals, expected, "") { |
| 48 blink::mojom::PresentationSessionInfo& expected_value = expected; | 48 content::mojom::PresentationSessionInfo& expected_value = expected; |
| 49 return expected_value.Equals(arg); | 49 return expected_value.Equals(arg); |
| 50 } | 50 } |
| 51 | 51 |
| 52 const char kPresentationId[] = "presentationId"; | 52 const char kPresentationId[] = "presentationId"; |
| 53 const char kPresentationUrl1[] = "http://foo.com/index.html"; | 53 const char kPresentationUrl1[] = "http://foo.com/index.html"; |
| 54 const char kPresentationUrl2[] = "http://example.com/index.html"; | 54 const char kPresentationUrl2[] = "http://example.com/index.html"; |
| 55 const char kPresentationUrl3[] = "http://example.net/index.html"; | 55 const char kPresentationUrl3[] = "http://example.net/index.html"; |
| 56 | 56 |
| 57 void DoNothing(blink::mojom::PresentationSessionInfoPtr info, | 57 void DoNothing(content::mojom::PresentationSessionInfoPtr info, |
| 58 blink::mojom::PresentationErrorPtr error) {} | 58 content::mojom::PresentationErrorPtr error) {} |
| 59 | 59 |
| 60 } // namespace | 60 } // namespace |
| 61 | 61 |
| 62 class MockPresentationServiceDelegate : public PresentationServiceDelegate { | 62 class MockPresentationServiceDelegate : public PresentationServiceDelegate { |
| 63 public: | 63 public: |
| 64 MOCK_METHOD3(AddObserver, | 64 MOCK_METHOD3(AddObserver, |
| 65 void(int render_process_id, | 65 void(int render_process_id, |
| 66 int render_frame_id, | 66 int render_frame_id, |
| 67 PresentationServiceDelegate::Observer* observer)); | 67 PresentationServiceDelegate::Observer* observer)); |
| 68 MOCK_METHOD2(RemoveObserver, | 68 MOCK_METHOD2(RemoveObserver, |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 | 141 |
| 142 void set_screen_availability_listening_supported(bool value) { | 142 void set_screen_availability_listening_supported(bool value) { |
| 143 screen_availability_listening_supported_ = value; | 143 screen_availability_listening_supported_ = value; |
| 144 } | 144 } |
| 145 | 145 |
| 146 private: | 146 private: |
| 147 bool screen_availability_listening_supported_ = true; | 147 bool screen_availability_listening_supported_ = true; |
| 148 }; | 148 }; |
| 149 | 149 |
| 150 class MockPresentationServiceClient | 150 class MockPresentationServiceClient |
| 151 : public blink::mojom::PresentationServiceClient { | 151 : public content::mojom::PresentationServiceClient { |
| 152 public: | 152 public: |
| 153 MOCK_METHOD2(OnScreenAvailabilityUpdated, | 153 MOCK_METHOD2(OnScreenAvailabilityUpdated, |
| 154 void(const GURL& url, bool available)); | 154 void(const GURL& url, bool available)); |
| 155 void OnConnectionStateChanged( | 155 void OnConnectionStateChanged( |
| 156 blink::mojom::PresentationSessionInfoPtr connection, | 156 content::mojom::PresentationSessionInfoPtr connection, |
| 157 blink::mojom::PresentationConnectionState new_state) override { | 157 content::mojom::PresentationConnectionState new_state) override { |
| 158 OnConnectionStateChanged(*connection, new_state); | 158 OnConnectionStateChanged(*connection, new_state); |
| 159 } | 159 } |
| 160 MOCK_METHOD2(OnConnectionStateChanged, | 160 MOCK_METHOD2(OnConnectionStateChanged, |
| 161 void(const blink::mojom::PresentationSessionInfo& connection, | 161 void(const content::mojom::PresentationSessionInfo& connection, |
| 162 blink::mojom::PresentationConnectionState new_state)); | 162 content::mojom::PresentationConnectionState new_state)); |
| 163 | 163 |
| 164 void OnConnectionClosed( | 164 void OnConnectionClosed( |
| 165 blink::mojom::PresentationSessionInfoPtr connection, | 165 content::mojom::PresentationSessionInfoPtr connection, |
| 166 blink::mojom::PresentationConnectionCloseReason reason, | 166 content::mojom::PresentationConnectionCloseReason reason, |
| 167 const std::string& message) override { | 167 const std::string& message) override { |
| 168 OnConnectionClosed(*connection, reason, message); | 168 OnConnectionClosed(*connection, reason, message); |
| 169 } | 169 } |
| 170 MOCK_METHOD3(OnConnectionClosed, | 170 MOCK_METHOD3(OnConnectionClosed, |
| 171 void(const blink::mojom::PresentationSessionInfo& connection, | 171 void(const content::mojom::PresentationSessionInfo& connection, |
| 172 blink::mojom::PresentationConnectionCloseReason reason, | 172 content::mojom::PresentationConnectionCloseReason reason, |
| 173 const std::string& message)); | 173 const std::string& message)); |
| 174 | 174 |
| 175 MOCK_METHOD1(OnScreenAvailabilityNotSupported, void(const GURL& url)); | 175 MOCK_METHOD1(OnScreenAvailabilityNotSupported, void(const GURL& url)); |
| 176 | 176 |
| 177 void OnConnectionMessagesReceived( | 177 void OnConnectionMessagesReceived( |
| 178 blink::mojom::PresentationSessionInfoPtr session_info, | 178 content::mojom::PresentationSessionInfoPtr session_info, |
| 179 std::vector<blink::mojom::ConnectionMessagePtr> messages) override { | 179 std::vector<content::mojom::ConnectionMessagePtr> messages) override { |
| 180 messages_received_ = std::move(messages); | 180 messages_received_ = std::move(messages); |
| 181 MessagesReceived(); | 181 MessagesReceived(); |
| 182 } | 182 } |
| 183 MOCK_METHOD0(MessagesReceived, void()); | 183 MOCK_METHOD0(MessagesReceived, void()); |
| 184 | 184 |
| 185 void OnDefaultSessionStarted( | 185 void OnDefaultSessionStarted( |
| 186 blink::mojom::PresentationSessionInfoPtr session_info) override { | 186 content::mojom::PresentationSessionInfoPtr session_info) override { |
| 187 OnDefaultSessionStarted(*session_info); | 187 OnDefaultSessionStarted(*session_info); |
| 188 } | 188 } |
| 189 MOCK_METHOD1(OnDefaultSessionStarted, | 189 MOCK_METHOD1( |
| 190 void(const blink::mojom::PresentationSessionInfo& session_info)); | 190 OnDefaultSessionStarted, |
| 191 void(const content::mojom::PresentationSessionInfo& session_info)); |
| 191 | 192 |
| 192 void OnReceiverConnectionAvailable( | 193 void OnReceiverConnectionAvailable( |
| 193 blink::mojom::PresentationSessionInfoPtr session_info) override { | 194 content::mojom::PresentationSessionInfoPtr session_info) override { |
| 194 OnReceiverConnectionAvailable(*session_info); | 195 OnReceiverConnectionAvailable(*session_info); |
| 195 } | 196 } |
| 196 MOCK_METHOD1(OnReceiverConnectionAvailable, | 197 MOCK_METHOD1( |
| 197 void(const blink::mojom::PresentationSessionInfo& session_info)); | 198 OnReceiverConnectionAvailable, |
| 199 void(const content::mojom::PresentationSessionInfo& session_info)); |
| 198 | 200 |
| 199 std::vector<blink::mojom::ConnectionMessagePtr> messages_received_; | 201 std::vector<content::mojom::ConnectionMessagePtr> messages_received_; |
| 200 }; | 202 }; |
| 201 | 203 |
| 202 class PresentationServiceImplTest : public RenderViewHostImplTestHarness { | 204 class PresentationServiceImplTest : public RenderViewHostImplTestHarness { |
| 203 public: | 205 public: |
| 204 PresentationServiceImplTest() | 206 PresentationServiceImplTest() |
| 205 : presentation_url1_(GURL(kPresentationUrl1)), | 207 : presentation_url1_(GURL(kPresentationUrl1)), |
| 206 presentation_url2_(GURL(kPresentationUrl2)), | 208 presentation_url2_(GURL(kPresentationUrl2)), |
| 207 presentation_url3_(GURL(kPresentationUrl3)) {} | 209 presentation_url3_(GURL(kPresentationUrl3)) {} |
| 208 | 210 |
| 209 void SetUp() override { | 211 void SetUp() override { |
| 210 RenderViewHostImplTestHarness::SetUp(); | 212 RenderViewHostImplTestHarness::SetUp(); |
| 211 | 213 |
| 212 auto request = mojo::MakeRequest(&service_ptr_); | 214 auto request = mojo::MakeRequest(&service_ptr_); |
| 213 EXPECT_CALL(mock_delegate_, AddObserver(_, _, _)).Times(1); | 215 EXPECT_CALL(mock_delegate_, AddObserver(_, _, _)).Times(1); |
| 214 TestRenderFrameHost* render_frame_host = contents()->GetMainFrame(); | 216 TestRenderFrameHost* render_frame_host = contents()->GetMainFrame(); |
| 215 render_frame_host->InitializeRenderFrameIfNeeded(); | 217 render_frame_host->InitializeRenderFrameIfNeeded(); |
| 216 service_impl_.reset(new PresentationServiceImpl( | 218 service_impl_.reset(new PresentationServiceImpl( |
| 217 render_frame_host, contents(), &mock_delegate_)); | 219 render_frame_host, contents(), &mock_delegate_)); |
| 218 service_impl_->Bind(std::move(request)); | 220 service_impl_->Bind(std::move(request)); |
| 219 | 221 |
| 220 blink::mojom::PresentationServiceClientPtr client_ptr; | 222 content::mojom::PresentationServiceClientPtr client_ptr; |
| 221 client_binding_.reset( | 223 client_binding_.reset( |
| 222 new mojo::Binding<blink::mojom::PresentationServiceClient>( | 224 new mojo::Binding<content::mojom::PresentationServiceClient>( |
| 223 &mock_client_, mojo::MakeRequest(&client_ptr))); | 225 &mock_client_, mojo::MakeRequest(&client_ptr))); |
| 224 service_impl_->SetClient(std::move(client_ptr)); | 226 service_impl_->SetClient(std::move(client_ptr)); |
| 225 | 227 |
| 226 presentation_urls_.push_back(presentation_url1_); | 228 presentation_urls_.push_back(presentation_url1_); |
| 227 presentation_urls_.push_back(presentation_url2_); | 229 presentation_urls_.push_back(presentation_url2_); |
| 228 } | 230 } |
| 229 | 231 |
| 230 void TearDown() override { | 232 void TearDown() override { |
| 231 service_ptr_.reset(); | 233 service_ptr_.reset(); |
| 232 if (service_impl_.get()) { | 234 if (service_impl_.get()) { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 285 | 287 |
| 286 void ExpectCleanState() { | 288 void ExpectCleanState() { |
| 287 EXPECT_TRUE(service_impl_->default_presentation_urls_.empty()); | 289 EXPECT_TRUE(service_impl_->default_presentation_urls_.empty()); |
| 288 EXPECT_EQ( | 290 EXPECT_EQ( |
| 289 service_impl_->screen_availability_listeners_.find(presentation_url1_), | 291 service_impl_->screen_availability_listeners_.find(presentation_url1_), |
| 290 service_impl_->screen_availability_listeners_.end()); | 292 service_impl_->screen_availability_listeners_.end()); |
| 291 EXPECT_FALSE(service_impl_->on_connection_messages_callback_.get()); | 293 EXPECT_FALSE(service_impl_->on_connection_messages_callback_.get()); |
| 292 } | 294 } |
| 293 | 295 |
| 294 void ExpectNewSessionCallbackSuccess( | 296 void ExpectNewSessionCallbackSuccess( |
| 295 blink::mojom::PresentationSessionInfoPtr info, | 297 content::mojom::PresentationSessionInfoPtr info, |
| 296 blink::mojom::PresentationErrorPtr error) { | 298 content::mojom::PresentationErrorPtr error) { |
| 297 EXPECT_FALSE(info.is_null()); | 299 EXPECT_FALSE(info.is_null()); |
| 298 EXPECT_TRUE(error.is_null()); | 300 EXPECT_TRUE(error.is_null()); |
| 299 if (!run_loop_quit_closure_.is_null()) | 301 if (!run_loop_quit_closure_.is_null()) |
| 300 run_loop_quit_closure_.Run(); | 302 run_loop_quit_closure_.Run(); |
| 301 } | 303 } |
| 302 | 304 |
| 303 void ExpectNewSessionCallbackError( | 305 void ExpectNewSessionCallbackError( |
| 304 blink::mojom::PresentationSessionInfoPtr info, | 306 content::mojom::PresentationSessionInfoPtr info, |
| 305 blink::mojom::PresentationErrorPtr error) { | 307 content::mojom::PresentationErrorPtr error) { |
| 306 EXPECT_TRUE(info.is_null()); | 308 EXPECT_TRUE(info.is_null()); |
| 307 EXPECT_FALSE(error.is_null()); | 309 EXPECT_FALSE(error.is_null()); |
| 308 if (!run_loop_quit_closure_.is_null()) | 310 if (!run_loop_quit_closure_.is_null()) |
| 309 run_loop_quit_closure_.Run(); | 311 run_loop_quit_closure_.Run(); |
| 310 } | 312 } |
| 311 | 313 |
| 312 void ExpectConnectionMessages( | 314 void ExpectConnectionMessages( |
| 313 const std::vector<blink::mojom::ConnectionMessagePtr>& expected_msgs, | 315 const std::vector<content::mojom::ConnectionMessagePtr>& expected_msgs, |
| 314 const std::vector<blink::mojom::ConnectionMessagePtr>& actual_msgs) { | 316 const std::vector<content::mojom::ConnectionMessagePtr>& actual_msgs) { |
| 315 EXPECT_EQ(expected_msgs.size(), actual_msgs.size()); | 317 EXPECT_EQ(expected_msgs.size(), actual_msgs.size()); |
| 316 for (size_t i = 0; i < actual_msgs.size(); ++i) | 318 for (size_t i = 0; i < actual_msgs.size(); ++i) |
| 317 EXPECT_TRUE(expected_msgs[i].Equals(actual_msgs[i])); | 319 EXPECT_TRUE(expected_msgs[i].Equals(actual_msgs[i])); |
| 318 } | 320 } |
| 319 | 321 |
| 320 void ExpectSendConnectionMessageCallback(bool success) { | 322 void ExpectSendConnectionMessageCallback(bool success) { |
| 321 EXPECT_TRUE(success); | 323 EXPECT_TRUE(success); |
| 322 EXPECT_FALSE(service_impl_->send_message_callback_); | 324 EXPECT_FALSE(service_impl_->send_message_callback_); |
| 323 if (!run_loop_quit_closure_.is_null()) | 325 if (!run_loop_quit_closure_.is_null()) |
| 324 run_loop_quit_closure_.Run(); | 326 run_loop_quit_closure_.Run(); |
| 325 } | 327 } |
| 326 | 328 |
| 327 void RunListenForConnectionMessages(const std::string& text_msg, | 329 void RunListenForConnectionMessages(const std::string& text_msg, |
| 328 const std::vector<uint8_t>& binary_data, | 330 const std::vector<uint8_t>& binary_data, |
| 329 bool pass_ownership) { | 331 bool pass_ownership) { |
| 330 std::vector<blink::mojom::ConnectionMessagePtr> expected_msgs(2); | 332 std::vector<content::mojom::ConnectionMessagePtr> expected_msgs(2); |
| 331 expected_msgs[0] = blink::mojom::ConnectionMessage::New(); | 333 expected_msgs[0] = content::mojom::ConnectionMessage::New(); |
| 332 expected_msgs[0]->type = blink::mojom::PresentationMessageType::TEXT; | 334 expected_msgs[0]->type = content::mojom::PresentationMessageType::TEXT; |
| 333 expected_msgs[0]->message = text_msg; | 335 expected_msgs[0]->message = text_msg; |
| 334 expected_msgs[1] = blink::mojom::ConnectionMessage::New(); | 336 expected_msgs[1] = content::mojom::ConnectionMessage::New(); |
| 335 expected_msgs[1]->type = blink::mojom::PresentationMessageType::BINARY; | 337 expected_msgs[1]->type = content::mojom::PresentationMessageType::BINARY; |
| 336 expected_msgs[1]->data = binary_data; | 338 expected_msgs[1]->data = binary_data; |
| 337 | 339 |
| 338 blink::mojom::PresentationSessionInfoPtr session( | 340 content::mojom::PresentationSessionInfoPtr session( |
| 339 blink::mojom::PresentationSessionInfo::New()); | 341 content::mojom::PresentationSessionInfo::New()); |
| 340 session->url = presentation_url1_; | 342 session->url = presentation_url1_; |
| 341 session->id = kPresentationId; | 343 session->id = kPresentationId; |
| 342 | 344 |
| 343 PresentationConnectionMessageCallback message_cb; | 345 PresentationConnectionMessageCallback message_cb; |
| 344 { | 346 { |
| 345 base::RunLoop run_loop; | 347 base::RunLoop run_loop; |
| 346 EXPECT_CALL(mock_delegate_, ListenForConnectionMessages(_, _, _, _)) | 348 EXPECT_CALL(mock_delegate_, ListenForConnectionMessages(_, _, _, _)) |
| 347 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 349 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 348 SaveArg<3>(&message_cb))); | 350 SaveArg<3>(&message_cb))); |
| 349 service_ptr_->ListenForConnectionMessages(std::move(session)); | 351 service_ptr_->ListenForConnectionMessages(std::move(session)); |
| 350 run_loop.Run(); | 352 run_loop.Run(); |
| 351 } | 353 } |
| 352 | 354 |
| 353 std::vector<std::unique_ptr<PresentationConnectionMessage>> messages; | 355 std::vector<std::unique_ptr<PresentationConnectionMessage>> messages; |
| 354 std::unique_ptr<content::PresentationConnectionMessage> message; | 356 std::unique_ptr<content::PresentationConnectionMessage> message; |
| 355 message.reset(new content::PresentationConnectionMessage( | 357 message.reset(new content::PresentationConnectionMessage( |
| 356 PresentationMessageType::TEXT)); | 358 PresentationMessageType::TEXT)); |
| 357 message->message = text_msg; | 359 message->message = text_msg; |
| 358 messages.push_back(std::move(message)); | 360 messages.push_back(std::move(message)); |
| 359 message.reset(new content::PresentationConnectionMessage( | 361 message.reset(new content::PresentationConnectionMessage( |
| 360 PresentationMessageType::BINARY)); | 362 PresentationMessageType::BINARY)); |
| 361 message->data.reset(new std::vector<uint8_t>(binary_data)); | 363 message->data.reset(new std::vector<uint8_t>(binary_data)); |
| 362 messages.push_back(std::move(message)); | 364 messages.push_back(std::move(message)); |
| 363 | 365 |
| 364 std::vector<blink::mojom::ConnectionMessagePtr> actual_msgs; | 366 std::vector<content::mojom::ConnectionMessagePtr> actual_msgs; |
| 365 { | 367 { |
| 366 base::RunLoop run_loop; | 368 base::RunLoop run_loop; |
| 367 EXPECT_CALL(mock_client_, MessagesReceived()) | 369 EXPECT_CALL(mock_client_, MessagesReceived()) |
| 368 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 370 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 369 message_cb.Run(std::move(messages), pass_ownership); | 371 message_cb.Run(std::move(messages), pass_ownership); |
| 370 run_loop.Run(); | 372 run_loop.Run(); |
| 371 } | 373 } |
| 372 ExpectConnectionMessages(expected_msgs, mock_client_.messages_received_); | 374 ExpectConnectionMessages(expected_msgs, mock_client_.messages_received_); |
| 373 } | 375 } |
| 374 | 376 |
| 375 MockPresentationServiceDelegate mock_delegate_; | 377 MockPresentationServiceDelegate mock_delegate_; |
| 376 | 378 |
| 377 std::unique_ptr<PresentationServiceImpl> service_impl_; | 379 std::unique_ptr<PresentationServiceImpl> service_impl_; |
| 378 mojo::InterfacePtr<blink::mojom::PresentationService> service_ptr_; | 380 mojo::InterfacePtr<content::mojom::PresentationService> service_ptr_; |
| 379 | 381 |
| 380 MockPresentationServiceClient mock_client_; | 382 MockPresentationServiceClient mock_client_; |
| 381 std::unique_ptr<mojo::Binding<blink::mojom::PresentationServiceClient>> | 383 std::unique_ptr<mojo::Binding<content::mojom::PresentationServiceClient>> |
| 382 client_binding_; | 384 client_binding_; |
| 383 | 385 |
| 384 base::Closure run_loop_quit_closure_; | 386 base::Closure run_loop_quit_closure_; |
| 385 | 387 |
| 386 GURL presentation_url1_; | 388 GURL presentation_url1_; |
| 387 GURL presentation_url2_; | 389 GURL presentation_url2_; |
| 388 GURL presentation_url3_; | 390 GURL presentation_url3_; |
| 389 std::vector<GURL> presentation_urls_; | 391 std::vector<GURL> presentation_urls_; |
| 390 }; | 392 }; |
| 391 | 393 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 468 | 470 |
| 469 // Sets different DPUs. | 471 // Sets different DPUs. |
| 470 std::vector<GURL> more_urls = presentation_urls_; | 472 std::vector<GURL> more_urls = presentation_urls_; |
| 471 more_urls.push_back(presentation_url3_); | 473 more_urls.push_back(presentation_url3_); |
| 472 | 474 |
| 473 content::PresentationSessionStartedCallback callback; | 475 content::PresentationSessionStartedCallback callback; |
| 474 EXPECT_CALL(mock_delegate_, SetDefaultPresentationUrls(_, _, more_urls, _)) | 476 EXPECT_CALL(mock_delegate_, SetDefaultPresentationUrls(_, _, more_urls, _)) |
| 475 .WillOnce(SaveArg<3>(&callback)); | 477 .WillOnce(SaveArg<3>(&callback)); |
| 476 service_impl_->SetDefaultPresentationUrls(more_urls); | 478 service_impl_->SetDefaultPresentationUrls(more_urls); |
| 477 | 479 |
| 478 blink::mojom::PresentationSessionInfo session_info; | 480 content::mojom::PresentationSessionInfo session_info; |
| 479 session_info.url = presentation_url2_; | 481 session_info.url = presentation_url2_; |
| 480 session_info.id = kPresentationId; | 482 session_info.id = kPresentationId; |
| 481 | 483 |
| 482 base::RunLoop run_loop; | 484 base::RunLoop run_loop; |
| 483 EXPECT_CALL(mock_client_, | 485 EXPECT_CALL(mock_client_, |
| 484 OnDefaultSessionStarted(SessionInfoEquals(ByRef(session_info)))) | 486 OnDefaultSessionStarted(SessionInfoEquals(ByRef(session_info)))) |
| 485 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 487 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 486 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)); | 488 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)); |
| 487 callback.Run( | 489 callback.Run( |
| 488 content::PresentationSessionInfo(presentation_url2_, kPresentationId)); | 490 content::PresentationSessionInfo(presentation_url2_, kPresentationId)); |
| 489 run_loop.Run(); | 491 run_loop.Run(); |
| 490 } | 492 } |
| 491 | 493 |
| 492 TEST_F(PresentationServiceImplTest, | 494 TEST_F(PresentationServiceImplTest, |
| 493 ListenForConnectionStateChangeAndChangeState) { | 495 ListenForConnectionStateChangeAndChangeState) { |
| 494 content::PresentationSessionInfo connection(presentation_url1_, | 496 content::PresentationSessionInfo connection(presentation_url1_, |
| 495 kPresentationId); | 497 kPresentationId); |
| 496 content::PresentationConnectionStateChangedCallback state_changed_cb; | 498 content::PresentationConnectionStateChangedCallback state_changed_cb; |
| 497 // Trigger state change. It should be propagated back up to |mock_client_|. | 499 // Trigger state change. It should be propagated back up to |mock_client_|. |
| 498 blink::mojom::PresentationSessionInfo presentation_connection; | 500 content::mojom::PresentationSessionInfo presentation_connection; |
| 499 presentation_connection.url = presentation_url1_; | 501 presentation_connection.url = presentation_url1_; |
| 500 presentation_connection.id = kPresentationId; | 502 presentation_connection.id = kPresentationId; |
| 501 | 503 |
| 502 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) | 504 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) |
| 503 .WillOnce(SaveArg<3>(&state_changed_cb)); | 505 .WillOnce(SaveArg<3>(&state_changed_cb)); |
| 504 EXPECT_CALL(mock_client_, | 506 EXPECT_CALL(mock_client_, |
| 505 OnConnectionStateChanged( | 507 OnConnectionStateChanged( |
| 506 SessionInfoEquals(ByRef(presentation_connection)), | 508 SessionInfoEquals(ByRef(presentation_connection)), |
| 507 blink::mojom::PresentationConnectionState::CONNECTED)); | 509 content::mojom::PresentationConnectionState::CONNECTED)); |
| 508 service_impl_->ListenForConnectionStateChangeAndChangeState(connection); | 510 service_impl_->ListenForConnectionStateChangeAndChangeState(connection); |
| 509 | 511 |
| 510 { | 512 { |
| 511 base::RunLoop run_loop; | 513 base::RunLoop run_loop; |
| 512 EXPECT_CALL(mock_client_, | 514 EXPECT_CALL(mock_client_, |
| 513 OnConnectionStateChanged( | 515 OnConnectionStateChanged( |
| 514 SessionInfoEquals(ByRef(presentation_connection)), | 516 SessionInfoEquals(ByRef(presentation_connection)), |
| 515 blink::mojom::PresentationConnectionState::TERMINATED)) | 517 content::mojom::PresentationConnectionState::TERMINATED)) |
| 516 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 518 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 517 state_changed_cb.Run(PresentationConnectionStateChangeInfo( | 519 state_changed_cb.Run(PresentationConnectionStateChangeInfo( |
| 518 PRESENTATION_CONNECTION_STATE_TERMINATED)); | 520 PRESENTATION_CONNECTION_STATE_TERMINATED)); |
| 519 run_loop.Run(); | 521 run_loop.Run(); |
| 520 } | 522 } |
| 521 } | 523 } |
| 522 | 524 |
| 523 TEST_F(PresentationServiceImplTest, ListenForConnectionClose) { | 525 TEST_F(PresentationServiceImplTest, ListenForConnectionClose) { |
| 524 content::PresentationSessionInfo connection(presentation_url1_, | 526 content::PresentationSessionInfo connection(presentation_url1_, |
| 525 kPresentationId); | 527 kPresentationId); |
| 526 content::PresentationConnectionStateChangedCallback state_changed_cb; | 528 content::PresentationConnectionStateChangedCallback state_changed_cb; |
| 527 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) | 529 EXPECT_CALL(mock_delegate_, ListenForConnectionStateChange(_, _, _, _)) |
| 528 .WillOnce(SaveArg<3>(&state_changed_cb)); | 530 .WillOnce(SaveArg<3>(&state_changed_cb)); |
| 529 service_impl_->ListenForConnectionStateChangeAndChangeState(connection); | 531 service_impl_->ListenForConnectionStateChangeAndChangeState(connection); |
| 530 | 532 |
| 531 // Trigger connection close. It should be propagated back up to | 533 // Trigger connection close. It should be propagated back up to |
| 532 // |mock_client_|. | 534 // |mock_client_|. |
| 533 blink::mojom::PresentationSessionInfo presentation_connection; | 535 content::mojom::PresentationSessionInfo presentation_connection; |
| 534 presentation_connection.url = presentation_url1_; | 536 presentation_connection.url = presentation_url1_; |
| 535 presentation_connection.id = kPresentationId; | 537 presentation_connection.id = kPresentationId; |
| 536 { | 538 { |
| 537 base::RunLoop run_loop; | 539 base::RunLoop run_loop; |
| 538 PresentationConnectionStateChangeInfo closed_info( | 540 PresentationConnectionStateChangeInfo closed_info( |
| 539 PRESENTATION_CONNECTION_STATE_CLOSED); | 541 PRESENTATION_CONNECTION_STATE_CLOSED); |
| 540 closed_info.close_reason = PRESENTATION_CONNECTION_CLOSE_REASON_WENT_AWAY; | 542 closed_info.close_reason = PRESENTATION_CONNECTION_CLOSE_REASON_WENT_AWAY; |
| 541 closed_info.message = "Foo"; | 543 closed_info.message = "Foo"; |
| 542 | 544 |
| 543 EXPECT_CALL( | 545 EXPECT_CALL( |
| 544 mock_client_, | 546 mock_client_, |
| 545 OnConnectionClosed( | 547 OnConnectionClosed( |
| 546 SessionInfoEquals(ByRef(presentation_connection)), | 548 SessionInfoEquals(ByRef(presentation_connection)), |
| 547 blink::mojom::PresentationConnectionCloseReason::WENT_AWAY, "Foo")) | 549 content::mojom::PresentationConnectionCloseReason::WENT_AWAY, |
| 550 "Foo")) |
| 548 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 551 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 549 state_changed_cb.Run(closed_info); | 552 state_changed_cb.Run(closed_info); |
| 550 run_loop.Run(); | 553 run_loop.Run(); |
| 551 } | 554 } |
| 552 } | 555 } |
| 553 | 556 |
| 554 TEST_F(PresentationServiceImplTest, SetSameDefaultPresentationUrls) { | 557 TEST_F(PresentationServiceImplTest, SetSameDefaultPresentationUrls) { |
| 555 EXPECT_CALL(mock_delegate_, | 558 EXPECT_CALL(mock_delegate_, |
| 556 SetDefaultPresentationUrls(_, _, presentation_urls_, _)) | 559 SetDefaultPresentationUrls(_, _, presentation_urls_, _)) |
| 557 .Times(1); | 560 .Times(1); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 676 service_ptr_->StartSession( | 679 service_ptr_->StartSession( |
| 677 presentation_urls_, | 680 presentation_urls_, |
| 678 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError, | 681 base::Bind(&PresentationServiceImplTest::ExpectNewSessionCallbackError, |
| 679 base::Unretained(this))); | 682 base::Unretained(this))); |
| 680 SaveQuitClosureAndRunLoop(); | 683 SaveQuitClosureAndRunLoop(); |
| 681 } | 684 } |
| 682 | 685 |
| 683 TEST_F(PresentationServiceImplTest, SendStringMessage) { | 686 TEST_F(PresentationServiceImplTest, SendStringMessage) { |
| 684 std::string message("Test presentation session message"); | 687 std::string message("Test presentation session message"); |
| 685 | 688 |
| 686 blink::mojom::PresentationSessionInfoPtr session( | 689 content::mojom::PresentationSessionInfoPtr session( |
| 687 blink::mojom::PresentationSessionInfo::New()); | 690 content::mojom::PresentationSessionInfo::New()); |
| 688 session->url = presentation_url1_; | 691 session->url = presentation_url1_; |
| 689 session->id = kPresentationId; | 692 session->id = kPresentationId; |
| 690 blink::mojom::ConnectionMessagePtr message_request( | 693 content::mojom::ConnectionMessagePtr message_request( |
| 691 blink::mojom::ConnectionMessage::New()); | 694 content::mojom::ConnectionMessage::New()); |
| 692 message_request->type = blink::mojom::PresentationMessageType::TEXT; | 695 message_request->type = content::mojom::PresentationMessageType::TEXT; |
| 693 message_request->message = message; | 696 message_request->message = message; |
| 694 service_ptr_->SendConnectionMessage( | 697 service_ptr_->SendConnectionMessage( |
| 695 std::move(session), std::move(message_request), | 698 std::move(session), std::move(message_request), |
| 696 base::Bind( | 699 base::Bind( |
| 697 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, | 700 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 698 base::Unretained(this))); | 701 base::Unretained(this))); |
| 699 | 702 |
| 700 base::RunLoop run_loop; | 703 base::RunLoop run_loop; |
| 701 base::Callback<void(bool)> send_message_cb; | 704 base::Callback<void(bool)> send_message_cb; |
| 702 PresentationConnectionMessage* test_message = nullptr; | 705 PresentationConnectionMessage* test_message = nullptr; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 717 send_message_cb.Run(true); | 720 send_message_cb.Run(true); |
| 718 SaveQuitClosureAndRunLoop(); | 721 SaveQuitClosureAndRunLoop(); |
| 719 } | 722 } |
| 720 | 723 |
| 721 TEST_F(PresentationServiceImplTest, SendArrayBuffer) { | 724 TEST_F(PresentationServiceImplTest, SendArrayBuffer) { |
| 722 // Test Array buffer data. | 725 // Test Array buffer data. |
| 723 const uint8_t buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}; | 726 const uint8_t buffer[] = {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}; |
| 724 std::vector<uint8_t> data; | 727 std::vector<uint8_t> data; |
| 725 data.assign(buffer, buffer + sizeof(buffer)); | 728 data.assign(buffer, buffer + sizeof(buffer)); |
| 726 | 729 |
| 727 blink::mojom::PresentationSessionInfoPtr session( | 730 content::mojom::PresentationSessionInfoPtr session( |
| 728 blink::mojom::PresentationSessionInfo::New()); | 731 content::mojom::PresentationSessionInfo::New()); |
| 729 session->url = presentation_url1_; | 732 session->url = presentation_url1_; |
| 730 session->id = kPresentationId; | 733 session->id = kPresentationId; |
| 731 blink::mojom::ConnectionMessagePtr message_request( | 734 content::mojom::ConnectionMessagePtr message_request( |
| 732 blink::mojom::ConnectionMessage::New()); | 735 content::mojom::ConnectionMessage::New()); |
| 733 message_request->type = blink::mojom::PresentationMessageType::BINARY; | 736 message_request->type = content::mojom::PresentationMessageType::BINARY; |
| 734 message_request->data = data; | 737 message_request->data = data; |
| 735 service_ptr_->SendConnectionMessage( | 738 service_ptr_->SendConnectionMessage( |
| 736 std::move(session), std::move(message_request), | 739 std::move(session), std::move(message_request), |
| 737 base::Bind( | 740 base::Bind( |
| 738 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, | 741 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 739 base::Unretained(this))); | 742 base::Unretained(this))); |
| 740 | 743 |
| 741 base::RunLoop run_loop; | 744 base::RunLoop run_loop; |
| 742 base::Callback<void(bool)> send_message_cb; | 745 base::Callback<void(bool)> send_message_cb; |
| 743 PresentationConnectionMessage* test_message = nullptr; | 746 PresentationConnectionMessage* test_message = nullptr; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 763 | 766 |
| 764 TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { | 767 TEST_F(PresentationServiceImplTest, SendArrayBufferWithExceedingLimit) { |
| 765 // Create buffer with size exceeding the limit. | 768 // Create buffer with size exceeding the limit. |
| 766 // Use same size as in content::kMaxPresentationConnectionMessageSize. | 769 // Use same size as in content::kMaxPresentationConnectionMessageSize. |
| 767 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB. | 770 const size_t kMaxBufferSizeInBytes = 64 * 1024; // 64 KB. |
| 768 uint8_t buffer[kMaxBufferSizeInBytes + 1]; | 771 uint8_t buffer[kMaxBufferSizeInBytes + 1]; |
| 769 memset(buffer, 0, kMaxBufferSizeInBytes+1); | 772 memset(buffer, 0, kMaxBufferSizeInBytes+1); |
| 770 std::vector<uint8_t> data; | 773 std::vector<uint8_t> data; |
| 771 data.assign(buffer, buffer + sizeof(buffer)); | 774 data.assign(buffer, buffer + sizeof(buffer)); |
| 772 | 775 |
| 773 blink::mojom::PresentationSessionInfoPtr session( | 776 content::mojom::PresentationSessionInfoPtr session( |
| 774 blink::mojom::PresentationSessionInfo::New()); | 777 content::mojom::PresentationSessionInfo::New()); |
| 775 session->url = presentation_url1_; | 778 session->url = presentation_url1_; |
| 776 session->id = kPresentationId; | 779 session->id = kPresentationId; |
| 777 blink::mojom::ConnectionMessagePtr message_request( | 780 content::mojom::ConnectionMessagePtr message_request( |
| 778 blink::mojom::ConnectionMessage::New()); | 781 content::mojom::ConnectionMessage::New()); |
| 779 message_request->type = blink::mojom::PresentationMessageType::BINARY; | 782 message_request->type = content::mojom::PresentationMessageType::BINARY; |
| 780 message_request->data = data; | 783 message_request->data = data; |
| 781 service_ptr_->SendConnectionMessage( | 784 service_ptr_->SendConnectionMessage( |
| 782 std::move(session), std::move(message_request), | 785 std::move(session), std::move(message_request), |
| 783 base::Bind( | 786 base::Bind( |
| 784 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, | 787 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 785 base::Unretained(this))); | 788 base::Unretained(this))); |
| 786 | 789 |
| 787 base::RunLoop run_loop; | 790 base::RunLoop run_loop; |
| 788 base::Callback<void(bool)> send_message_cb; | 791 base::Callback<void(bool)> send_message_cb; |
| 789 PresentationConnectionMessage* test_message = nullptr; | 792 PresentationConnectionMessage* test_message = nullptr; |
| 790 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) | 793 EXPECT_CALL(mock_delegate_, SendMessageRawPtr(_, _, _, _, _)) |
| 791 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), | 794 .WillOnce(DoAll(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit), |
| 792 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); | 795 SaveArg<3>(&test_message), SaveArg<4>(&send_message_cb))); |
| 793 run_loop.Run(); | 796 run_loop.Run(); |
| 794 | 797 |
| 795 EXPECT_FALSE(test_message); | 798 EXPECT_FALSE(test_message); |
| 796 send_message_cb.Run(true); | 799 send_message_cb.Run(true); |
| 797 SaveQuitClosureAndRunLoop(); | 800 SaveQuitClosureAndRunLoop(); |
| 798 } | 801 } |
| 799 | 802 |
| 800 TEST_F(PresentationServiceImplTest, SendBlobData) { | 803 TEST_F(PresentationServiceImplTest, SendBlobData) { |
| 801 const uint8_t buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; | 804 const uint8_t buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07}; |
| 802 std::vector<uint8_t> data; | 805 std::vector<uint8_t> data; |
| 803 data.assign(buffer, buffer + sizeof(buffer)); | 806 data.assign(buffer, buffer + sizeof(buffer)); |
| 804 | 807 |
| 805 blink::mojom::PresentationSessionInfoPtr session( | 808 content::mojom::PresentationSessionInfoPtr session( |
| 806 blink::mojom::PresentationSessionInfo::New()); | 809 content::mojom::PresentationSessionInfo::New()); |
| 807 session->url = presentation_url1_; | 810 session->url = presentation_url1_; |
| 808 session->id = kPresentationId; | 811 session->id = kPresentationId; |
| 809 blink::mojom::ConnectionMessagePtr message_request( | 812 content::mojom::ConnectionMessagePtr message_request( |
| 810 blink::mojom::ConnectionMessage::New()); | 813 content::mojom::ConnectionMessage::New()); |
| 811 message_request->type = blink::mojom::PresentationMessageType::BINARY; | 814 message_request->type = content::mojom::PresentationMessageType::BINARY; |
| 812 message_request->data = data; | 815 message_request->data = data; |
| 813 service_ptr_->SendConnectionMessage( | 816 service_ptr_->SendConnectionMessage( |
| 814 std::move(session), std::move(message_request), | 817 std::move(session), std::move(message_request), |
| 815 base::Bind( | 818 base::Bind( |
| 816 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, | 819 &PresentationServiceImplTest::ExpectSendConnectionMessageCallback, |
| 817 base::Unretained(this))); | 820 base::Unretained(this))); |
| 818 | 821 |
| 819 base::RunLoop run_loop; | 822 base::RunLoop run_loop; |
| 820 base::Callback<void(bool)> send_message_cb; | 823 base::Callback<void(bool)> send_message_cb; |
| 821 PresentationConnectionMessage* test_message = nullptr; | 824 PresentationConnectionMessage* test_message = nullptr; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 865 mock_delegate_.set_screen_availability_listening_supported(false); | 868 mock_delegate_.set_screen_availability_listening_supported(false); |
| 866 base::RunLoop run_loop; | 869 base::RunLoop run_loop; |
| 867 EXPECT_CALL(mock_client_, | 870 EXPECT_CALL(mock_client_, |
| 868 OnScreenAvailabilityNotSupported(presentation_url1_)) | 871 OnScreenAvailabilityNotSupported(presentation_url1_)) |
| 869 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); | 872 .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); |
| 870 ListenForScreenAvailabilityAndWait(presentation_url1_, false); | 873 ListenForScreenAvailabilityAndWait(presentation_url1_, false); |
| 871 run_loop.Run(); | 874 run_loop.Run(); |
| 872 } | 875 } |
| 873 | 876 |
| 874 } // namespace content | 877 } // namespace content |
| OLD | NEW |