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

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

Issue 1140713005: [PresentationAPI] Implements send API for Blob data from WebPresentationClient (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: reverted "using presentation::PresentationMessageType" Created 5 years, 6 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
« no previous file with comments | « content/renderer/presentation/presentation_dispatcher.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/presentation/presentation_dispatcher.cc
diff --git a/content/renderer/presentation/presentation_dispatcher.cc b/content/renderer/presentation/presentation_dispatcher.cc
index 1205e533f8333ba809a949ed859f14b194875db1..8100c03b94ed8b117aa243379d37bd18328ef2eb 100644
--- a/content/renderer/presentation/presentation_dispatcher.cc
+++ b/content/renderer/presentation/presentation_dispatcher.cc
@@ -54,6 +54,22 @@ GURL GetPresentationURLFromFrame(content::RenderFrame* frame) {
return url.is_valid() ? url : GURL();
}
+presentation::SessionMessage* GetMojoSessionMessage(
+ const blink::WebString& presentationUrl,
+ const blink::WebString& presentationId,
+ presentation::PresentationMessageType type,
+ const uint8* data,
+ size_t length) {
+ presentation::SessionMessage* session_message =
+ new presentation::SessionMessage();
+ session_message->presentation_url = presentationUrl.utf8();
+ session_message->presentation_id = presentationId.utf8();
+ session_message->type = type;
+ const std::vector<uint8> vector(data, data + length);
+ session_message->data = mojo::Array<uint8>::From(vector);
+ return session_message;
+}
+
} // namespace
namespace content {
@@ -165,15 +181,11 @@ void PresentationDispatcher::sendArrayBuffer(
return;
}
- const std::vector<uint8> vector(data, data + length);
presentation::SessionMessage* session_message =
- new presentation::SessionMessage();
- session_message->presentation_url = presentationUrl.utf8();
- session_message->presentation_id = presentationId.utf8();
- session_message->type = presentation::PresentationMessageType::
- PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER;
- session_message->data = mojo::Array<uint8>::From(vector);
-
+ GetMojoSessionMessage(presentationUrl, presentationId,
+ presentation::PresentationMessageType::
+ PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER,
+ data, length);
message_request_queue_.push(make_linked_ptr(session_message));
// Start processing request if only one in the queue.
if (message_request_queue_.size() == 1) {
@@ -183,22 +195,57 @@ void PresentationDispatcher::sendArrayBuffer(
}
}
+void PresentationDispatcher::sendBlobData(
+ const blink::WebString& presentationUrl,
+ const blink::WebString& presentationId,
+ const uint8* data,
+ size_t length) {
+ DCHECK(data);
+ if (length > kMaxPresentationSessionMessageSize) {
+ // TODO(crbug.com/459008): Same as in sendString().
+ LOG(WARNING) << "data size exceeded limit!";
+ return;
+ }
+
+ presentation::SessionMessage* session_message = GetMojoSessionMessage(
+ presentationUrl, presentationId,
+ presentation::PresentationMessageType::PRESENTATION_MESSAGE_TYPE_BLOB,
+ data, length);
+ message_request_queue_.push(make_linked_ptr(session_message));
+ if (message_request_queue_.size() == 1) {
+ const linked_ptr<presentation::SessionMessage>& request =
+ message_request_queue_.front();
+ DoSendMessage(*request);
+ }
+}
+
void PresentationDispatcher::DoSendMessage(
const presentation::SessionMessage& session_message) {
ConnectToPresentationServiceIfNeeded();
-
presentation::SessionMessagePtr message_request(
presentation::SessionMessage::New());
message_request->presentation_url = session_message.presentation_url;
message_request->presentation_id = session_message.presentation_id;
message_request->type = session_message.type;
- if (session_message.type == presentation::PresentationMessageType::
- PRESENTATION_MESSAGE_TYPE_TEXT) {
- message_request->message = session_message.message;
- } else if (session_message.type == presentation::PresentationMessageType::
- PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER) {
- message_request->data = mojo::Array<uint8>::From(
- session_message.data.storage());
+ switch (session_message.type) {
+ case presentation::PresentationMessageType::
+ PRESENTATION_MESSAGE_TYPE_TEXT: {
+ message_request->message = session_message.message;
+ break;
+ }
+ case presentation::PresentationMessageType::
+ PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER:
+ case presentation::PresentationMessageType::
+ PRESENTATION_MESSAGE_TYPE_BLOB: {
+ message_request->data =
+ mojo::Array<uint8>::From(session_message.data.storage());
+ break;
+ }
+ default: {
+ NOTREACHED() << "Invalid presentation message type "
+ << session_message.type;
+ break;
+ }
}
presentation_service_->SendSessionMessage(
« no previous file with comments | « content/renderer/presentation/presentation_dispatcher.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698