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 |