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

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

Issue 2706463002: [Presentation API] Mojo typemap for content::PresentationConnectionMessage (Closed)
Patch Set: Fix compile error in presentation_connection_message Created 3 years, 9 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 <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "base/stl_util.h" 14 #include "base/stl_util.h"
15 #include "base/threading/thread_task_runner_handle.h" 15 #include "base/threading/thread_task_runner_handle.h"
16 #include "content/public/common/presentation_constants.h" 16 #include "content/public/common/presentation_connection_message.h"
17 #include "content/public/renderer/render_frame.h" 17 #include "content/public/renderer/render_frame.h"
18 #include "content/renderer/presentation/presentation_connection_proxy.h" 18 #include "content/renderer/presentation/presentation_connection_proxy.h"
19 #include "services/service_manager/public/cpp/interface_provider.h" 19 #include "services/service_manager/public/cpp/interface_provider.h"
20 #include "third_party/WebKit/public/platform/WebString.h" 20 #include "third_party/WebKit/public/platform/WebString.h"
21 #include "third_party/WebKit/public/platform/WebURL.h" 21 #include "third_party/WebKit/public/platform/WebURL.h"
22 #include "third_party/WebKit/public/platform/WebVector.h" 22 #include "third_party/WebKit/public/platform/WebVector.h"
23 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nAvailabilityObserver.h" 23 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nAvailabilityObserver.h"
24 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nConnection.h" 24 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nConnection.h"
25 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nConnectionCallbacks.h" 25 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nConnectionCallbacks.h"
26 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nController.h" 26 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nController.h"
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 size_t length, 176 size_t length,
177 const blink::WebPresentationConnectionProxy* connection_proxy) { 177 const blink::WebPresentationConnectionProxy* connection_proxy) {
178 DCHECK(data); 178 DCHECK(data);
179 if (length > kMaxPresentationConnectionMessageSize) { 179 if (length > kMaxPresentationConnectionMessageSize) {
180 // TODO(crbug.com/459008): Same as in sendString(). 180 // TODO(crbug.com/459008): Same as in sendString().
181 LOG(WARNING) << "data size exceeded limit!"; 181 LOG(WARNING) << "data size exceeded limit!";
182 return; 182 return;
183 } 183 }
184 184
185 message_request_queue_.push(base::WrapUnique(CreateSendBinaryMessageRequest( 185 message_request_queue_.push(base::WrapUnique(CreateSendBinaryMessageRequest(
186 presentationUrl, presentationId, 186 presentationUrl, presentationId, data, length, connection_proxy)));
187 blink::mojom::PresentationMessageType::BINARY, data, length,
188 connection_proxy)));
189 // Start processing request if only one in the queue. 187 // Start processing request if only one in the queue.
190 if (message_request_queue_.size() == 1) 188 if (message_request_queue_.size() == 1)
191 DoSendMessage(message_request_queue_.front().get()); 189 DoSendMessage(message_request_queue_.front().get());
192 } 190 }
193 191
194 void PresentationDispatcher::sendBlobData( 192 void PresentationDispatcher::sendBlobData(
195 const blink::WebURL& presentationUrl, 193 const blink::WebURL& presentationUrl,
196 const blink::WebString& presentationId, 194 const blink::WebString& presentationId,
197 const uint8_t* data, 195 const uint8_t* data,
198 size_t length, 196 size_t length,
199 const blink::WebPresentationConnectionProxy* connection_proxy) { 197 const blink::WebPresentationConnectionProxy* connection_proxy) {
200 DCHECK(data); 198 DCHECK(data);
201 if (length > kMaxPresentationConnectionMessageSize) { 199 if (length > kMaxPresentationConnectionMessageSize) {
202 // TODO(crbug.com/459008): Same as in sendString(). 200 // TODO(crbug.com/459008): Same as in sendString().
203 LOG(WARNING) << "data size exceeded limit!"; 201 LOG(WARNING) << "data size exceeded limit!";
204 return; 202 return;
205 } 203 }
206 204
207 message_request_queue_.push(base::WrapUnique(CreateSendBinaryMessageRequest( 205 message_request_queue_.push(base::WrapUnique(CreateSendBinaryMessageRequest(
208 presentationUrl, presentationId, 206 presentationUrl, presentationId, data, length, connection_proxy)));
209 blink::mojom::PresentationMessageType::BINARY, data, length,
210 connection_proxy)));
211 // Start processing request if only one in the queue. 207 // Start processing request if only one in the queue.
212 if (message_request_queue_.size() == 1) 208 if (message_request_queue_.size() == 1)
213 DoSendMessage(message_request_queue_.front().get()); 209 DoSendMessage(message_request_queue_.front().get());
214 } 210 }
215 211
216 void PresentationDispatcher::DoSendMessage(SendMessageRequest* request) { 212 void PresentationDispatcher::DoSendMessage(SendMessageRequest* request) {
217 DCHECK(request->connection_proxy); 213 DCHECK(request->connection_proxy);
218 // TODO(crbug.com/684116): Remove static_cast after moving message queue logic 214 // TODO(crbug.com/684116): Remove static_cast after moving message queue logic
219 // from PresentationDispatcher to PresentationConnectionProxy. 215 // from PresentationDispatcher to PresentationConnectionProxy.
220 static_cast<const PresentationConnectionProxy*>(request->connection_proxy) 216 static_cast<const PresentationConnectionProxy*>(request->connection_proxy)
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 controller_->didCloseConnection( 569 controller_->didCloseConnection(
574 blink::WebPresentationSessionInfo( 570 blink::WebPresentationSessionInfo(
575 session_info.presentation_url, 571 session_info.presentation_url,
576 blink::WebString::fromUTF8(session_info.presentation_id)), 572 blink::WebString::fromUTF8(session_info.presentation_id)),
577 GetWebPresentationConnectionCloseReason(reason), 573 GetWebPresentationConnectionCloseReason(reason),
578 blink::WebString::fromUTF8(message)); 574 blink::WebString::fromUTF8(message));
579 } 575 }
580 576
581 void PresentationDispatcher::OnConnectionMessagesReceived( 577 void PresentationDispatcher::OnConnectionMessagesReceived(
582 const PresentationSessionInfo& session_info, 578 const PresentationSessionInfo& session_info,
583 std::vector<blink::mojom::ConnectionMessagePtr> messages) { 579 const std::vector<PresentationConnectionMessage>& messages) {
584 if (!controller_) 580 if (!controller_)
585 return; 581 return;
586 582
587 for (size_t i = 0; i < messages.size(); ++i) { 583 for (size_t i = 0; i < messages.size(); ++i) {
588 // Note: Passing batches of messages to the Blink layer would be more 584 // Note: Passing batches of messages to the Blink layer would be more
589 // efficient. 585 // efficient.
590 auto web_session_info = blink::WebPresentationSessionInfo( 586 auto web_session_info = blink::WebPresentationSessionInfo(
591 session_info.presentation_url, 587 session_info.presentation_url,
592 blink::WebString::fromUTF8(session_info.presentation_id)); 588 blink::WebString::fromUTF8(session_info.presentation_id));
593 589
594 switch (messages[i]->type) { 590 if (messages[i].is_binary()) {
595 case blink::mojom::PresentationMessageType::TEXT: { 591 controller_->didReceiveSessionBinaryMessage(web_session_info,
596 // TODO(mfoltz): Do we need to DCHECK(messages[i]->message)? 592 &(messages[i].data->front()),
597 controller_->didReceiveSessionTextMessage( 593 messages[i].data->size());
598 web_session_info, 594 } else {
599 blink::WebString::fromUTF8(messages[i]->message.value())); 595 DCHECK(messages[i].message);
600 break; 596 controller_->didReceiveSessionTextMessage(
601 } 597 web_session_info, blink::WebString::fromUTF8(*messages[i].message));
602 case blink::mojom::PresentationMessageType::BINARY: {
603 // TODO(mfoltz): Do we need to DCHECK(messages[i]->data)?
604 controller_->didReceiveSessionBinaryMessage(
605 web_session_info, &(messages[i]->data->front()),
606 messages[i]->data->size());
607 break;
608 }
609 default: {
610 NOTREACHED();
611 break;
612 }
613 } 598 }
614 } 599 }
615 } 600 }
616 601
617 void PresentationDispatcher::ConnectToPresentationServiceIfNeeded() { 602 void PresentationDispatcher::ConnectToPresentationServiceIfNeeded() {
618 if (presentation_service_.get()) 603 if (presentation_service_.get())
619 return; 604 return;
620 605
621 render_frame()->GetRemoteInterfaces()->GetInterface(&presentation_service_); 606 render_frame()->GetRemoteInterfaces()->GetInterface(&presentation_service_);
622 presentation_service_->SetClient(binding_.CreateInterfacePtrAndBind()); 607 presentation_service_->SetClient(binding_.CreateInterfacePtrAndBind());
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 status ? status->last_known_availability : ScreenAvailability::UNKNOWN; 701 status ? status->last_known_availability : ScreenAvailability::UNKNOWN;
717 current_availability = 702 current_availability =
718 std::max(current_availability, static_cast<int>(screen_availability)); 703 std::max(current_availability, static_cast<int>(screen_availability));
719 } 704 }
720 705
721 return static_cast<ScreenAvailability>(current_availability); 706 return static_cast<ScreenAvailability>(current_availability);
722 } 707 }
723 708
724 PresentationDispatcher::SendMessageRequest::SendMessageRequest( 709 PresentationDispatcher::SendMessageRequest::SendMessageRequest(
725 const PresentationSessionInfo& session_info, 710 const PresentationSessionInfo& session_info,
726 blink::mojom::ConnectionMessagePtr message, 711 PresentationConnectionMessage connection_message,
727 const blink::WebPresentationConnectionProxy* connection_proxy) 712 const blink::WebPresentationConnectionProxy* connection_proxy)
728 : session_info(session_info), 713 : session_info(session_info),
729 message(std::move(message)), 714 message(std::move(connection_message)),
730 connection_proxy(connection_proxy) {} 715 connection_proxy(connection_proxy) {}
731 716
732 PresentationDispatcher::SendMessageRequest::~SendMessageRequest() {} 717 PresentationDispatcher::SendMessageRequest::~SendMessageRequest() {}
733 718
734 // static 719 // static
735 PresentationDispatcher::SendMessageRequest* 720 PresentationDispatcher::SendMessageRequest*
736 PresentationDispatcher::CreateSendTextMessageRequest( 721 PresentationDispatcher::CreateSendTextMessageRequest(
737 const blink::WebURL& presentationUrl, 722 const blink::WebURL& presentationUrl,
738 const blink::WebString& presentationId, 723 const blink::WebString& presentationId,
739 const blink::WebString& message, 724 const blink::WebString& message,
740 const blink::WebPresentationConnectionProxy* connection_proxy) { 725 const blink::WebPresentationConnectionProxy* connection_proxy) {
741 PresentationSessionInfo session_info(GURL(presentationUrl), 726 PresentationSessionInfo session_info(GURL(presentationUrl),
742 presentationId.utf8()); 727 presentationId.utf8());
743 728
744 blink::mojom::ConnectionMessagePtr session_message = 729 return new SendMessageRequest(session_info,
dcheng 2017/02/25 07:17:27 Please add a TODO to make this and the function be
mark a. foltz 2017/02/27 23:25:15 Done.
745 blink::mojom::ConnectionMessage::New(); 730 PresentationConnectionMessage(message.utf8()),
746 session_message->type = blink::mojom::PresentationMessageType::TEXT;
747 session_message->message = message.utf8();
748 return new SendMessageRequest(session_info, std::move(session_message),
749 connection_proxy); 731 connection_proxy);
750 } 732 }
751 733
752 // static 734 // static
753 PresentationDispatcher::SendMessageRequest* 735 PresentationDispatcher::SendMessageRequest*
754 PresentationDispatcher::CreateSendBinaryMessageRequest( 736 PresentationDispatcher::CreateSendBinaryMessageRequest(
755 const blink::WebURL& presentationUrl, 737 const blink::WebURL& presentationUrl,
756 const blink::WebString& presentationId, 738 const blink::WebString& presentationId,
757 blink::mojom::PresentationMessageType type,
758 const uint8_t* data, 739 const uint8_t* data,
759 size_t length, 740 size_t length,
760 const blink::WebPresentationConnectionProxy* connection_proxy) { 741 const blink::WebPresentationConnectionProxy* connection_proxy) {
761 PresentationSessionInfo session_info(GURL(presentationUrl), 742 PresentationSessionInfo session_info(GURL(presentationUrl),
762 presentationId.utf8()); 743 presentationId.utf8());
763 744 return new SendMessageRequest(
764 blink::mojom::ConnectionMessagePtr session_message = 745 session_info,
765 blink::mojom::ConnectionMessage::New(); 746 PresentationConnectionMessage(std::vector<uint8_t>(data, data + length)),
766 session_message->type = type; 747 connection_proxy);
767 session_message->data = std::vector<uint8_t>(data, data + length);
768 return new SendMessageRequest(session_info, std::move(session_message),
769 connection_proxy);
770 } 748 }
771 749
772 PresentationDispatcher::AvailabilityListener::AvailabilityListener( 750 PresentationDispatcher::AvailabilityListener::AvailabilityListener(
773 const std::vector<GURL>& availability_urls) 751 const std::vector<GURL>& availability_urls)
774 : urls(availability_urls) {} 752 : urls(availability_urls) {}
775 753
776 PresentationDispatcher::AvailabilityListener::~AvailabilityListener() {} 754 PresentationDispatcher::AvailabilityListener::~AvailabilityListener() {}
777 755
778 PresentationDispatcher::ListeningStatus::ListeningStatus( 756 PresentationDispatcher::ListeningStatus::ListeningStatus(
779 const GURL& availability_url) 757 const GURL& availability_url)
780 : url(availability_url), 758 : url(availability_url),
781 last_known_availability(ScreenAvailability::UNKNOWN), 759 last_known_availability(ScreenAvailability::UNKNOWN),
782 listening_state(ListeningState::INACTIVE) {} 760 listening_state(ListeningState::INACTIVE) {}
783 761
784 PresentationDispatcher::ListeningStatus::~ListeningStatus() {} 762 PresentationDispatcher::ListeningStatus::~ListeningStatus() {}
785 763
786 } // namespace content 764 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698