Index: content/renderer/presentation/presentation_dispatcher.cc |
diff --git a/content/renderer/presentation/presentation_dispatcher.cc b/content/renderer/presentation/presentation_dispatcher.cc |
index eac8c3bcba52ba169bd262636a9def60ac80b8ae..2743b5d563a1033130166ce77a45b00676ff5738 100644 |
--- a/content/renderer/presentation/presentation_dispatcher.cc |
+++ b/content/renderer/presentation/presentation_dispatcher.cc |
@@ -214,12 +214,14 @@ void PresentationDispatcher::sendBlobData( |
} |
void PresentationDispatcher::DoSendMessage(SendMessageRequest* request) { |
- ConnectToPresentationServiceIfNeeded(); |
- |
- presentation_service_->SendConnectionMessage( |
- std::move(request->session_info), std::move(request->message), |
- base::Bind(&PresentationDispatcher::HandleSendMessageRequests, |
- base::Unretained(this))); |
+ DCHECK(request->connection_proxy); |
+ // TODO(crbug.com/684116): Remove static_cast after moving message queue logic |
+ // from PresentationDispatcher to PresentationConnectionProxy. |
+ static_cast<const PresentationConnectionProxy*>(request->connection_proxy) |
+ ->SendConnectionMessage( |
+ std::move(request->message), |
+ base::Bind(&PresentationDispatcher::HandleSendMessageRequests, |
+ base::Unretained(this))); |
} |
void PresentationDispatcher::HandleSendMessageRequests(bool success) { |
@@ -243,6 +245,20 @@ void PresentationDispatcher::HandleSendMessageRequests(bool success) { |
} |
} |
+void PresentationDispatcher::SetControllerConnection( |
+ const PresentationSessionInfo& session_info, |
+ blink::WebPresentationConnection* connection) { |
+ DCHECK(connection); |
+ |
+ auto* controller_connection_proxy = new ControllerConnectionProxy(connection); |
+ connection->bindProxy(base::WrapUnique(controller_connection_proxy)); |
+ |
+ ConnectToPresentationServiceIfNeeded(); |
+ presentation_service_->SetPresentationConnection( |
+ session_info, controller_connection_proxy->Bind(), |
+ controller_connection_proxy->MakeRemoteRequest()); |
+} |
+ |
void PresentationDispatcher::closeSession( |
const blink::WebURL& presentationUrl, |
const blink::WebString& presentationId) { |
@@ -474,13 +490,19 @@ void PresentationDispatcher::OnDefaultSessionStarted( |
if (!controller_) |
return; |
- presentation_service_->ListenForConnectionMessages(session_info); |
auto* connection = |
controller_->didStartDefaultSession(blink::WebPresentationSessionInfo( |
session_info.presentation_url, |
blink::WebString::fromUTF8(session_info.presentation_id))); |
- connection->bindProxy( |
- base::MakeUnique<ControllerConnectionProxy>(connection)); |
+ |
+ if (connection) { |
+ SetControllerConnection(session_info, connection); |
+ // Change blink connection state to 'connected' before listening to |
+ // connection message. Remove ListenForConnectionMessage() after |
+ // TODO(crbug.com/687011): use BrowserPresentationConnectionProxy to send |
+ // message from route to blink connection. |
+ presentation_service_->ListenForConnectionMessages(session_info); |
+ } |
} |
void PresentationDispatcher::OnSessionCreated( |
@@ -497,14 +519,15 @@ void PresentationDispatcher::OnSessionCreated( |
} |
DCHECK(session_info); |
- presentation_service_->ListenForConnectionMessages(session_info.value()); |
callback->onSuccess(blink::WebPresentationSessionInfo( |
session_info->presentation_url, |
blink::WebString::fromUTF8(session_info->presentation_id))); |
- |
- auto* connection = callback->getConnection(); |
- connection->bindProxy( |
- base::MakeUnique<ControllerConnectionProxy>(connection)); |
+ // Change blink connection state to 'connected' before listening to |
+ // connection message. Remove ListenForConnectionMessage() after |
+ // TODO(crbug.com/687011): use BrowserPresentationConnectionProxy to send |
+ // message from route to blink connection. |
+ SetControllerConnection(session_info.value(), callback->getConnection()); |
+ presentation_service_->ListenForConnectionMessages(session_info.value()); |
} |
void PresentationDispatcher::OnReceiverConnectionAvailable( |
@@ -512,6 +535,7 @@ void PresentationDispatcher::OnReceiverConnectionAvailable( |
blink::mojom::PresentationConnectionPtr controller_connection_ptr, |
blink::mojom::PresentationConnectionRequest receiver_connection_request) { |
DCHECK(receiver_); |
+ |
// Bind receiver_connection_proxy with PresentationConnection in receiver |
// page. |
auto* connection = receiver_->onReceiverConnectionAvailable( |