Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Unified Diff: content/renderer/presentation/presentation_dispatcher.cc

Issue 2613153003: [Presentation API] Replaces type converters with typemaps (Closed)
Patch Set: Extend presentation ID max length to 64. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/presentation/presentation_dispatcher.cc
diff --git a/content/renderer/presentation/presentation_dispatcher.cc b/content/renderer/presentation/presentation_dispatcher.cc
index a5b4562f70b15ba1ea58c6760719206a7369f8e7..eac8c3bcba52ba169bd262636a9def60ac80b8ae 100644
--- a/content/renderer/presentation/presentation_dispatcher.cc
+++ b/content/renderer/presentation/presentation_dispatcher.cc
@@ -16,7 +16,6 @@
#include "content/public/common/presentation_constants.h"
#include "content/public/renderer/render_frame.h"
#include "content/renderer/presentation/presentation_connection_proxy.h"
-#include "mojo/public/cpp/bindings/type_converter.h"
#include "services/service_manager/public/cpp/interface_provider.h"
#include "third_party/WebKit/public/platform/WebString.h"
#include "third_party/WebKit/public/platform/WebURL.h"
@@ -32,50 +31,37 @@
#include "third_party/WebKit/public/web/WebLocalFrame.h"
#include "url/gurl.h"
-namespace mojo {
-
-// Temporary type converter since Presentation API has not been Onion Soup-ed.
-template <>
-struct TypeConverter<blink::WebPresentationSessionInfo,
- blink::mojom::PresentationSessionInfoPtr> {
- static blink::WebPresentationSessionInfo Convert(
- const blink::mojom::PresentationSessionInfoPtr& input) {
- return blink::WebPresentationSessionInfo(
- blink::WebURL(input->url), blink::WebString::fromUTF8(input->id));
- }
-};
-
-} // namespace mojo
+namespace content {
namespace {
-blink::WebPresentationError::ErrorType GetWebPresentationErrorTypeFromMojo(
- blink::mojom::PresentationErrorType mojoErrorType) {
- switch (mojoErrorType) {
- case blink::mojom::PresentationErrorType::NO_AVAILABLE_SCREENS:
+blink::WebPresentationError::ErrorType GetWebPresentationErrorType(
+ PresentationErrorType errorType) {
+ switch (errorType) {
+ case PresentationErrorType::PRESENTATION_ERROR_NO_AVAILABLE_SCREENS:
return blink::WebPresentationError::ErrorTypeNoAvailableScreens;
- case blink::mojom::PresentationErrorType::SESSION_REQUEST_CANCELLED:
+ case PresentationErrorType::PRESENTATION_ERROR_SESSION_REQUEST_CANCELLED:
return blink::WebPresentationError::ErrorTypeSessionRequestCancelled;
- case blink::mojom::PresentationErrorType::NO_PRESENTATION_FOUND:
+ case PresentationErrorType::PRESENTATION_ERROR_NO_PRESENTATION_FOUND:
return blink::WebPresentationError::ErrorTypeNoPresentationFound;
- case blink::mojom::PresentationErrorType::PREVIOUS_START_IN_PROGRESS:
+ case PresentationErrorType::PRESENTATION_ERROR_PREVIOUS_START_IN_PROGRESS:
return blink::WebPresentationError::ErrorTypePreviousStartInProgress;
- case blink::mojom::PresentationErrorType::UNKNOWN:
+ case PresentationErrorType::PRESENTATION_ERROR_UNKNOWN:
default:
return blink::WebPresentationError::ErrorTypeUnknown;
}
}
-blink::WebPresentationConnectionState GetWebPresentationConnectionStateFromMojo(
- blink::mojom::PresentationConnectionState mojoSessionState) {
- switch (mojoSessionState) {
- case blink::mojom::PresentationConnectionState::CONNECTING:
+blink::WebPresentationConnectionState GetWebPresentationConnectionState(
+ PresentationConnectionState sessionState) {
+ switch (sessionState) {
+ case PresentationConnectionState::PRESENTATION_CONNECTION_STATE_CONNECTING:
return blink::WebPresentationConnectionState::Connecting;
- case blink::mojom::PresentationConnectionState::CONNECTED:
+ case PresentationConnectionState::PRESENTATION_CONNECTION_STATE_CONNECTED:
return blink::WebPresentationConnectionState::Connected;
- case blink::mojom::PresentationConnectionState::CLOSED:
+ case PresentationConnectionState::PRESENTATION_CONNECTION_STATE_CLOSED:
return blink::WebPresentationConnectionState::Closed;
- case blink::mojom::PresentationConnectionState::TERMINATED:
+ case PresentationConnectionState::PRESENTATION_CONNECTION_STATE_TERMINATED:
return blink::WebPresentationConnectionState::Terminated;
default:
NOTREACHED();
@@ -84,14 +70,17 @@ blink::WebPresentationConnectionState GetWebPresentationConnectionStateFromMojo(
}
blink::WebPresentationConnectionCloseReason
-GetWebPresentationConnectionCloseReasonFromMojo(
- blink::mojom::PresentationConnectionCloseReason mojoConnectionCloseReason) {
- switch (mojoConnectionCloseReason) {
- case blink::mojom::PresentationConnectionCloseReason::CONNECTION_ERROR:
+GetWebPresentationConnectionCloseReason(
+ PresentationConnectionCloseReason connectionCloseReason) {
+ switch (connectionCloseReason) {
+ case PresentationConnectionCloseReason::
+ PRESENTATION_CONNECTION_CLOSE_REASON_CONNECTION_ERROR:
return blink::WebPresentationConnectionCloseReason::Error;
- case blink::mojom::PresentationConnectionCloseReason::CLOSED:
+ case PresentationConnectionCloseReason::
+ PRESENTATION_CONNECTION_CLOSE_REASON_CLOSED:
return blink::WebPresentationConnectionCloseReason::Closed;
- case blink::mojom::PresentationConnectionCloseReason::WENT_AWAY:
+ case PresentationConnectionCloseReason::
+ PRESENTATION_CONNECTION_CLOSE_REASON_WENT_AWAY:
return blink::WebPresentationConnectionCloseReason::WentAway;
default:
NOTREACHED();
@@ -100,8 +89,6 @@ GetWebPresentationConnectionCloseReasonFromMojo(
}
} // namespace
-namespace content {
-
PresentationDispatcher::PresentationDispatcher(RenderFrame* render_frame)
: RenderFrameObserver(render_frame),
controller_(nullptr),
@@ -483,36 +470,37 @@ void PresentationDispatcher::OnScreenAvailabilityNotSupported(const GURL& url) {
}
void PresentationDispatcher::OnDefaultSessionStarted(
- blink::mojom::PresentationSessionInfoPtr session_info) {
+ const PresentationSessionInfo& session_info) {
if (!controller_)
return;
- if (!session_info.is_null()) {
- presentation_service_->ListenForConnectionMessages(session_info.Clone());
- auto* connection = controller_->didStartDefaultSession(
- mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info));
- connection->bindProxy(
- base::MakeUnique<ControllerConnectionProxy>(connection));
- }
+ 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));
}
void PresentationDispatcher::OnSessionCreated(
std::unique_ptr<blink::WebPresentationConnectionCallbacks> callback,
- blink::mojom::PresentationSessionInfoPtr session_info,
- blink::mojom::PresentationErrorPtr error) {
+ const base::Optional<PresentationSessionInfo>& session_info,
+ const base::Optional<PresentationError>& error) {
DCHECK(callback);
- if (!error.is_null()) {
- DCHECK(session_info.is_null());
+ if (error) {
+ DCHECK(!session_info);
callback->onError(blink::WebPresentationError(
- GetWebPresentationErrorTypeFromMojo(error->error_type),
+ GetWebPresentationErrorType(error->error_type),
blink::WebString::fromUTF8(error->message)));
return;
}
- DCHECK(!session_info.is_null());
- presentation_service_->ListenForConnectionMessages(session_info.Clone());
- callback->onSuccess(
- mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info));
+ 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(
@@ -520,14 +508,16 @@ void PresentationDispatcher::OnSessionCreated(
}
void PresentationDispatcher::OnReceiverConnectionAvailable(
- blink::mojom::PresentationSessionInfoPtr session_info,
+ const PresentationSessionInfo& session_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(
- mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info));
+ blink::WebPresentationSessionInfo(
+ session_info.presentation_url,
+ blink::WebString::fromUTF8(session_info.presentation_id)));
auto* receiver_connection_proxy = new ReceiverConnectionProxy(connection);
connection->bindProxy(base::WrapUnique(receiver_connection_proxy));
@@ -537,31 +527,35 @@ void PresentationDispatcher::OnReceiverConnectionAvailable(
}
void PresentationDispatcher::OnConnectionStateChanged(
- blink::mojom::PresentationSessionInfoPtr session_info,
- blink::mojom::PresentationConnectionState state) {
+ const PresentationSessionInfo& session_info,
+ PresentationConnectionState state) {
if (!controller_)
return;
controller_->didChangeSessionState(
- mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info),
- GetWebPresentationConnectionStateFromMojo(state));
+ blink::WebPresentationSessionInfo(
+ session_info.presentation_url,
+ blink::WebString::fromUTF8(session_info.presentation_id)),
+ GetWebPresentationConnectionState(state));
}
void PresentationDispatcher::OnConnectionClosed(
- blink::mojom::PresentationSessionInfoPtr session_info,
- blink::mojom::PresentationConnectionCloseReason reason,
+ const PresentationSessionInfo& session_info,
+ PresentationConnectionCloseReason reason,
const std::string& message) {
if (!controller_)
return;
controller_->didCloseConnection(
- mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info),
- GetWebPresentationConnectionCloseReasonFromMojo(reason),
+ blink::WebPresentationSessionInfo(
+ session_info.presentation_url,
+ blink::WebString::fromUTF8(session_info.presentation_id)),
+ GetWebPresentationConnectionCloseReason(reason),
blink::WebString::fromUTF8(message));
}
void PresentationDispatcher::OnConnectionMessagesReceived(
- blink::mojom::PresentationSessionInfoPtr session_info,
+ const PresentationSessionInfo& session_info,
std::vector<blink::mojom::ConnectionMessagePtr> messages) {
if (!controller_)
return;
@@ -569,8 +563,10 @@ 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 =
- mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info);
+ auto web_session_info = blink::WebPresentationSessionInfo(
+ session_info.presentation_url,
+ blink::WebString::fromUTF8(session_info.presentation_id));
+
switch (messages[i]->type) {
case blink::mojom::PresentationMessageType::TEXT: {
// TODO(mfoltz): Do we need to DCHECK(messages[i]->message)?
@@ -702,10 +698,10 @@ PresentationDispatcher::GetScreenAvailability(
}
PresentationDispatcher::SendMessageRequest::SendMessageRequest(
- blink::mojom::PresentationSessionInfoPtr session_info,
+ const PresentationSessionInfo& session_info,
blink::mojom::ConnectionMessagePtr message,
const blink::WebPresentationConnectionProxy* connection_proxy)
- : session_info(std::move(session_info)),
+ : session_info(session_info),
message(std::move(message)),
connection_proxy(connection_proxy) {}
@@ -718,17 +714,15 @@ PresentationDispatcher::CreateSendTextMessageRequest(
const blink::WebString& presentationId,
const blink::WebString& message,
const blink::WebPresentationConnectionProxy* connection_proxy) {
- blink::mojom::PresentationSessionInfoPtr session_info =
- blink::mojom::PresentationSessionInfo::New();
- session_info->url = presentationUrl;
- session_info->id = presentationId.utf8();
+ PresentationSessionInfo session_info(GURL(presentationUrl),
+ presentationId.utf8());
blink::mojom::ConnectionMessagePtr session_message =
blink::mojom::ConnectionMessage::New();
session_message->type = blink::mojom::PresentationMessageType::TEXT;
session_message->message = message.utf8();
- return new SendMessageRequest(std::move(session_info),
- std::move(session_message), connection_proxy);
+ return new SendMessageRequest(session_info, std::move(session_message),
+ connection_proxy);
}
// static
@@ -740,17 +734,15 @@ PresentationDispatcher::CreateSendBinaryMessageRequest(
const uint8_t* data,
size_t length,
const blink::WebPresentationConnectionProxy* connection_proxy) {
- blink::mojom::PresentationSessionInfoPtr session_info =
- blink::mojom::PresentationSessionInfo::New();
- session_info->url = presentationUrl;
- session_info->id = presentationId.utf8();
+ PresentationSessionInfo session_info(GURL(presentationUrl),
+ presentationId.utf8());
blink::mojom::ConnectionMessagePtr session_message =
blink::mojom::ConnectionMessage::New();
session_message->type = type;
session_message->data = std::vector<uint8_t>(data, data + length);
- return new SendMessageRequest(std::move(session_info),
- std::move(session_message), connection_proxy);
+ return new SendMessageRequest(session_info, std::move(session_message),
+ connection_proxy);
}
PresentationDispatcher::AvailabilityListener::AvailabilityListener(

Powered by Google App Engine
This is Rietveld 408576698