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

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 after rebase 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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 const blink::WebString& message, 155 const blink::WebString& message,
156 const blink::WebPresentationConnectionProxy* connection_proxy) { 156 const blink::WebPresentationConnectionProxy* connection_proxy) {
157 if (message.utf8().size() > kMaxPresentationConnectionMessageSize) { 157 if (message.utf8().size() > kMaxPresentationConnectionMessageSize) {
158 // TODO(crbug.com/459008): Limit the size of individual messages to 64k 158 // TODO(crbug.com/459008): Limit the size of individual messages to 64k
159 // for now. Consider throwing DOMException or splitting bigger messages 159 // for now. Consider throwing DOMException or splitting bigger messages
160 // into smaller chunks later. 160 // into smaller chunks later.
161 LOG(WARNING) << "message size exceeded limit!"; 161 LOG(WARNING) << "message size exceeded limit!";
162 return; 162 return;
163 } 163 }
164 164
165 message_request_queue_.push_back( 165 message_request_queue_.push_back(CreateSendTextMessageRequest(
166 base::WrapUnique(CreateSendTextMessageRequest( 166 presentationUrl, presentationId, message, connection_proxy));
167 presentationUrl, presentationId, message, connection_proxy)));
168 // Start processing request if only one in the queue. 167 // Start processing request if only one in the queue.
169 if (message_request_queue_.size() == 1) 168 if (message_request_queue_.size() == 1)
170 DoSendMessage(message_request_queue_.front().get()); 169 DoSendMessage(message_request_queue_.front().get());
171 } 170 }
172 171
173 void PresentationDispatcher::sendArrayBuffer( 172 void PresentationDispatcher::sendArrayBuffer(
174 const blink::WebURL& presentationUrl, 173 const blink::WebURL& presentationUrl,
175 const blink::WebString& presentationId, 174 const blink::WebString& presentationId,
176 const uint8_t* data, 175 const uint8_t* data,
177 size_t length, 176 size_t length,
178 const blink::WebPresentationConnectionProxy* connection_proxy) { 177 const blink::WebPresentationConnectionProxy* connection_proxy) {
179 DCHECK(data); 178 DCHECK(data);
180 if (length > kMaxPresentationConnectionMessageSize) { 179 if (length > kMaxPresentationConnectionMessageSize) {
181 // TODO(crbug.com/459008): Same as in sendString(). 180 // TODO(crbug.com/459008): Same as in sendString().
182 LOG(WARNING) << "data size exceeded limit!"; 181 LOG(WARNING) << "data size exceeded limit!";
183 return; 182 return;
184 } 183 }
185 184
186 message_request_queue_.push_back( 185 message_request_queue_.push_back(CreateSendBinaryMessageRequest(
187 base::WrapUnique(CreateSendBinaryMessageRequest( 186 presentationUrl, presentationId, data, length, connection_proxy));
188 presentationUrl, presentationId,
189 blink::mojom::PresentationMessageType::BINARY, data, length,
190 connection_proxy)));
191 // Start processing request if only one in the queue. 187 // Start processing request if only one in the queue.
192 if (message_request_queue_.size() == 1) 188 if (message_request_queue_.size() == 1)
193 DoSendMessage(message_request_queue_.front().get()); 189 DoSendMessage(message_request_queue_.front().get());
194 } 190 }
195 191
196 void PresentationDispatcher::sendBlobData( 192 void PresentationDispatcher::sendBlobData(
197 const blink::WebURL& presentationUrl, 193 const blink::WebURL& presentationUrl,
198 const blink::WebString& presentationId, 194 const blink::WebString& presentationId,
199 const uint8_t* data, 195 const uint8_t* data,
200 size_t length, 196 size_t length,
201 const blink::WebPresentationConnectionProxy* connection_proxy) { 197 const blink::WebPresentationConnectionProxy* connection_proxy) {
202 DCHECK(data); 198 DCHECK(data);
203 if (length > kMaxPresentationConnectionMessageSize) { 199 if (length > kMaxPresentationConnectionMessageSize) {
204 // TODO(crbug.com/459008): Same as in sendString(). 200 // TODO(crbug.com/459008): Same as in sendString().
205 LOG(WARNING) << "data size exceeded limit!"; 201 LOG(WARNING) << "data size exceeded limit!";
206 return; 202 return;
207 } 203 }
208 204
209 message_request_queue_.push_back( 205 message_request_queue_.push_back(CreateSendBinaryMessageRequest(
210 base::WrapUnique(CreateSendBinaryMessageRequest( 206 presentationUrl, presentationId, data, length, connection_proxy));
211 presentationUrl, presentationId,
212 blink::mojom::PresentationMessageType::BINARY, data, length,
213 connection_proxy)));
214 // Start processing request if only one in the queue. 207 // Start processing request if only one in the queue.
215 if (message_request_queue_.size() == 1) 208 if (message_request_queue_.size() == 1)
216 DoSendMessage(message_request_queue_.front().get()); 209 DoSendMessage(message_request_queue_.front().get());
217 } 210 }
218 211
219 void PresentationDispatcher::DoSendMessage(SendMessageRequest* request) { 212 void PresentationDispatcher::DoSendMessage(SendMessageRequest* request) {
220 DCHECK(request->connection_proxy); 213 DCHECK(request->connection_proxy);
221 // 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
222 // from PresentationDispatcher to PresentationConnectionProxy. 215 // from PresentationDispatcher to PresentationConnectionProxy.
223 static_cast<const PresentationConnectionProxy*>(request->connection_proxy) 216 static_cast<const PresentationConnectionProxy*>(request->connection_proxy)
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 controller_->didCloseConnection( 594 controller_->didCloseConnection(
602 blink::WebPresentationSessionInfo( 595 blink::WebPresentationSessionInfo(
603 session_info.presentation_url, 596 session_info.presentation_url,
604 blink::WebString::fromUTF8(session_info.presentation_id)), 597 blink::WebString::fromUTF8(session_info.presentation_id)),
605 GetWebPresentationConnectionCloseReason(reason), 598 GetWebPresentationConnectionCloseReason(reason),
606 blink::WebString::fromUTF8(message)); 599 blink::WebString::fromUTF8(message));
607 } 600 }
608 601
609 void PresentationDispatcher::OnConnectionMessagesReceived( 602 void PresentationDispatcher::OnConnectionMessagesReceived(
610 const PresentationSessionInfo& session_info, 603 const PresentationSessionInfo& session_info,
611 std::vector<blink::mojom::ConnectionMessagePtr> messages) { 604 std::vector<PresentationConnectionMessage> messages) {
612 if (!controller_) 605 if (!controller_)
613 return; 606 return;
614 607
615 for (size_t i = 0; i < messages.size(); ++i) { 608 for (size_t i = 0; i < messages.size(); ++i) {
616 // Note: Passing batches of messages to the Blink layer would be more 609 // Note: Passing batches of messages to the Blink layer would be more
617 // efficient. 610 // efficient.
618 auto web_session_info = blink::WebPresentationSessionInfo( 611 auto web_session_info = blink::WebPresentationSessionInfo(
619 session_info.presentation_url, 612 session_info.presentation_url,
620 blink::WebString::fromUTF8(session_info.presentation_id)); 613 blink::WebString::fromUTF8(session_info.presentation_id));
621 614
622 switch (messages[i]->type) { 615 if (messages[i].is_binary()) {
623 case blink::mojom::PresentationMessageType::TEXT: { 616 controller_->didReceiveSessionBinaryMessage(web_session_info,
624 // TODO(mfoltz): Do we need to DCHECK(messages[i]->message)? 617 &(messages[i].data->front()),
625 controller_->didReceiveSessionTextMessage( 618 messages[i].data->size());
626 web_session_info, 619 } else {
627 blink::WebString::fromUTF8(messages[i]->message.value())); 620 DCHECK(messages[i].message);
628 break; 621 controller_->didReceiveSessionTextMessage(
629 } 622 web_session_info, blink::WebString::fromUTF8(*messages[i].message));
630 case blink::mojom::PresentationMessageType::BINARY: {
631 // TODO(mfoltz): Do we need to DCHECK(messages[i]->data)?
632 controller_->didReceiveSessionBinaryMessage(
633 web_session_info, &(messages[i]->data->front()),
634 messages[i]->data->size());
635 break;
636 }
637 default: {
638 NOTREACHED();
639 break;
640 }
641 } 623 }
642 } 624 }
643 } 625 }
644 626
645 void PresentationDispatcher::ConnectToPresentationServiceIfNeeded() { 627 void PresentationDispatcher::ConnectToPresentationServiceIfNeeded() {
646 if (presentation_service_.get()) 628 if (presentation_service_.get())
647 return; 629 return;
648 630
649 render_frame()->GetRemoteInterfaces()->GetInterface(&presentation_service_); 631 render_frame()->GetRemoteInterfaces()->GetInterface(&presentation_service_);
650 presentation_service_->SetClient(binding_.CreateInterfacePtrAndBind()); 632 presentation_service_->SetClient(binding_.CreateInterfacePtrAndBind());
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 status ? status->last_known_availability : ScreenAvailability::UNKNOWN; 726 status ? status->last_known_availability : ScreenAvailability::UNKNOWN;
745 current_availability = 727 current_availability =
746 std::max(current_availability, static_cast<int>(screen_availability)); 728 std::max(current_availability, static_cast<int>(screen_availability));
747 } 729 }
748 730
749 return static_cast<ScreenAvailability>(current_availability); 731 return static_cast<ScreenAvailability>(current_availability);
750 } 732 }
751 733
752 PresentationDispatcher::SendMessageRequest::SendMessageRequest( 734 PresentationDispatcher::SendMessageRequest::SendMessageRequest(
753 const PresentationSessionInfo& session_info, 735 const PresentationSessionInfo& session_info,
754 blink::mojom::ConnectionMessagePtr message, 736 PresentationConnectionMessage connection_message,
755 const blink::WebPresentationConnectionProxy* connection_proxy) 737 const blink::WebPresentationConnectionProxy* connection_proxy)
756 : session_info(session_info), 738 : session_info(session_info),
757 message(std::move(message)), 739 message(std::move(connection_message)),
758 connection_proxy(connection_proxy) {} 740 connection_proxy(connection_proxy) {}
759 741
760 PresentationDispatcher::SendMessageRequest::~SendMessageRequest() {} 742 PresentationDispatcher::SendMessageRequest::~SendMessageRequest() {}
761 743
762 // static 744 // static
763 PresentationDispatcher::SendMessageRequest* 745 std::unique_ptr<PresentationDispatcher::SendMessageRequest>
764 PresentationDispatcher::CreateSendTextMessageRequest( 746 PresentationDispatcher::CreateSendTextMessageRequest(
765 const blink::WebURL& presentationUrl, 747 const blink::WebURL& presentationUrl,
766 const blink::WebString& presentationId, 748 const blink::WebString& presentationId,
767 const blink::WebString& message, 749 const blink::WebString& message,
768 const blink::WebPresentationConnectionProxy* connection_proxy) { 750 const blink::WebPresentationConnectionProxy* connection_proxy) {
769 PresentationSessionInfo session_info(GURL(presentationUrl), 751 PresentationSessionInfo session_info(GURL(presentationUrl),
770 presentationId.utf8()); 752 presentationId.utf8());
771 753
772 blink::mojom::ConnectionMessagePtr session_message = 754 return base::MakeUnique<SendMessageRequest>(
773 blink::mojom::ConnectionMessage::New(); 755 session_info, PresentationConnectionMessage(message.utf8()),
774 session_message->type = blink::mojom::PresentationMessageType::TEXT; 756 connection_proxy);
775 session_message->message = message.utf8();
776 return new SendMessageRequest(session_info, std::move(session_message),
777 connection_proxy);
778 } 757 }
779 758
780 // static 759 // static
781 PresentationDispatcher::SendMessageRequest* 760 std::unique_ptr<PresentationDispatcher::SendMessageRequest>
782 PresentationDispatcher::CreateSendBinaryMessageRequest( 761 PresentationDispatcher::CreateSendBinaryMessageRequest(
783 const blink::WebURL& presentationUrl, 762 const blink::WebURL& presentationUrl,
784 const blink::WebString& presentationId, 763 const blink::WebString& presentationId,
785 blink::mojom::PresentationMessageType type,
786 const uint8_t* data, 764 const uint8_t* data,
787 size_t length, 765 size_t length,
788 const blink::WebPresentationConnectionProxy* connection_proxy) { 766 const blink::WebPresentationConnectionProxy* connection_proxy) {
789 PresentationSessionInfo session_info(GURL(presentationUrl), 767 PresentationSessionInfo session_info(GURL(presentationUrl),
790 presentationId.utf8()); 768 presentationId.utf8());
791 769 return base::MakeUnique<SendMessageRequest>(
792 blink::mojom::ConnectionMessagePtr session_message = 770 session_info,
793 blink::mojom::ConnectionMessage::New(); 771 PresentationConnectionMessage(std::vector<uint8_t>(data, data + length)),
794 session_message->type = type; 772 connection_proxy);
795 session_message->data = std::vector<uint8_t>(data, data + length);
796 return new SendMessageRequest(session_info, std::move(session_message),
797 connection_proxy);
798 } 773 }
799 774
800 PresentationDispatcher::AvailabilityListener::AvailabilityListener( 775 PresentationDispatcher::AvailabilityListener::AvailabilityListener(
801 const std::vector<GURL>& availability_urls) 776 const std::vector<GURL>& availability_urls)
802 : urls(availability_urls) {} 777 : urls(availability_urls) {}
803 778
804 PresentationDispatcher::AvailabilityListener::~AvailabilityListener() {} 779 PresentationDispatcher::AvailabilityListener::~AvailabilityListener() {}
805 780
806 PresentationDispatcher::ListeningStatus::ListeningStatus( 781 PresentationDispatcher::ListeningStatus::ListeningStatus(
807 const GURL& availability_url) 782 const GURL& availability_url)
808 : url(availability_url), 783 : url(availability_url),
809 last_known_availability(ScreenAvailability::UNKNOWN), 784 last_known_availability(ScreenAvailability::UNKNOWN),
810 listening_state(ListeningState::INACTIVE) {} 785 listening_state(ListeningState::INACTIVE) {}
811 786
812 PresentationDispatcher::ListeningStatus::~ListeningStatus() {} 787 PresentationDispatcher::ListeningStatus::~ListeningStatus() {}
813 788
814 } // namespace content 789 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698