Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(240)

Side by Side Diff: content/renderer/presentation/presentation_dispatcher.cc

Issue 2181163003: [Presentation API] Convert presentation.mojom to new wrapper types. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Respond to dcheng@ comments Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « content/renderer/presentation/presentation_dispatcher.h ('k') | third_party/WebKit/public/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698