Chromium Code Reviews| Index: content/renderer/presentation/presentation_dispatcher.cc |
| diff --git a/content/renderer/presentation/presentation_dispatcher.cc b/content/renderer/presentation/presentation_dispatcher.cc |
| index 89fd11db4175e96f998dda9824aa2e26707e4c9c..ee4d7733d669d4c66fa0d464302bdae2502becee 100644 |
| --- a/content/renderer/presentation/presentation_dispatcher.cc |
| +++ b/content/renderer/presentation/presentation_dispatcher.cc |
| @@ -224,12 +224,12 @@ 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); |
| + static_cast<const PresentationConnectionProxy*>(request->connection_proxy) |
|
imcheng
2017/01/31 01:53:25
Hmm... it seems a bit odd that we have to do this
zhaobin
2017/01/31 18:44:16
Done.
|
| + ->SendConnectionMessage( |
| + std::move(request->message), |
| + base::Bind(&PresentationDispatcher::HandleSendMessageRequests, |
| + base::Unretained(this))); |
| } |
| void PresentationDispatcher::HandleSendMessageRequests(bool success) { |
| @@ -253,6 +253,20 @@ void PresentationDispatcher::HandleSendMessageRequests(bool success) { |
| } |
| } |
| +void PresentationDispatcher::SetControllerConnection( |
| + blink::mojom::PresentationSessionInfoPtr 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.Clone(), controller_connection_proxy->Bind(), |
| + controller_connection_proxy->MakeRemoteRequest()); |
| +} |
| + |
| void PresentationDispatcher::closeSession( |
| const blink::WebURL& presentationUrl, |
| const blink::WebString& presentationId) { |
| @@ -488,9 +502,8 @@ void PresentationDispatcher::OnDefaultSessionStarted( |
| presentation_service_->ListenForConnectionMessages(session_info.Clone()); |
| auto* connection = controller_->didStartDefaultSession( |
| mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info)); |
| - auto* controller_connection_proxy = |
| - new ControllerConnectionProxy(connection); |
| - connection->bindProxy(base::WrapUnique(controller_connection_proxy)); |
| + if (connection) |
| + SetControllerConnection(session_info.Clone(), connection); |
| } |
| } |
| @@ -511,11 +524,7 @@ void PresentationDispatcher::OnSessionCreated( |
| presentation_service_->ListenForConnectionMessages(session_info.Clone()); |
| callback->onSuccess( |
| mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info)); |
| - |
| - auto* connection = callback->getConnection(); |
| - DCHECK(connection); |
| - auto* controller_connection_proxy = new ControllerConnectionProxy(connection); |
| - connection->bindProxy(base::WrapUnique(controller_connection_proxy)); |
| + SetControllerConnection(session_info.Clone(), callback->getConnection()); |
| } |
| void PresentationDispatcher::OnReceiverConnectionAvailable( |
| @@ -523,6 +532,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( |