Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/presentation/presentation_dispatcher.h" | 5 #include "content/renderer/presentation/presentation_dispatcher.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "content/common/presentation/presentation_service.mojom.h" | 8 #include "content/common/presentation/presentation_service.mojom.h" |
| 9 #include "content/public/common/presentation_constants.h" | 9 #include "content/public/common/presentation_constants.h" |
| 10 #include "content/public/common/service_registry.h" | 10 #include "content/public/common/service_registry.h" |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 47 return blink::WebPresentationSessionState::Disconnected; | 47 return blink::WebPresentationSessionState::Disconnected; |
| 48 } | 48 } |
| 49 | 49 |
| 50 GURL GetPresentationURLFromFrame(content::RenderFrame* frame) { | 50 GURL GetPresentationURLFromFrame(content::RenderFrame* frame) { |
| 51 DCHECK(frame); | 51 DCHECK(frame); |
| 52 | 52 |
| 53 GURL url(frame->GetWebFrame()->document().defaultPresentationURL()); | 53 GURL url(frame->GetWebFrame()->document().defaultPresentationURL()); |
| 54 return url.is_valid() ? url : GURL(); | 54 return url.is_valid() ? url : GURL(); |
| 55 } | 55 } |
| 56 | 56 |
| 57 presentation::SessionMessage* GetMojoSessionMessage( | |
| 58 const blink::WebString& presentationUrl, | |
| 59 const blink::WebString& presentationId, | |
| 60 presentation::PresentationMessageType type, | |
| 61 const uint8* data, | |
| 62 size_t length) { | |
| 63 presentation::SessionMessage* session_message = | |
| 64 new presentation::SessionMessage(); | |
| 65 session_message->presentation_url = presentationUrl.utf8(); | |
| 66 session_message->presentation_id = presentationId.utf8(); | |
| 67 session_message->type = type; | |
| 68 const std::vector<uint8> vector(data, data + length); | |
| 69 session_message->data = mojo::Array<uint8>::From(vector); | |
| 70 return session_message; | |
| 71 } | |
| 72 | |
| 57 } // namespace | 73 } // namespace |
| 58 | 74 |
| 59 namespace content { | 75 namespace content { |
| 60 | 76 |
| 61 PresentationDispatcher::PresentationDispatcher(RenderFrame* render_frame) | 77 PresentationDispatcher::PresentationDispatcher(RenderFrame* render_frame) |
| 62 : RenderFrameObserver(render_frame), | 78 : RenderFrameObserver(render_frame), |
| 63 controller_(nullptr), | 79 controller_(nullptr), |
| 64 binding_(this) { | 80 binding_(this) { |
| 65 } | 81 } |
| 66 | 82 |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 158 const blink::WebString& presentationId, | 174 const blink::WebString& presentationId, |
| 159 const uint8* data, | 175 const uint8* data, |
| 160 size_t length) { | 176 size_t length) { |
| 161 DCHECK(data); | 177 DCHECK(data); |
| 162 if (length > kMaxPresentationSessionMessageSize) { | 178 if (length > kMaxPresentationSessionMessageSize) { |
| 163 // TODO(crbug.com/459008): Same as in sendString(). | 179 // TODO(crbug.com/459008): Same as in sendString(). |
| 164 LOG(WARNING) << "data size exceeded limit!"; | 180 LOG(WARNING) << "data size exceeded limit!"; |
| 165 return; | 181 return; |
| 166 } | 182 } |
| 167 | 183 |
| 168 const std::vector<uint8> vector(data, data + length); | |
| 169 presentation::SessionMessage* session_message = | 184 presentation::SessionMessage* session_message = |
| 170 new presentation::SessionMessage(); | 185 GetMojoSessionMessage(presentationUrl, presentationId, |
| 171 session_message->presentation_url = presentationUrl.utf8(); | 186 presentation::PresentationMessageType:: |
|
mark a. foltz
2015/06/05 22:40:56
Add using presentation::PresentationMessageType in
USE s.singapati at gmail.com
2015/06/08 13:04:19
Done.
| |
| 172 session_message->presentation_id = presentationId.utf8(); | 187 PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER, |
| 173 session_message->type = presentation::PresentationMessageType:: | 188 data, length); |
| 174 PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER; | |
| 175 session_message->data = mojo::Array<uint8>::From(vector); | |
| 176 | |
| 177 message_request_queue_.push(make_linked_ptr(session_message)); | 189 message_request_queue_.push(make_linked_ptr(session_message)); |
| 178 // Start processing request if only one in the queue. | 190 // Start processing request if only one in the queue. |
| 179 if (message_request_queue_.size() == 1) { | 191 if (message_request_queue_.size() == 1) { |
| 180 const linked_ptr<presentation::SessionMessage>& request = | 192 const linked_ptr<presentation::SessionMessage>& request = |
| 181 message_request_queue_.front(); | 193 message_request_queue_.front(); |
| 182 DoSendMessage(*request); | 194 DoSendMessage(*request); |
| 183 } | 195 } |
| 184 } | 196 } |
| 185 | 197 |
| 198 void PresentationDispatcher::sendBlobData( | |
| 199 const blink::WebString& presentationUrl, | |
| 200 const blink::WebString& presentationId, | |
| 201 const uint8* data, | |
| 202 size_t length) { | |
| 203 DCHECK(data); | |
| 204 if (length > kMaxPresentationSessionMessageSize) { | |
| 205 // TODO(crbug.com/459008): Same as in sendString(). | |
| 206 LOG(WARNING) << "data size exceeded limit!"; | |
| 207 return; | |
| 208 } | |
| 209 | |
| 210 presentation::SessionMessage* session_message = GetMojoSessionMessage( | |
| 211 presentationUrl, presentationId, | |
| 212 presentation::PresentationMessageType::PRESENTATION_MESSAGE_TYPE_BLOB, | |
| 213 data, length); | |
| 214 message_request_queue_.push(make_linked_ptr(session_message)); | |
| 215 if (message_request_queue_.size() == 1) { | |
| 216 const linked_ptr<presentation::SessionMessage>& request = | |
| 217 message_request_queue_.front(); | |
| 218 DoSendMessage(*request); | |
| 219 } | |
| 220 } | |
| 221 | |
| 186 void PresentationDispatcher::DoSendMessage( | 222 void PresentationDispatcher::DoSendMessage( |
| 187 const presentation::SessionMessage& session_message) { | 223 const presentation::SessionMessage& session_message) { |
| 188 ConnectToPresentationServiceIfNeeded(); | 224 ConnectToPresentationServiceIfNeeded(); |
| 189 | |
| 190 presentation::SessionMessagePtr message_request( | 225 presentation::SessionMessagePtr message_request( |
| 191 presentation::SessionMessage::New()); | 226 presentation::SessionMessage::New()); |
| 192 message_request->presentation_url = session_message.presentation_url; | 227 message_request->presentation_url = session_message.presentation_url; |
| 193 message_request->presentation_id = session_message.presentation_id; | 228 message_request->presentation_id = session_message.presentation_id; |
| 194 message_request->type = session_message.type; | 229 message_request->type = session_message.type; |
| 195 if (session_message.type == presentation::PresentationMessageType:: | 230 switch (session_message.type) { |
| 196 PRESENTATION_MESSAGE_TYPE_TEXT) { | 231 case presentation::PresentationMessageType:: |
| 197 message_request->message = session_message.message; | 232 PRESENTATION_MESSAGE_TYPE_TEXT: { |
| 198 } else if (session_message.type == presentation::PresentationMessageType:: | 233 message_request->message = session_message.message; |
| 199 PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER) { | 234 break; |
| 200 message_request->data = mojo::Array<uint8>::From( | 235 } |
| 201 session_message.data.storage()); | 236 case presentation::PresentationMessageType:: |
| 237 PRESENTATION_MESSAGE_TYPE_ARRAY_BUFFER: | |
| 238 case presentation::PresentationMessageType:: | |
| 239 PRESENTATION_MESSAGE_TYPE_BLOB: { | |
| 240 message_request->data = | |
| 241 mojo::Array<uint8>::From(session_message.data.storage()); | |
| 242 break; | |
| 243 } | |
| 244 default: { | |
| 245 NOTREACHED() << "Invalid presentation message type " | |
| 246 << session_message.type; | |
| 247 break; | |
| 248 } | |
| 202 } | 249 } |
| 203 | 250 |
| 204 presentation_service_->SendSessionMessage( | 251 presentation_service_->SendSessionMessage( |
| 205 message_request.Pass(), | 252 message_request.Pass(), |
| 206 base::Bind(&PresentationDispatcher::HandleSendMessageRequests, | 253 base::Bind(&PresentationDispatcher::HandleSendMessageRequests, |
| 207 base::Unretained(this))); | 254 base::Unretained(this))); |
| 208 } | 255 } |
| 209 | 256 |
| 210 void PresentationDispatcher::HandleSendMessageRequests(bool success) { | 257 void PresentationDispatcher::HandleSendMessageRequests(bool success) { |
| 211 // In normal cases, message_request_queue_ should not be empty at this point | 258 // In normal cases, message_request_queue_ should not be empty at this point |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 357 presentation_service_->ListenForSessionStateChange(base::Bind( | 404 presentation_service_->ListenForSessionStateChange(base::Bind( |
| 358 &PresentationDispatcher::OnSessionStateChange, | 405 &PresentationDispatcher::OnSessionStateChange, |
| 359 base::Unretained(this))); | 406 base::Unretained(this))); |
| 360 presentation_service_->ListenForSessionMessages( | 407 presentation_service_->ListenForSessionMessages( |
| 361 base::Bind(&PresentationDispatcher::OnSessionMessagesReceived, | 408 base::Bind(&PresentationDispatcher::OnSessionMessagesReceived, |
| 362 base::Unretained(this))); | 409 base::Unretained(this))); |
| 363 */ | 410 */ |
| 364 } | 411 } |
| 365 | 412 |
| 366 } // namespace content | 413 } // namespace content |
| OLD | NEW |