| 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 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 const NewSessionCallback& callback) { | 286 const NewSessionCallback& callback) { |
| 287 if (pending_join_session_cbs_.size() >= kMaxNumQueuedSessionRequests) | 287 if (pending_join_session_cbs_.size() >= kMaxNumQueuedSessionRequests) |
| 288 return kInvalidRequestSessionId; | 288 return kInvalidRequestSessionId; |
| 289 | 289 |
| 290 int request_id = GetNextRequestSessionId(); | 290 int request_id = GetNextRequestSessionId(); |
| 291 pending_join_session_cbs_[request_id].reset( | 291 pending_join_session_cbs_[request_id].reset( |
| 292 new NewSessionCallbackWrapper(callback)); | 292 new NewSessionCallbackWrapper(callback)); |
| 293 return request_id; | 293 return request_id; |
| 294 } | 294 } |
| 295 | 295 |
| 296 void PresentationServiceImpl::ListenForConnectionStateChangeAndChangeState( | 296 void PresentationServiceImpl::ListenForConnectionStateChange( |
| 297 const PresentationSessionInfo& connection) { | 297 const PresentationSessionInfo& connection) { |
| 298 if (controller_delegate_) { | 298 if (controller_delegate_) { |
| 299 controller_delegate_->ListenForConnectionStateChange( | 299 controller_delegate_->ListenForConnectionStateChange( |
| 300 render_process_id_, render_frame_id_, connection, | 300 render_process_id_, render_frame_id_, connection, |
| 301 base::Bind(&PresentationServiceImpl::OnConnectionStateChanged, | 301 base::Bind(&PresentationServiceImpl::OnConnectionStateChanged, |
| 302 weak_factory_.GetWeakPtr(), connection)); | 302 weak_factory_.GetWeakPtr(), connection)); |
| 303 OnConnectionStateChanged(connection, | |
| 304 PresentationConnectionStateChangeInfo( | |
| 305 PRESENTATION_CONNECTION_STATE_CONNECTED)); | |
| 306 } | 303 } |
| 307 } | 304 } |
| 308 | 305 |
| 309 void PresentationServiceImpl::OnStartSessionSucceeded( | 306 void PresentationServiceImpl::OnStartSessionSucceeded( |
| 310 int request_session_id, | 307 int request_session_id, |
| 311 const PresentationSessionInfo& session_info) { | 308 const PresentationSessionInfo& session_info) { |
| 312 if (request_session_id != start_session_request_id_) | 309 if (request_session_id != start_session_request_id_) |
| 313 return; | 310 return; |
| 314 | 311 |
| 315 CHECK(pending_start_session_cb_.get()); | 312 CHECK(pending_start_session_cb_.get()); |
| 316 pending_start_session_cb_->Run( | 313 pending_start_session_cb_->Run( |
| 317 blink::mojom::PresentationSessionInfo::From(session_info), | 314 blink::mojom::PresentationSessionInfo::From(session_info), |
| 318 blink::mojom::PresentationErrorPtr()); | 315 blink::mojom::PresentationErrorPtr()); |
| 319 ListenForConnectionStateChangeAndChangeState(session_info); | 316 ListenForConnectionStateChange(session_info); |
| 320 pending_start_session_cb_.reset(); | 317 pending_start_session_cb_.reset(); |
| 321 start_session_request_id_ = kInvalidRequestSessionId; | 318 start_session_request_id_ = kInvalidRequestSessionId; |
| 322 } | 319 } |
| 323 | 320 |
| 324 void PresentationServiceImpl::OnStartSessionError( | 321 void PresentationServiceImpl::OnStartSessionError( |
| 325 int request_session_id, | 322 int request_session_id, |
| 326 const PresentationError& error) { | 323 const PresentationError& error) { |
| 327 if (request_session_id != start_session_request_id_) | 324 if (request_session_id != start_session_request_id_) |
| 328 return; | 325 return; |
| 329 | 326 |
| 330 CHECK(pending_start_session_cb_.get()); | 327 CHECK(pending_start_session_cb_.get()); |
| 331 pending_start_session_cb_->Run(blink::mojom::PresentationSessionInfoPtr(), | 328 pending_start_session_cb_->Run(blink::mojom::PresentationSessionInfoPtr(), |
| 332 blink::mojom::PresentationError::From(error)); | 329 blink::mojom::PresentationError::From(error)); |
| 333 pending_start_session_cb_.reset(); | 330 pending_start_session_cb_.reset(); |
| 334 start_session_request_id_ = kInvalidRequestSessionId; | 331 start_session_request_id_ = kInvalidRequestSessionId; |
| 335 } | 332 } |
| 336 | 333 |
| 337 void PresentationServiceImpl::OnJoinSessionSucceeded( | 334 void PresentationServiceImpl::OnJoinSessionSucceeded( |
| 338 int request_session_id, | 335 int request_session_id, |
| 339 const PresentationSessionInfo& session_info) { | 336 const PresentationSessionInfo& session_info) { |
| 340 if (RunAndEraseJoinSessionMojoCallback( | 337 if (RunAndEraseJoinSessionMojoCallback( |
| 341 request_session_id, | 338 request_session_id, |
| 342 blink::mojom::PresentationSessionInfo::From(session_info), | 339 blink::mojom::PresentationSessionInfo::From(session_info), |
| 343 blink::mojom::PresentationErrorPtr())) { | 340 blink::mojom::PresentationErrorPtr())) { |
| 344 ListenForConnectionStateChangeAndChangeState(session_info); | 341 ListenForConnectionStateChange(session_info); |
| 345 } | 342 } |
| 346 } | 343 } |
| 347 | 344 |
| 348 void PresentationServiceImpl::OnJoinSessionError( | 345 void PresentationServiceImpl::OnJoinSessionError( |
| 349 int request_session_id, | 346 int request_session_id, |
| 350 const PresentationError& error) { | 347 const PresentationError& error) { |
| 351 RunAndEraseJoinSessionMojoCallback( | 348 RunAndEraseJoinSessionMojoCallback( |
| 352 request_session_id, blink::mojom::PresentationSessionInfoPtr(), | 349 request_session_id, blink::mojom::PresentationSessionInfoPtr(), |
| 353 blink::mojom::PresentationError::From(error)); | 350 blink::mojom::PresentationError::From(error)); |
| 354 } | 351 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 381 render_process_id_, render_frame_id_, presentation_urls, | 378 render_process_id_, render_frame_id_, presentation_urls, |
| 382 base::Bind(&PresentationServiceImpl::OnDefaultPresentationStarted, | 379 base::Bind(&PresentationServiceImpl::OnDefaultPresentationStarted, |
| 383 weak_factory_.GetWeakPtr())); | 380 weak_factory_.GetWeakPtr())); |
| 384 } | 381 } |
| 385 | 382 |
| 386 void PresentationServiceImpl::SendConnectionMessage( | 383 void PresentationServiceImpl::SendConnectionMessage( |
| 387 blink::mojom::PresentationSessionInfoPtr session, | 384 blink::mojom::PresentationSessionInfoPtr session, |
| 388 blink::mojom::ConnectionMessagePtr connection_message, | 385 blink::mojom::ConnectionMessagePtr connection_message, |
| 389 const SendConnectionMessageCallback& callback) { | 386 const SendConnectionMessageCallback& callback) { |
| 390 DVLOG(2) << "SendConnectionMessage" | 387 DVLOG(2) << "SendConnectionMessage" |
| 391 << " [id]: " << session->id; | 388 << " [presentation id]: " << session->id; |
| 392 DCHECK(!connection_message.is_null()); | 389 DCHECK(!connection_message.is_null()); |
| 393 // send_message_callback_ should be null by now, otherwise resetting of | 390 // send_message_callback_ should be null by now, otherwise resetting of |
| 394 // send_message_callback_ with new callback will drop the old callback. | 391 // send_message_callback_ with new callback will drop the old callback. |
| 395 if (!controller_delegate_ || send_message_callback_) { | 392 if (!controller_delegate_ || send_message_callback_) { |
| 396 callback.Run(false); | 393 callback.Run(false); |
| 397 return; | 394 return; |
| 398 } | 395 } |
| 399 | 396 |
| 400 send_message_callback_.reset(new SendConnectionMessageCallback(callback)); | 397 send_message_callback_.reset(new SendConnectionMessageCallback(callback)); |
| 401 controller_delegate_->SendMessage( | 398 controller_delegate_->SendMessage( |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 void PresentationServiceImpl::SetPresentationConnection( | 480 void PresentationServiceImpl::SetPresentationConnection( |
| 484 blink::mojom::PresentationSessionInfoPtr session, | 481 blink::mojom::PresentationSessionInfoPtr session, |
| 485 blink::mojom::PresentationConnectionPtr controller_connection_ptr, | 482 blink::mojom::PresentationConnectionPtr controller_connection_ptr, |
| 486 blink::mojom::PresentationConnectionRequest receiver_connection_request) { | 483 blink::mojom::PresentationConnectionRequest receiver_connection_request) { |
| 487 DVLOG(2) << "SetPresentationConnection"; | 484 DVLOG(2) << "SetPresentationConnection"; |
| 488 | 485 |
| 489 if (!controller_delegate_) | 486 if (!controller_delegate_) |
| 490 return; | 487 return; |
| 491 | 488 |
| 492 PresentationSessionInfo session_info(session.To<PresentationSessionInfo>()); | 489 PresentationSessionInfo session_info(session.To<PresentationSessionInfo>()); |
| 493 controller_delegate_->ConnectToOffscreenPresentation( | 490 controller_delegate_->ConnectToPresentation( |
| 494 render_process_id_, render_frame_id_, session_info, | 491 render_process_id_, render_frame_id_, session_info, |
| 495 std::move(controller_connection_ptr), | 492 std::move(controller_connection_ptr), |
| 496 std::move(receiver_connection_request)); | 493 std::move(receiver_connection_request)); |
| 497 } | 494 } |
| 498 | 495 |
| 499 void PresentationServiceImpl::OnConnectionMessages( | 496 void PresentationServiceImpl::OnConnectionMessages( |
| 500 const PresentationSessionInfo& session, | 497 const PresentationSessionInfo& session, |
| 501 const std::vector<std::unique_ptr<PresentationConnectionMessage>>& messages, | 498 const std::vector<std::unique_ptr<PresentationConnectionMessage>>& messages, |
| 502 bool pass_ownership) { | 499 bool pass_ownership) { |
| 503 DCHECK(client_); | 500 DCHECK(client_); |
| 504 | 501 |
| 505 DVLOG(2) << "OnConnectionMessages" | 502 DVLOG(2) << "OnConnectionMessages" |
| 506 << " [id]: " << session.presentation_id; | 503 << " [presentation_id]: " << session.presentation_id; |
| 507 std::vector<blink::mojom::ConnectionMessagePtr> mojo_messages( | 504 std::vector<blink::mojom::ConnectionMessagePtr> mojo_messages( |
| 508 messages.size()); | 505 messages.size()); |
| 509 std::transform( | 506 std::transform( |
| 510 messages.begin(), messages.end(), mojo_messages.begin(), | 507 messages.begin(), messages.end(), mojo_messages.begin(), |
| 511 [pass_ownership]( | 508 [pass_ownership]( |
| 512 const std::unique_ptr<PresentationConnectionMessage>& message) { | 509 const std::unique_ptr<PresentationConnectionMessage>& message) { |
| 513 return ToMojoConnectionMessage(message.get(), pass_ownership); | 510 return ToMojoConnectionMessage(message.get(), pass_ownership); |
| 514 }); | 511 }); |
| 515 | 512 |
| 516 client_->OnConnectionMessagesReceived( | 513 client_->OnConnectionMessagesReceived( |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 607 controller_delegate_ = nullptr; | 604 controller_delegate_ = nullptr; |
| 608 receiver_delegate_ = nullptr; | 605 receiver_delegate_ = nullptr; |
| 609 Reset(); | 606 Reset(); |
| 610 } | 607 } |
| 611 | 608 |
| 612 void PresentationServiceImpl::OnDefaultPresentationStarted( | 609 void PresentationServiceImpl::OnDefaultPresentationStarted( |
| 613 const PresentationSessionInfo& connection) { | 610 const PresentationSessionInfo& connection) { |
| 614 DCHECK(client_.get()); | 611 DCHECK(client_.get()); |
| 615 client_->OnDefaultSessionStarted( | 612 client_->OnDefaultSessionStarted( |
| 616 blink::mojom::PresentationSessionInfo::From(connection)); | 613 blink::mojom::PresentationSessionInfo::From(connection)); |
| 617 ListenForConnectionStateChangeAndChangeState(connection); | 614 ListenForConnectionStateChange(connection); |
| 618 } | 615 } |
| 619 | 616 |
| 620 PresentationServiceImpl::ScreenAvailabilityListenerImpl:: | 617 PresentationServiceImpl::ScreenAvailabilityListenerImpl:: |
| 621 ScreenAvailabilityListenerImpl(const GURL& availability_url, | 618 ScreenAvailabilityListenerImpl(const GURL& availability_url, |
| 622 PresentationServiceImpl* service) | 619 PresentationServiceImpl* service) |
| 623 : availability_url_(availability_url), service_(service) { | 620 : availability_url_(availability_url), service_(service) { |
| 624 DCHECK(service_); | 621 DCHECK(service_); |
| 625 DCHECK(service_->client_.get()); | 622 DCHECK(service_->client_.get()); |
| 626 } | 623 } |
| 627 | 624 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 657 | 654 |
| 658 void PresentationServiceImpl::NewSessionCallbackWrapper::Run( | 655 void PresentationServiceImpl::NewSessionCallbackWrapper::Run( |
| 659 blink::mojom::PresentationSessionInfoPtr session, | 656 blink::mojom::PresentationSessionInfoPtr session, |
| 660 blink::mojom::PresentationErrorPtr error) { | 657 blink::mojom::PresentationErrorPtr error) { |
| 661 DCHECK(!callback_.is_null()); | 658 DCHECK(!callback_.is_null()); |
| 662 callback_.Run(std::move(session), std::move(error)); | 659 callback_.Run(std::move(session), std::move(error)); |
| 663 callback_.Reset(); | 660 callback_.Reset(); |
| 664 } | 661 } |
| 665 | 662 |
| 666 } // namespace content | 663 } // namespace content |
| OLD | NEW |