| 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 |