| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 const blink::WebString& presentationId, | 138 const blink::WebString& presentationId, |
| 139 const blink::WebString& message) { | 139 const blink::WebString& message) { |
| 140 if (message.utf8().size() > kMaxPresentationSessionMessageSize) { | 140 if (message.utf8().size() > kMaxPresentationSessionMessageSize) { |
| 141 // TODO(crbug.com/459008): Limit the size of individual messages to 64k | 141 // TODO(crbug.com/459008): Limit the size of individual messages to 64k |
| 142 // for now. Consider throwing DOMException or splitting bigger messages | 142 // for now. Consider throwing DOMException or splitting bigger messages |
| 143 // into smaller chunks later. | 143 // into smaller chunks later. |
| 144 LOG(WARNING) << "message size exceeded limit!"; | 144 LOG(WARNING) << "message size exceeded limit!"; |
| 145 return; | 145 return; |
| 146 } | 146 } |
| 147 | 147 |
| 148 message_request_queue_.push(make_scoped_ptr( | 148 message_request_queue_.push(base::WrapUnique( |
| 149 CreateSendTextMessageRequest(presentationUrl, presentationId, message))); | 149 CreateSendTextMessageRequest(presentationUrl, presentationId, message))); |
| 150 // Start processing request if only one in the queue. | 150 // Start processing request if only one in the queue. |
| 151 if (message_request_queue_.size() == 1) | 151 if (message_request_queue_.size() == 1) |
| 152 DoSendMessage(message_request_queue_.front().get()); | 152 DoSendMessage(message_request_queue_.front().get()); |
| 153 } | 153 } |
| 154 | 154 |
| 155 void PresentationDispatcher::sendArrayBuffer( | 155 void PresentationDispatcher::sendArrayBuffer( |
| 156 const blink::WebString& presentationUrl, | 156 const blink::WebString& presentationUrl, |
| 157 const blink::WebString& presentationId, | 157 const blink::WebString& presentationId, |
| 158 const uint8_t* data, | 158 const uint8_t* data, |
| 159 size_t length) { | 159 size_t length) { |
| 160 DCHECK(data); | 160 DCHECK(data); |
| 161 if (length > kMaxPresentationSessionMessageSize) { | 161 if (length > kMaxPresentationSessionMessageSize) { |
| 162 // TODO(crbug.com/459008): Same as in sendString(). | 162 // TODO(crbug.com/459008): Same as in sendString(). |
| 163 LOG(WARNING) << "data size exceeded limit!"; | 163 LOG(WARNING) << "data size exceeded limit!"; |
| 164 return; | 164 return; |
| 165 } | 165 } |
| 166 | 166 |
| 167 message_request_queue_.push(make_scoped_ptr(CreateSendBinaryMessageRequest( | 167 message_request_queue_.push(base::WrapUnique(CreateSendBinaryMessageRequest( |
| 168 presentationUrl, presentationId, | 168 presentationUrl, presentationId, |
| 169 mojom::PresentationMessageType::ARRAY_BUFFER, data, length))); | 169 mojom::PresentationMessageType::ARRAY_BUFFER, data, length))); |
| 170 // Start processing request if only one in the queue. | 170 // Start processing request if only one in the queue. |
| 171 if (message_request_queue_.size() == 1) | 171 if (message_request_queue_.size() == 1) |
| 172 DoSendMessage(message_request_queue_.front().get()); | 172 DoSendMessage(message_request_queue_.front().get()); |
| 173 } | 173 } |
| 174 | 174 |
| 175 void PresentationDispatcher::sendBlobData( | 175 void PresentationDispatcher::sendBlobData( |
| 176 const blink::WebString& presentationUrl, | 176 const blink::WebString& presentationUrl, |
| 177 const blink::WebString& presentationId, | 177 const blink::WebString& presentationId, |
| 178 const uint8_t* data, | 178 const uint8_t* data, |
| 179 size_t length) { | 179 size_t length) { |
| 180 DCHECK(data); | 180 DCHECK(data); |
| 181 if (length > kMaxPresentationSessionMessageSize) { | 181 if (length > kMaxPresentationSessionMessageSize) { |
| 182 // TODO(crbug.com/459008): Same as in sendString(). | 182 // TODO(crbug.com/459008): Same as in sendString(). |
| 183 LOG(WARNING) << "data size exceeded limit!"; | 183 LOG(WARNING) << "data size exceeded limit!"; |
| 184 return; | 184 return; |
| 185 } | 185 } |
| 186 | 186 |
| 187 message_request_queue_.push(make_scoped_ptr(CreateSendBinaryMessageRequest( | 187 message_request_queue_.push(base::WrapUnique(CreateSendBinaryMessageRequest( |
| 188 presentationUrl, presentationId, mojom::PresentationMessageType::BLOB, | 188 presentationUrl, presentationId, mojom::PresentationMessageType::BLOB, |
| 189 data, length))); | 189 data, length))); |
| 190 // Start processing request if only one in the queue. | 190 // Start processing request if only one in the queue. |
| 191 if (message_request_queue_.size() == 1) | 191 if (message_request_queue_.size() == 1) |
| 192 DoSendMessage(message_request_queue_.front().get()); | 192 DoSendMessage(message_request_queue_.front().get()); |
| 193 } | 193 } |
| 194 | 194 |
| 195 void PresentationDispatcher::DoSendMessage(SendMessageRequest* request) { | 195 void PresentationDispatcher::DoSendMessage(SendMessageRequest* request) { |
| 196 ConnectToPresentationServiceIfNeeded(); | 196 ConnectToPresentationServiceIfNeeded(); |
| 197 | 197 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 } | 241 } |
| 242 | 242 |
| 243 void PresentationDispatcher::getAvailability( | 243 void PresentationDispatcher::getAvailability( |
| 244 const blink::WebString& availabilityUrl, | 244 const blink::WebString& availabilityUrl, |
| 245 blink::WebPresentationAvailabilityCallbacks* callbacks) { | 245 blink::WebPresentationAvailabilityCallbacks* callbacks) { |
| 246 const std::string& availability_url = availabilityUrl.utf8(); | 246 const std::string& availability_url = availabilityUrl.utf8(); |
| 247 AvailabilityStatus* status = nullptr; | 247 AvailabilityStatus* status = nullptr; |
| 248 auto status_it = availability_status_.find(availability_url); | 248 auto status_it = availability_status_.find(availability_url); |
| 249 if (status_it == availability_status_.end()) { | 249 if (status_it == availability_status_.end()) { |
| 250 status = new AvailabilityStatus(availability_url); | 250 status = new AvailabilityStatus(availability_url); |
| 251 availability_status_[availability_url] = make_scoped_ptr(status); | 251 availability_status_[availability_url] = base::WrapUnique(status); |
| 252 } else { | 252 } else { |
| 253 status = status_it->second.get(); | 253 status = status_it->second.get(); |
| 254 } | 254 } |
| 255 DCHECK(status); | 255 DCHECK(status); |
| 256 | 256 |
| 257 if (status->listening_state == ListeningState::ACTIVE) { | 257 if (status->listening_state == ListeningState::ACTIVE) { |
| 258 callbacks->onSuccess(status->last_known_availability); | 258 callbacks->onSuccess(status->last_known_availability); |
| 259 delete callbacks; | 259 delete callbacks; |
| 260 return; | 260 return; |
| 261 } | 261 } |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 | 416 |
| 417 void PresentationDispatcher::OnSessionMessagesReceived( | 417 void PresentationDispatcher::OnSessionMessagesReceived( |
| 418 mojom::PresentationSessionInfoPtr session_info, | 418 mojom::PresentationSessionInfoPtr session_info, |
| 419 mojo::Array<mojom::SessionMessagePtr> messages) { | 419 mojo::Array<mojom::SessionMessagePtr> messages) { |
| 420 if (!controller_) | 420 if (!controller_) |
| 421 return; | 421 return; |
| 422 | 422 |
| 423 for (size_t i = 0; i < messages.size(); ++i) { | 423 for (size_t i = 0; i < messages.size(); ++i) { |
| 424 // Note: Passing batches of messages to the Blink layer would be more | 424 // Note: Passing batches of messages to the Blink layer would be more |
| 425 // efficient. | 425 // efficient. |
| 426 scoped_ptr<PresentationConnectionClient> session_client( | 426 std::unique_ptr<PresentationConnectionClient> session_client( |
| 427 new PresentationConnectionClient(session_info->url, session_info->id)); | 427 new PresentationConnectionClient(session_info->url, session_info->id)); |
| 428 switch (messages[i]->type) { | 428 switch (messages[i]->type) { |
| 429 case mojom::PresentationMessageType::TEXT: { | 429 case mojom::PresentationMessageType::TEXT: { |
| 430 controller_->didReceiveSessionTextMessage( | 430 controller_->didReceiveSessionTextMessage( |
| 431 session_client.release(), | 431 session_client.release(), |
| 432 blink::WebString::fromUTF8(messages[i]->message)); | 432 blink::WebString::fromUTF8(messages[i]->message)); |
| 433 break; | 433 break; |
| 434 } | 434 } |
| 435 case mojom::PresentationMessageType::ARRAY_BUFFER: | 435 case mojom::PresentationMessageType::ARRAY_BUFFER: |
| 436 case mojom::PresentationMessageType::BLOB: { | 436 case mojom::PresentationMessageType::BLOB: { |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 523 PresentationDispatcher::AvailabilityStatus::AvailabilityStatus( | 523 PresentationDispatcher::AvailabilityStatus::AvailabilityStatus( |
| 524 const std::string& availability_url) | 524 const std::string& availability_url) |
| 525 : url(availability_url), | 525 : url(availability_url), |
| 526 last_known_availability(false), | 526 last_known_availability(false), |
| 527 listening_state(ListeningState::INACTIVE) {} | 527 listening_state(ListeningState::INACTIVE) {} |
| 528 | 528 |
| 529 PresentationDispatcher::AvailabilityStatus::~AvailabilityStatus() { | 529 PresentationDispatcher::AvailabilityStatus::~AvailabilityStatus() { |
| 530 } | 530 } |
| 531 | 531 |
| 532 } // namespace content | 532 } // namespace content |
| OLD | NEW |