| Index: content/browser/presentation/presentation_service_impl.cc
|
| diff --git a/content/browser/presentation/presentation_service_impl.cc b/content/browser/presentation/presentation_service_impl.cc
|
| index 5d20a311e0927bab74e7b86d85622fb8f613ee2b..fbd58267b229a986193ce4f6eced266d6d07bc60 100644
|
| --- a/content/browser/presentation/presentation_service_impl.cc
|
| +++ b/content/browser/presentation/presentation_service_impl.cc
|
| @@ -295,39 +295,53 @@ int PresentationServiceImpl::RegisterJoinSessionCallback(
|
| return request_id;
|
| }
|
|
|
| +void PresentationServiceImpl::ListenForConnectionStateChange(
|
| + const PresentationSessionInfo& connection) {
|
| + if (delegate_) {
|
| + delegate_->ListenForConnectionStateChange(
|
| + render_process_id_, render_frame_id_, connection,
|
| + base::Bind(&PresentationServiceImpl::OnConnectionStateChanged,
|
| + weak_factory_.GetWeakPtr(), connection));
|
| + }
|
| +}
|
| +
|
| void PresentationServiceImpl::OnStartSessionSucceeded(
|
| int request_session_id,
|
| const PresentationSessionInfo& session_info) {
|
| - if (request_session_id == start_session_request_id_) {
|
| - CHECK(pending_start_session_cb_.get());
|
| - pending_start_session_cb_->Run(
|
| - presentation::PresentationSessionInfo::From(session_info),
|
| - presentation::PresentationErrorPtr());
|
| - pending_start_session_cb_.reset();
|
| - start_session_request_id_ = kInvalidRequestSessionId;
|
| - }
|
| + if (request_session_id != start_session_request_id_)
|
| + return;
|
| +
|
| + CHECK(pending_start_session_cb_.get());
|
| + pending_start_session_cb_->Run(
|
| + presentation::PresentationSessionInfo::From(session_info),
|
| + presentation::PresentationErrorPtr());
|
| + ListenForConnectionStateChange(session_info);
|
| + pending_start_session_cb_.reset();
|
| + start_session_request_id_ = kInvalidRequestSessionId;
|
| }
|
|
|
| void PresentationServiceImpl::OnStartSessionError(
|
| int request_session_id,
|
| const PresentationError& error) {
|
| - if (request_session_id == start_session_request_id_) {
|
| - CHECK(pending_start_session_cb_.get());
|
| - pending_start_session_cb_->Run(
|
| - presentation::PresentationSessionInfoPtr(),
|
| - presentation::PresentationError::From(error));
|
| - pending_start_session_cb_.reset();
|
| - start_session_request_id_ = kInvalidRequestSessionId;
|
| - }
|
| + if (request_session_id != start_session_request_id_)
|
| + return;
|
| +
|
| + CHECK(pending_start_session_cb_.get());
|
| + pending_start_session_cb_->Run(presentation::PresentationSessionInfoPtr(),
|
| + presentation::PresentationError::From(error));
|
| + pending_start_session_cb_.reset();
|
| + start_session_request_id_ = kInvalidRequestSessionId;
|
| }
|
|
|
| void PresentationServiceImpl::OnJoinSessionSucceeded(
|
| int request_session_id,
|
| const PresentationSessionInfo& session_info) {
|
| - RunAndEraseJoinSessionMojoCallback(
|
| - request_session_id,
|
| - presentation::PresentationSessionInfo::From(session_info),
|
| - presentation::PresentationErrorPtr());
|
| + if (RunAndEraseJoinSessionMojoCallback(
|
| + request_session_id,
|
| + presentation::PresentationSessionInfo::From(session_info),
|
| + presentation::PresentationErrorPtr())) {
|
| + ListenForConnectionStateChange(session_info);
|
| + }
|
| }
|
|
|
| void PresentationServiceImpl::OnJoinSessionError(
|
| @@ -339,17 +353,18 @@ void PresentationServiceImpl::OnJoinSessionError(
|
| presentation::PresentationError::From(error));
|
| }
|
|
|
| -void PresentationServiceImpl::RunAndEraseJoinSessionMojoCallback(
|
| +bool PresentationServiceImpl::RunAndEraseJoinSessionMojoCallback(
|
| int request_session_id,
|
| presentation::PresentationSessionInfoPtr session,
|
| presentation::PresentationErrorPtr error) {
|
| auto it = pending_join_session_cbs_.find(request_session_id);
|
| if (it == pending_join_session_cbs_.end())
|
| - return;
|
| + return false;
|
|
|
| DCHECK(it->second.get());
|
| it->second->Run(session.Pass(), error.Pass());
|
| pending_join_session_cbs_.erase(it);
|
| + return true;
|
| }
|
|
|
| void PresentationServiceImpl::SetDefaultPresentationURL(
|
| @@ -409,23 +424,13 @@ void PresentationServiceImpl::CloseSession(
|
| presentation_id);
|
| }
|
|
|
| -void PresentationServiceImpl::ListenForSessionStateChange() {
|
| - if (!delegate_)
|
| - return;
|
| -
|
| - delegate_->ListenForSessionStateChange(
|
| - render_process_id_, render_frame_id_,
|
| - base::Bind(&PresentationServiceImpl::OnSessionStateChanged,
|
| - weak_factory_.GetWeakPtr()));
|
| -}
|
| -
|
| -void PresentationServiceImpl::OnSessionStateChanged(
|
| - const PresentationSessionInfo& session_info,
|
| - PresentationConnectionState session_state) {
|
| +void PresentationServiceImpl::OnConnectionStateChanged(
|
| + const PresentationSessionInfo& connection,
|
| + PresentationConnectionState state) {
|
| DCHECK(client_.get());
|
| - client_->OnSessionStateChanged(
|
| - presentation::PresentationSessionInfo::From(session_info),
|
| - PresentationConnectionStateToMojo(session_state));
|
| + client_->OnConnectionStateChanged(
|
| + presentation::PresentationSessionInfo::From(connection),
|
| + PresentationConnectionStateToMojo(state));
|
| }
|
|
|
| bool PresentationServiceImpl::FrameMatches(
|
| @@ -536,10 +541,11 @@ void PresentationServiceImpl::OnDelegateDestroyed() {
|
| }
|
|
|
| void PresentationServiceImpl::OnDefaultPresentationStarted(
|
| - const PresentationSessionInfo& session_info) {
|
| + const PresentationSessionInfo& connection) {
|
| DCHECK(client_.get());
|
| client_->OnDefaultSessionStarted(
|
| - presentation::PresentationSessionInfo::From(session_info));
|
| + presentation::PresentationSessionInfo::From(connection));
|
| + ListenForConnectionStateChange(connection);
|
| }
|
|
|
| PresentationServiceImpl::ScreenAvailabilityListenerImpl
|
|
|