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 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 | 306 |
307 // Remove all pending send message requests. | 307 // Remove all pending send message requests. |
308 MessageRequestQueue empty; | 308 MessageRequestQueue empty; |
309 std::swap(message_request_queue_, empty); | 309 std::swap(message_request_queue_, empty); |
310 } | 310 } |
311 | 311 |
312 void PresentationDispatcher::OnDestruct() { | 312 void PresentationDispatcher::OnDestruct() { |
313 delete this; | 313 delete this; |
314 } | 314 } |
315 | 315 |
316 void PresentationDispatcher::OnScreenAvailabilityUpdated( | 316 void PresentationDispatcher::OnScreenAvailabilityUpdated(const std::string& url, |
317 const mojo::String& url, bool available) { | 317 bool available) { |
318 const std::string& availability_url = url.get(); | 318 auto status_it = availability_status_.find(url); |
319 auto status_it = availability_status_.find(availability_url); | |
320 if (status_it == availability_status_.end()) | 319 if (status_it == availability_status_.end()) |
321 return; | 320 return; |
322 AvailabilityStatus* status = status_it->second.get(); | 321 AvailabilityStatus* status = status_it->second.get(); |
323 DCHECK(status); | 322 DCHECK(status); |
324 | 323 |
325 if (status->listening_state == ListeningState::WAITING) | 324 if (status->listening_state == ListeningState::WAITING) |
326 status->listening_state = ListeningState::ACTIVE; | 325 status->listening_state = ListeningState::ACTIVE; |
327 | 326 |
328 for (auto* observer : status->availability_observers) | 327 for (auto* observer : status->availability_observers) |
329 observer->availabilityChanged(available); | 328 observer->availabilityChanged(available); |
330 | 329 |
331 for (AvailabilityCallbacksMap::iterator iter(&status->availability_callbacks); | 330 for (AvailabilityCallbacksMap::iterator iter(&status->availability_callbacks); |
332 !iter.IsAtEnd(); iter.Advance()) { | 331 !iter.IsAtEnd(); iter.Advance()) { |
333 iter.GetCurrentValue()->onSuccess(available); | 332 iter.GetCurrentValue()->onSuccess(available); |
334 } | 333 } |
335 status->last_known_availability = available; | 334 status->last_known_availability = available; |
336 status->availability_callbacks.Clear(); | 335 status->availability_callbacks.Clear(); |
337 UpdateListeningState(status); | 336 UpdateListeningState(status); |
338 } | 337 } |
339 | 338 |
340 void PresentationDispatcher::OnScreenAvailabilityNotSupported( | 339 void PresentationDispatcher::OnScreenAvailabilityNotSupported( |
341 const mojo::String& url) { | 340 const std::string& url) { |
342 const std::string& availability_url = url.get(); | 341 auto status_it = availability_status_.find(url); |
343 auto status_it = availability_status_.find(availability_url); | |
344 if (status_it == availability_status_.end()) | 342 if (status_it == availability_status_.end()) |
345 return; | 343 return; |
346 AvailabilityStatus* status = status_it->second.get(); | 344 AvailabilityStatus* status = status_it->second.get(); |
347 DCHECK(status); | 345 DCHECK(status); |
348 DCHECK(status->listening_state == ListeningState::WAITING); | 346 DCHECK(status->listening_state == ListeningState::WAITING); |
349 | 347 |
350 const blink::WebString& not_supported_error = blink::WebString::fromUTF8( | 348 const blink::WebString& not_supported_error = blink::WebString::fromUTF8( |
351 "getAvailability() isn't supported at the moment. It can be due to " | 349 "getAvailability() isn't supported at the moment. It can be due to " |
352 "a permanent or temporary system limitation. It is recommended to " | 350 "a permanent or temporary system limitation. It is recommended to " |
353 "try to blindly start a session in that case."); | 351 "try to blindly start a session in that case."); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 | 398 |
401 DCHECK(!connection.is_null()); | 399 DCHECK(!connection.is_null()); |
402 controller_->didChangeSessionState( | 400 controller_->didChangeSessionState( |
403 new PresentationConnectionClient(std::move(connection)), | 401 new PresentationConnectionClient(std::move(connection)), |
404 GetWebPresentationConnectionStateFromMojo(state)); | 402 GetWebPresentationConnectionStateFromMojo(state)); |
405 } | 403 } |
406 | 404 |
407 void PresentationDispatcher::OnConnectionClosed( | 405 void PresentationDispatcher::OnConnectionClosed( |
408 blink::mojom::PresentationSessionInfoPtr connection, | 406 blink::mojom::PresentationSessionInfoPtr connection, |
409 blink::mojom::PresentationConnectionCloseReason reason, | 407 blink::mojom::PresentationConnectionCloseReason reason, |
410 const mojo::String& message) { | 408 const std::string& message) { |
411 if (!controller_) | 409 if (!controller_) |
412 return; | 410 return; |
413 | 411 |
414 DCHECK(!connection.is_null()); | 412 DCHECK(!connection.is_null()); |
415 controller_->didCloseConnection( | 413 controller_->didCloseConnection( |
416 new PresentationConnectionClient(std::move(connection)), | 414 new PresentationConnectionClient(std::move(connection)), |
417 GetWebPresentationConnectionCloseReasonFromMojo(reason), | 415 GetWebPresentationConnectionCloseReasonFromMojo(reason), |
418 blink::WebString::fromUTF8(message)); | 416 blink::WebString::fromUTF8(message)); |
419 } | 417 } |
420 | 418 |
421 void PresentationDispatcher::OnSessionMessagesReceived( | 419 void PresentationDispatcher::OnSessionMessagesReceived( |
422 blink::mojom::PresentationSessionInfoPtr session_info, | 420 blink::mojom::PresentationSessionInfoPtr session_info, |
423 mojo::Array<blink::mojom::SessionMessagePtr> messages) { | 421 std::vector<blink::mojom::SessionMessagePtr> messages) { |
424 if (!controller_) | 422 if (!controller_) |
425 return; | 423 return; |
426 | 424 |
427 for (size_t i = 0; i < messages.size(); ++i) { | 425 for (size_t i = 0; i < messages.size(); ++i) { |
428 // Note: Passing batches of messages to the Blink layer would be more | 426 // Note: Passing batches of messages to the Blink layer would be more |
429 // efficient. | 427 // efficient. |
430 std::unique_ptr<PresentationConnectionClient> session_client( | 428 std::unique_ptr<PresentationConnectionClient> session_client( |
431 new PresentationConnectionClient(session_info->url, session_info->id)); | 429 new PresentationConnectionClient(session_info->url, session_info->id)); |
432 switch (messages[i]->type) { | 430 switch (messages[i]->type) { |
433 case blink::mojom::PresentationMessageType::TEXT: { | 431 case blink::mojom::PresentationMessageType::TEXT: { |
| 432 // TODO(mfoltz): Do we need to DCHECK(messages[i]->message)? |
434 controller_->didReceiveSessionTextMessage( | 433 controller_->didReceiveSessionTextMessage( |
435 session_client.release(), | 434 session_client.release(), |
436 blink::WebString::fromUTF8(messages[i]->message)); | 435 blink::WebString::fromUTF8(messages[i]->message.value())); |
437 break; | 436 break; |
438 } | 437 } |
439 case blink::mojom::PresentationMessageType::ARRAY_BUFFER: | 438 case blink::mojom::PresentationMessageType::ARRAY_BUFFER: |
440 case blink::mojom::PresentationMessageType::BLOB: { | 439 case blink::mojom::PresentationMessageType::BLOB: { |
| 440 // TODO(mfoltz): Do we need to DCHECK(messages[i]->data)? |
441 controller_->didReceiveSessionBinaryMessage( | 441 controller_->didReceiveSessionBinaryMessage( |
442 session_client.release(), &(messages[i]->data.front()), | 442 session_client.release(), &(messages[i]->data->front()), |
443 messages[i]->data.size()); | 443 messages[i]->data->size()); |
444 break; | 444 break; |
445 } | 445 } |
446 default: { | 446 default: { |
447 NOTREACHED(); | 447 NOTREACHED(); |
448 break; | 448 break; |
449 } | 449 } |
450 } | 450 } |
451 } | 451 } |
452 } | 452 } |
453 | 453 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 const uint8_t* data, | 512 const uint8_t* data, |
513 size_t length) { | 513 size_t length) { |
514 blink::mojom::PresentationSessionInfoPtr session_info = | 514 blink::mojom::PresentationSessionInfoPtr session_info = |
515 blink::mojom::PresentationSessionInfo::New(); | 515 blink::mojom::PresentationSessionInfo::New(); |
516 session_info->url = presentationUrl.utf8(); | 516 session_info->url = presentationUrl.utf8(); |
517 session_info->id = presentationId.utf8(); | 517 session_info->id = presentationId.utf8(); |
518 | 518 |
519 blink::mojom::SessionMessagePtr session_message = | 519 blink::mojom::SessionMessagePtr session_message = |
520 blink::mojom::SessionMessage::New(); | 520 blink::mojom::SessionMessage::New(); |
521 session_message->type = type; | 521 session_message->type = type; |
522 std::vector<uint8_t> tmp_data_vector(data, data + length); | 522 session_message->data = std::vector<uint8_t>(data, data + length); |
523 session_message->data.Swap(&tmp_data_vector); | |
524 return new SendMessageRequest(std::move(session_info), | 523 return new SendMessageRequest(std::move(session_info), |
525 std::move(session_message)); | 524 std::move(session_message)); |
526 } | 525 } |
527 | 526 |
528 PresentationDispatcher::AvailabilityStatus::AvailabilityStatus( | 527 PresentationDispatcher::AvailabilityStatus::AvailabilityStatus( |
529 const std::string& availability_url) | 528 const std::string& availability_url) |
530 : url(availability_url), | 529 : url(availability_url), |
531 last_known_availability(false), | 530 last_known_availability(false), |
532 listening_state(ListeningState::INACTIVE) {} | 531 listening_state(ListeningState::INACTIVE) {} |
533 | 532 |
534 PresentationDispatcher::AvailabilityStatus::~AvailabilityStatus() { | 533 PresentationDispatcher::AvailabilityStatus::~AvailabilityStatus() { |
535 } | 534 } |
536 | 535 |
537 } // namespace content | 536 } // namespace content |
OLD | NEW |