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

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: 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
Index: content/renderer/presentation/presentation_dispatcher.cc
diff --git a/content/renderer/presentation/presentation_dispatcher.cc b/content/renderer/presentation/presentation_dispatcher.cc
index 29f5047f0b57ec0639ff4d9765a2c645beb807f9..709d6b369b66e5af35eb015dc848e22d373d15a0 100644
--- a/content/renderer/presentation/presentation_dispatcher.cc
+++ b/content/renderer/presentation/presentation_dispatcher.cc
@@ -17,6 +17,8 @@
#include "third_party/WebKit/public/web/WebLocalFrame.h"
#include "url/gurl.h"
+using presentation::PresentationMessageType;
+
namespace {
blink::WebPresentationError::ErrorType GetWebPresentationErrorTypeFromMojo(
@@ -54,6 +56,22 @@ GURL GetPresentationURLFromFrame(content::RenderFrame* frame) {
return url.is_valid() ? url : GURL();
}
+presentation::SessionMessage* GetMojoSessionMessage(
+ const blink::WebString& presentationUrl,
+ const blink::WebString& presentationId,
+ 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 {
@@ -140,8 +158,8 @@ void PresentationDispatcher::sendString(
new presentation::SessionMessage();
session_message->presentation_url = presentationUrl.utf8();
session_message->presentation_id = presentationId.utf8();
- session_message->type = presentation::PresentationMessageType::
- PRESENTATION_MESSAGE_TYPE_TEXT;
+ session_message->type =
+ PresentationMessageType::PRESENTATION_MESSAGE_TYPE_TEXT;
session_message->message = message.utf8();
message_request_queue_.push(make_linked_ptr(session_message));
@@ -165,15 +183,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,
+ 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 +197,54 @@ 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,
+ 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 PresentationMessageType::PRESENTATION_MESSAGE_TYPE_TEXT: {
+ message_request->message = session_message.message;
+ break;
+ }
+ case PresentationMessageType::PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER:
+ case 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(
@@ -323,7 +369,7 @@ void PresentationDispatcher::OnSessionMessagesReceived(
for (size_t i = 0; i < messages.size(); ++i) {
if (messages[i]->type ==
- presentation::PresentationMessageType::PRESENTATION_MESSAGE_TYPE_TEXT) {
+ PresentationMessageType::PRESENTATION_MESSAGE_TYPE_TEXT) {
controller_->didReceiveSessionTextMessage(
new PresentationSessionClient(messages[i]->presentation_url,
messages[i]->presentation_id),

Powered by Google App Engine
This is Rietveld 408576698