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 29f5047f0b57ec0639ff4d9765a2c645beb807f9..24ecf099c1389f20eb95be748222b7a284374243 100644 |
| --- a/content/renderer/presentation/presentation_dispatcher.cc |
| +++ b/content/renderer/presentation/presentation_dispatcher.cc |
| @@ -54,6 +54,21 @@ GURL GetPresentationURLFromFrame(content::RenderFrame* frame) { |
| return url.is_valid() ? url : GURL(); |
| } |
| +presentation::SessionMessage* GetMojoSessionMessage( |
| + const blink::WebString& presentationUrl, |
| + const blink::WebString& presentationId, |
| + 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(); |
| + const std::vector<uint8> vector(data, data + length); |
| + session_message->data = mojo::Array<uint8>::From(vector); |
| + // Fill session_message->type in the caller. |
|
mark a. foltz
2015/06/02 23:51:02
Why not pass the type as an argument and fill it i
USE s.singapati at gmail.com
2015/06/03 15:03:50
Done. Well, Yes.
|
| + return session_message; |
| +} |
| + |
| } // namespace |
| namespace content { |
| @@ -165,15 +180,10 @@ 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(); |
| + GetMojoSessionMessage(presentationUrl, presentationId, data, length); |
| session_message->type = presentation::PresentationMessageType:: |
| PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER; |
| - session_message->data = mojo::Array<uint8>::From(vector); |
| - |
| 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,6 +193,30 @@ 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, data, length); |
| + session_message->type = presentation::PresentationMessageType:: |
| + PRESENTATION_MESSAGE_TYPE_BLOB; |
| + 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(); |
| @@ -195,8 +229,8 @@ void PresentationDispatcher::DoSendMessage( |
| 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) { |
| + } else { |
| + // ArrayBuffer or Blob types. |
|
mark a. foltz
2015/06/02 23:51:02
Prefer seeing a switch { } statement here with a d
USE s.singapati at gmail.com
2015/06/03 15:03:50
Done.
|
| message_request->data = mojo::Array<uint8>::From( |
| session_message.data.storage()); |
| } |