| Index: content/renderer/presentation/presentation_dispatcher.cc
|
| diff --git a/content/renderer/presentation/presentation_dispatcher.cc b/content/renderer/presentation/presentation_dispatcher.cc
|
| index ce44f7fbb1b9ac11508e48b943b235472cd07afe..e1fc44ab90cab04bcc5485ebe1b24ae5c7e4c944 100644
|
| --- a/content/renderer/presentation/presentation_dispatcher.cc
|
| +++ b/content/renderer/presentation/presentation_dispatcher.cc
|
| @@ -25,8 +25,8 @@
|
| #include "third_party/WebKit/public/platform/modules/presentation/WebPresentationConnectionCallbacks.h"
|
| #include "third_party/WebKit/public/platform/modules/presentation/WebPresentationController.h"
|
| #include "third_party/WebKit/public/platform/modules/presentation/WebPresentationError.h"
|
| +#include "third_party/WebKit/public/platform/modules/presentation/WebPresentationInfo.h"
|
| #include "third_party/WebKit/public/platform/modules/presentation/WebPresentationReceiver.h"
|
| -#include "third_party/WebKit/public/platform/modules/presentation/WebPresentationSessionInfo.h"
|
| #include "third_party/WebKit/public/platform/modules/presentation/presentation.mojom.h"
|
| #include "third_party/WebKit/public/web/WebLocalFrame.h"
|
| #include "url/gurl.h"
|
| @@ -40,8 +40,9 @@ blink::WebPresentationError::ErrorType GetWebPresentationErrorType(
|
| switch (errorType) {
|
| case PresentationErrorType::PRESENTATION_ERROR_NO_AVAILABLE_SCREENS:
|
| return blink::WebPresentationError::ErrorTypeNoAvailableScreens;
|
| - case PresentationErrorType::PRESENTATION_ERROR_SESSION_REQUEST_CANCELLED:
|
| - return blink::WebPresentationError::ErrorTypeSessionRequestCancelled;
|
| + case PresentationErrorType::
|
| + PRESENTATION_ERROR_PRESENTATION_REQUEST_CANCELLED:
|
| + return blink::WebPresentationError::ErrorTypePresentationRequestCancelled;
|
| case PresentationErrorType::PRESENTATION_ERROR_NO_PRESENTATION_FOUND:
|
| return blink::WebPresentationError::ErrorTypeNoPresentationFound;
|
| case PresentationErrorType::PRESENTATION_ERROR_PREVIOUS_START_IN_PROGRESS:
|
| @@ -53,8 +54,8 @@ blink::WebPresentationError::ErrorType GetWebPresentationErrorType(
|
| }
|
|
|
| blink::WebPresentationConnectionState GetWebPresentationConnectionState(
|
| - PresentationConnectionState sessionState) {
|
| - switch (sessionState) {
|
| + PresentationConnectionState connectionState) {
|
| + switch (connectionState) {
|
| case PresentationConnectionState::PRESENTATION_CONNECTION_STATE_CONNECTING:
|
| return blink::WebPresentationConnectionState::Connecting;
|
| case PresentationConnectionState::PRESENTATION_CONNECTION_STATE_CONNECTED:
|
| @@ -89,6 +90,8 @@ GetWebPresentationConnectionCloseReason(
|
| }
|
| } // namespace
|
|
|
| +// TODO(mfoltz): Reorder definitions to match presentation_dispatcher.h.
|
| +
|
| PresentationDispatcher::PresentationDispatcher(RenderFrame* render_frame)
|
| : RenderFrameObserver(render_frame),
|
| controller_(nullptr),
|
| @@ -111,7 +114,7 @@ void PresentationDispatcher::setController(
|
| // will know about the frame being detached anyway.
|
| }
|
|
|
| -void PresentationDispatcher::startSession(
|
| +void PresentationDispatcher::startPresentation(
|
| const blink::WebVector<blink::WebURL>& presentationUrls,
|
| std::unique_ptr<blink::WebPresentationConnectionCallbacks> callback) {
|
| DCHECK(callback);
|
| @@ -122,14 +125,14 @@ void PresentationDispatcher::startSession(
|
| urls.push_back(url);
|
|
|
| // The dispatcher owns the service so |this| will be valid when
|
| - // OnSessionCreated() is called. |callback| needs to be alive and also needs
|
| - // to be destroyed so we transfer its ownership to the mojo callback.
|
| - presentation_service_->StartSession(
|
| - urls, base::Bind(&PresentationDispatcher::OnSessionCreated,
|
| + // OnConnectionCreated() is called. |callback| needs to be alive and also
|
| + // needs to be destroyed so we transfer its ownership to the mojo callback.
|
| + presentation_service_->StartPresentation(
|
| + urls, base::Bind(&PresentationDispatcher::OnConnectionCreated,
|
| base::Unretained(this), base::Passed(&callback)));
|
| }
|
|
|
| -void PresentationDispatcher::joinSession(
|
| +void PresentationDispatcher::reconnectPresentation(
|
| const blink::WebVector<blink::WebURL>& presentationUrls,
|
| const blink::WebString& presentationId,
|
| std::unique_ptr<blink::WebPresentationConnectionCallbacks> callback) {
|
| @@ -141,11 +144,11 @@ void PresentationDispatcher::joinSession(
|
| urls.push_back(url);
|
|
|
| // The dispatcher owns the service so |this| will be valid when
|
| - // OnSessionCreated() is called. |callback| needs to be alive and also needs
|
| - // to be destroyed so we transfer its ownership to the mojo callback.
|
| - presentation_service_->JoinSession(
|
| + // OnConnectionCreated() is called. |callback| needs to be alive and also
|
| + // needs to be destroyed so we transfer its ownership to the mojo callback.
|
| + presentation_service_->ReconnectPresentation(
|
| urls, presentationId.utf8(),
|
| - base::Bind(&PresentationDispatcher::OnSessionCreated,
|
| + base::Bind(&PresentationDispatcher::OnConnectionCreated,
|
| base::Unretained(this), base::Passed(&callback)));
|
| }
|
|
|
| @@ -169,6 +172,18 @@ void PresentationDispatcher::sendString(
|
| DoSendMessage(message_request_queue_.front().get());
|
| }
|
|
|
| +void PresentationDispatcher::terminatePresentation(
|
| + const blink::WebURL& presentationUrl,
|
| + const blink::WebString& presentationId) {
|
| + if (receiver_) {
|
| + receiver_->terminateConnection();
|
| + return;
|
| + }
|
| +
|
| + ConnectToPresentationServiceIfNeeded();
|
| + presentation_service_->Terminate(presentationUrl, presentationId.utf8());
|
| +}
|
| +
|
| void PresentationDispatcher::sendArrayBuffer(
|
| const blink::WebURL& presentationUrl,
|
| const blink::WebString& presentationId,
|
| @@ -209,6 +224,26 @@ void PresentationDispatcher::sendBlobData(
|
| DoSendMessage(message_request_queue_.front().get());
|
| }
|
|
|
| +void PresentationDispatcher::closeConnection(
|
| + const blink::WebURL& presentationUrl,
|
| + const blink::WebString& presentationId,
|
| + const blink::WebPresentationConnectionProxy* connection_proxy) {
|
| + message_request_queue_.erase(
|
| + std::remove_if(message_request_queue_.begin(),
|
| + message_request_queue_.end(),
|
| + [&connection_proxy](
|
| + const std::unique_ptr<SendMessageRequest>& request) {
|
| + return request->connection_proxy == connection_proxy;
|
| + }),
|
| + message_request_queue_.end());
|
| +
|
| + connection_proxy->close();
|
| +
|
| + ConnectToPresentationServiceIfNeeded();
|
| + presentation_service_->CloseConnection(presentationUrl,
|
| + presentationId.utf8());
|
| +}
|
| +
|
| void PresentationDispatcher::DoSendMessage(SendMessageRequest* request) {
|
| DCHECK(request->connection_proxy);
|
| // TODO(crbug.com/684116): Remove static_cast after moving message queue logic
|
| @@ -242,7 +277,7 @@ void PresentationDispatcher::HandleSendMessageRequests(bool success) {
|
| }
|
|
|
| void PresentationDispatcher::SetControllerConnection(
|
| - const PresentationSessionInfo& session_info,
|
| + const PresentationInfo& presentation_info,
|
| blink::WebPresentationConnection* connection) {
|
| DCHECK(connection);
|
|
|
| @@ -251,42 +286,10 @@ void PresentationDispatcher::SetControllerConnection(
|
|
|
| ConnectToPresentationServiceIfNeeded();
|
| presentation_service_->SetPresentationConnection(
|
| - session_info, controller_connection_proxy->Bind(),
|
| + presentation_info, controller_connection_proxy->Bind(),
|
| controller_connection_proxy->MakeRemoteRequest());
|
| }
|
|
|
| -void PresentationDispatcher::closeSession(
|
| - const blink::WebURL& presentationUrl,
|
| - const blink::WebString& presentationId,
|
| - const blink::WebPresentationConnectionProxy* connection_proxy) {
|
| - message_request_queue_.erase(
|
| - std::remove_if(message_request_queue_.begin(),
|
| - message_request_queue_.end(),
|
| - [&connection_proxy](
|
| - const std::unique_ptr<SendMessageRequest>& request) {
|
| - return request->connection_proxy == connection_proxy;
|
| - }),
|
| - message_request_queue_.end());
|
| -
|
| - connection_proxy->close();
|
| -
|
| - ConnectToPresentationServiceIfNeeded();
|
| - presentation_service_->CloseConnection(presentationUrl,
|
| - presentationId.utf8());
|
| -}
|
| -
|
| -void PresentationDispatcher::terminateConnection(
|
| - const blink::WebURL& presentationUrl,
|
| - const blink::WebString& presentationId) {
|
| - if (receiver_) {
|
| - receiver_->terminateConnection();
|
| - return;
|
| - }
|
| -
|
| - ConnectToPresentationServiceIfNeeded();
|
| - presentation_service_->Terminate(presentationUrl, presentationId.utf8());
|
| -}
|
| -
|
| void PresentationDispatcher::getAvailability(
|
| const blink::WebVector<blink::WebURL>& availabilityUrls,
|
| std::unique_ptr<blink::WebPresentationAvailabilityCallbacks> callback) {
|
| @@ -405,7 +408,7 @@ void PresentationDispatcher::WidgetWillClose() {
|
| if (!receiver_)
|
| return;
|
|
|
| - receiver_->didChangeSessionState(
|
| + receiver_->didChangeConnectionState(
|
| blink::WebPresentationConnectionState::Terminated);
|
| }
|
|
|
| @@ -473,7 +476,7 @@ void PresentationDispatcher::OnScreenAvailabilityNotSupported(const GURL& url) {
|
| const blink::WebString& not_supported_error = blink::WebString::fromUTF8(
|
| "getAvailability() isn't supported at the moment. It can be due to "
|
| "a permanent or temporary system limitation. It is recommended to "
|
| - "try to blindly start a session in that case.");
|
| + "try to blindly start a presentation in that case.");
|
|
|
| std::set<AvailabilityListener*> modified_listeners;
|
| for (auto& listener : availability_set_) {
|
| @@ -506,63 +509,63 @@ void PresentationDispatcher::OnScreenAvailabilityNotSupported(const GURL& url) {
|
| TryRemoveAvailabilityListener(listener);
|
| }
|
|
|
| -void PresentationDispatcher::OnDefaultSessionStarted(
|
| - const PresentationSessionInfo& session_info) {
|
| +void PresentationDispatcher::OnDefaultPresentationStarted(
|
| + const PresentationInfo& presentation_info) {
|
| if (!controller_)
|
| return;
|
|
|
| auto* connection =
|
| - controller_->didStartDefaultSession(blink::WebPresentationSessionInfo(
|
| - session_info.presentation_url,
|
| - blink::WebString::fromUTF8(session_info.presentation_id)));
|
| + controller_->didStartDefaultPresentation(blink::WebPresentationInfo(
|
| + presentation_info.presentation_url,
|
| + blink::WebString::fromUTF8(presentation_info.presentation_id)));
|
|
|
| if (connection) {
|
| - SetControllerConnection(session_info, connection);
|
| + SetControllerConnection(presentation_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);
|
| + presentation_service_->ListenForConnectionMessages(presentation_info);
|
| }
|
| }
|
|
|
| -void PresentationDispatcher::OnSessionCreated(
|
| +void PresentationDispatcher::OnConnectionCreated(
|
| std::unique_ptr<blink::WebPresentationConnectionCallbacks> callback,
|
| - const base::Optional<PresentationSessionInfo>& session_info,
|
| + const base::Optional<PresentationInfo>& presentation_info,
|
| const base::Optional<PresentationError>& error) {
|
| DCHECK(callback);
|
| if (error) {
|
| - DCHECK(!session_info);
|
| + DCHECK(!presentation_info);
|
| callback->onError(blink::WebPresentationError(
|
| GetWebPresentationErrorType(error->error_type),
|
| blink::WebString::fromUTF8(error->message)));
|
| return;
|
| }
|
|
|
| - DCHECK(session_info);
|
| - callback->onSuccess(blink::WebPresentationSessionInfo(
|
| - session_info->presentation_url,
|
| - blink::WebString::fromUTF8(session_info->presentation_id)));
|
| + DCHECK(presentation_info);
|
| + callback->onSuccess(blink::WebPresentationInfo(
|
| + presentation_info->presentation_url,
|
| + blink::WebString::fromUTF8(presentation_info->presentation_id)));
|
| // 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());
|
| + SetControllerConnection(presentation_info.value(), callback->getConnection());
|
| + presentation_service_->ListenForConnectionMessages(presentation_info.value());
|
| }
|
|
|
| void PresentationDispatcher::OnReceiverConnectionAvailable(
|
| - const PresentationSessionInfo& session_info,
|
| + const PresentationInfo& presentation_info,
|
| 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(
|
| - blink::WebPresentationSessionInfo(
|
| - session_info.presentation_url,
|
| - blink::WebString::fromUTF8(session_info.presentation_id)));
|
| + auto* connection =
|
| + receiver_->onReceiverConnectionAvailable(blink::WebPresentationInfo(
|
| + presentation_info.presentation_url,
|
| + blink::WebString::fromUTF8(presentation_info.presentation_id)));
|
| auto* receiver_connection_proxy = new ReceiverConnectionProxy(connection);
|
| connection->bindProxy(base::WrapUnique(receiver_connection_proxy));
|
|
|
| @@ -572,35 +575,35 @@ void PresentationDispatcher::OnReceiverConnectionAvailable(
|
| }
|
|
|
| void PresentationDispatcher::OnConnectionStateChanged(
|
| - const PresentationSessionInfo& session_info,
|
| + const PresentationInfo& presentation_info,
|
| PresentationConnectionState state) {
|
| if (!controller_)
|
| return;
|
|
|
| - controller_->didChangeSessionState(
|
| - blink::WebPresentationSessionInfo(
|
| - session_info.presentation_url,
|
| - blink::WebString::fromUTF8(session_info.presentation_id)),
|
| + controller_->didChangeConnectionState(
|
| + blink::WebPresentationInfo(
|
| + presentation_info.presentation_url,
|
| + blink::WebString::fromUTF8(presentation_info.presentation_id)),
|
| GetWebPresentationConnectionState(state));
|
| }
|
|
|
| void PresentationDispatcher::OnConnectionClosed(
|
| - const PresentationSessionInfo& session_info,
|
| + const PresentationInfo& presentation_info,
|
| PresentationConnectionCloseReason reason,
|
| const std::string& message) {
|
| if (!controller_)
|
| return;
|
|
|
| controller_->didCloseConnection(
|
| - blink::WebPresentationSessionInfo(
|
| - session_info.presentation_url,
|
| - blink::WebString::fromUTF8(session_info.presentation_id)),
|
| + blink::WebPresentationInfo(
|
| + presentation_info.presentation_url,
|
| + blink::WebString::fromUTF8(presentation_info.presentation_id)),
|
| GetWebPresentationConnectionCloseReason(reason),
|
| blink::WebString::fromUTF8(message));
|
| }
|
|
|
| void PresentationDispatcher::OnConnectionMessagesReceived(
|
| - const PresentationSessionInfo& session_info,
|
| + const PresentationInfo& presentation_info,
|
| std::vector<PresentationConnectionMessage> messages) {
|
| if (!controller_)
|
| return;
|
| @@ -608,18 +611,19 @@ void PresentationDispatcher::OnConnectionMessagesReceived(
|
| for (size_t i = 0; i < messages.size(); ++i) {
|
| // Note: Passing batches of messages to the Blink layer would be more
|
| // efficient.
|
| - auto web_session_info = blink::WebPresentationSessionInfo(
|
| - session_info.presentation_url,
|
| - blink::WebString::fromUTF8(session_info.presentation_id));
|
| + auto web_presentation_info = blink::WebPresentationInfo(
|
| + presentation_info.presentation_url,
|
| + blink::WebString::fromUTF8(presentation_info.presentation_id));
|
|
|
| if (messages[i].is_binary()) {
|
| - controller_->didReceiveSessionBinaryMessage(web_session_info,
|
| - &(messages[i].data->front()),
|
| - messages[i].data->size());
|
| + controller_->didReceiveConnectionBinaryMessage(
|
| + web_presentation_info, &(messages[i].data->front()),
|
| + messages[i].data->size());
|
| } else {
|
| DCHECK(messages[i].message);
|
| - controller_->didReceiveSessionTextMessage(
|
| - web_session_info, blink::WebString::fromUTF8(*messages[i].message));
|
| + controller_->didReceiveConnectionTextMessage(
|
| + web_presentation_info,
|
| + blink::WebString::fromUTF8(*messages[i].message));
|
| }
|
| }
|
| }
|
| @@ -732,10 +736,10 @@ PresentationDispatcher::GetScreenAvailability(
|
| }
|
|
|
| PresentationDispatcher::SendMessageRequest::SendMessageRequest(
|
| - const PresentationSessionInfo& session_info,
|
| + const PresentationInfo& presentation_info,
|
| PresentationConnectionMessage connection_message,
|
| const blink::WebPresentationConnectionProxy* connection_proxy)
|
| - : session_info(session_info),
|
| + : presentation_info(presentation_info),
|
| message(std::move(connection_message)),
|
| connection_proxy(connection_proxy) {}
|
|
|
| @@ -748,11 +752,11 @@ PresentationDispatcher::CreateSendTextMessageRequest(
|
| const blink::WebString& presentationId,
|
| const blink::WebString& message,
|
| const blink::WebPresentationConnectionProxy* connection_proxy) {
|
| - PresentationSessionInfo session_info(GURL(presentationUrl),
|
| - presentationId.utf8());
|
| + PresentationInfo presentation_info(GURL(presentationUrl),
|
| + presentationId.utf8());
|
|
|
| return base::MakeUnique<SendMessageRequest>(
|
| - session_info, PresentationConnectionMessage(message.utf8()),
|
| + presentation_info, PresentationConnectionMessage(message.utf8()),
|
| connection_proxy);
|
| }
|
|
|
| @@ -764,10 +768,10 @@ PresentationDispatcher::CreateSendBinaryMessageRequest(
|
| const uint8_t* data,
|
| size_t length,
|
| const blink::WebPresentationConnectionProxy* connection_proxy) {
|
| - PresentationSessionInfo session_info(GURL(presentationUrl),
|
| - presentationId.utf8());
|
| + PresentationInfo presentation_info(GURL(presentationUrl),
|
| + presentationId.utf8());
|
| return base::MakeUnique<SendMessageRequest>(
|
| - session_info,
|
| + presentation_info,
|
| PresentationConnectionMessage(std::vector<uint8_t>(data, data + length)),
|
| connection_proxy);
|
| }
|
|
|