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

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

Issue 2674273003: Revert of [Presentation API] (5th) (1-UA) integrate controller and receiver side for 1-UA messaging (Closed)
Patch Set: Created 3 years, 10 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
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 message_request_queue_.push(base::WrapUnique(CreateSendBinaryMessageRequest( 207 message_request_queue_.push(base::WrapUnique(CreateSendBinaryMessageRequest(
208 presentationUrl, presentationId, 208 presentationUrl, presentationId,
209 blink::mojom::PresentationMessageType::BINARY, data, length, 209 blink::mojom::PresentationMessageType::BINARY, data, length,
210 connection_proxy))); 210 connection_proxy)));
211 // Start processing request if only one in the queue. 211 // Start processing request if only one in the queue.
212 if (message_request_queue_.size() == 1) 212 if (message_request_queue_.size() == 1)
213 DoSendMessage(message_request_queue_.front().get()); 213 DoSendMessage(message_request_queue_.front().get());
214 } 214 }
215 215
216 void PresentationDispatcher::DoSendMessage(SendMessageRequest* request) { 216 void PresentationDispatcher::DoSendMessage(SendMessageRequest* request) {
217 DCHECK(request->connection_proxy); 217 ConnectToPresentationServiceIfNeeded();
218 // TODO(crbug.com/684116): Remove static_cast after moving message queue logic 218
219 // from PresentationDispatcher to PresentationConnectionProxy. 219 presentation_service_->SendConnectionMessage(
220 static_cast<const PresentationConnectionProxy*>(request->connection_proxy) 220 std::move(request->session_info), std::move(request->message),
221 ->SendConnectionMessage( 221 base::Bind(&PresentationDispatcher::HandleSendMessageRequests,
222 std::move(request->message), 222 base::Unretained(this)));
223 base::Bind(&PresentationDispatcher::HandleSendMessageRequests,
224 base::Unretained(this)));
225 } 223 }
226 224
227 void PresentationDispatcher::HandleSendMessageRequests(bool success) { 225 void PresentationDispatcher::HandleSendMessageRequests(bool success) {
228 // In normal cases, message_request_queue_ should not be empty at this point 226 // In normal cases, message_request_queue_ should not be empty at this point
229 // of time, but when DidCommitProvisionalLoad() is invoked before receiving 227 // of time, but when DidCommitProvisionalLoad() is invoked before receiving
230 // the callback for previous send mojo call, queue would have been emptied. 228 // the callback for previous send mojo call, queue would have been emptied.
231 if (message_request_queue_.empty()) 229 if (message_request_queue_.empty())
232 return; 230 return;
233 231
234 if (!success) { 232 if (!success) {
235 // PresentationServiceImpl is informing that Frame has been detached or 233 // PresentationServiceImpl is informing that Frame has been detached or
236 // navigated away. Invalidate all pending requests. 234 // navigated away. Invalidate all pending requests.
237 MessageRequestQueue empty; 235 MessageRequestQueue empty;
238 std::swap(message_request_queue_, empty); 236 std::swap(message_request_queue_, empty);
239 return; 237 return;
240 } 238 }
241 239
242 message_request_queue_.pop(); 240 message_request_queue_.pop();
243 if (!message_request_queue_.empty()) { 241 if (!message_request_queue_.empty()) {
244 DoSendMessage(message_request_queue_.front().get()); 242 DoSendMessage(message_request_queue_.front().get());
245 } 243 }
246 } 244 }
247 245
248 void PresentationDispatcher::SetControllerConnection(
249 const PresentationSessionInfo& session_info,
250 blink::WebPresentationConnection* connection) {
251 DCHECK(connection);
252
253 auto* controller_connection_proxy = new ControllerConnectionProxy(connection);
254 connection->bindProxy(base::WrapUnique(controller_connection_proxy));
255
256 ConnectToPresentationServiceIfNeeded();
257 presentation_service_->SetPresentationConnection(
258 session_info, controller_connection_proxy->Bind(),
259 controller_connection_proxy->MakeRemoteRequest());
260 }
261
262 void PresentationDispatcher::closeSession( 246 void PresentationDispatcher::closeSession(
263 const blink::WebURL& presentationUrl, 247 const blink::WebURL& presentationUrl,
264 const blink::WebString& presentationId) { 248 const blink::WebString& presentationId) {
265 ConnectToPresentationServiceIfNeeded(); 249 ConnectToPresentationServiceIfNeeded();
266 presentation_service_->CloseConnection(presentationUrl, 250 presentation_service_->CloseConnection(presentationUrl,
267 presentationId.utf8()); 251 presentationId.utf8());
268 } 252 }
269 253
270 void PresentationDispatcher::terminateSession( 254 void PresentationDispatcher::terminateSession(
271 const blink::WebURL& presentationUrl, 255 const blink::WebURL& presentationUrl,
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 467
484 for (auto* listener : modified_listeners) 468 for (auto* listener : modified_listeners)
485 TryRemoveAvailabilityListener(listener); 469 TryRemoveAvailabilityListener(listener);
486 } 470 }
487 471
488 void PresentationDispatcher::OnDefaultSessionStarted( 472 void PresentationDispatcher::OnDefaultSessionStarted(
489 const PresentationSessionInfo& session_info) { 473 const PresentationSessionInfo& session_info) {
490 if (!controller_) 474 if (!controller_)
491 return; 475 return;
492 476
477 presentation_service_->ListenForConnectionMessages(session_info);
493 auto* connection = 478 auto* connection =
494 controller_->didStartDefaultSession(blink::WebPresentationSessionInfo( 479 controller_->didStartDefaultSession(blink::WebPresentationSessionInfo(
495 session_info.presentation_url, 480 session_info.presentation_url,
496 blink::WebString::fromUTF8(session_info.presentation_id))); 481 blink::WebString::fromUTF8(session_info.presentation_id)));
497 482 connection->bindProxy(
498 if (connection) { 483 base::MakeUnique<ControllerConnectionProxy>(connection));
499 SetControllerConnection(session_info, connection);
500 // Change blink connection state to 'connected' before listening to
501 // connection message. Remove ListenForConnectionMessage() after
502 // TODO(crbug.com/687011): use BrowserPresentationConnectionProxy to send
503 // message from route to blink connection.
504 presentation_service_->ListenForConnectionMessages(session_info);
505 }
506 } 484 }
507 485
508 void PresentationDispatcher::OnSessionCreated( 486 void PresentationDispatcher::OnSessionCreated(
509 std::unique_ptr<blink::WebPresentationConnectionCallbacks> callback, 487 std::unique_ptr<blink::WebPresentationConnectionCallbacks> callback,
510 const base::Optional<PresentationSessionInfo>& session_info, 488 const base::Optional<PresentationSessionInfo>& session_info,
511 const base::Optional<PresentationError>& error) { 489 const base::Optional<PresentationError>& error) {
512 DCHECK(callback); 490 DCHECK(callback);
513 if (error) { 491 if (error) {
514 DCHECK(!session_info); 492 DCHECK(!session_info);
515 callback->onError(blink::WebPresentationError( 493 callback->onError(blink::WebPresentationError(
516 GetWebPresentationErrorType(error->error_type), 494 GetWebPresentationErrorType(error->error_type),
517 blink::WebString::fromUTF8(error->message))); 495 blink::WebString::fromUTF8(error->message)));
518 return; 496 return;
519 } 497 }
520 498
521 DCHECK(session_info); 499 DCHECK(session_info);
500 presentation_service_->ListenForConnectionMessages(session_info.value());
522 callback->onSuccess(blink::WebPresentationSessionInfo( 501 callback->onSuccess(blink::WebPresentationSessionInfo(
523 session_info->presentation_url, 502 session_info->presentation_url,
524 blink::WebString::fromUTF8(session_info->presentation_id))); 503 blink::WebString::fromUTF8(session_info->presentation_id)));
525 // Change blink connection state to 'connected' before listening to 504
526 // connection message. Remove ListenForConnectionMessage() after 505 auto* connection = callback->getConnection();
527 // TODO(crbug.com/687011): use BrowserPresentationConnectionProxy to send 506 connection->bindProxy(
528 // message from route to blink connection. 507 base::MakeUnique<ControllerConnectionProxy>(connection));
529 SetControllerConnection(session_info.value(), callback->getConnection());
530 presentation_service_->ListenForConnectionMessages(session_info.value());
531 } 508 }
532 509
533 void PresentationDispatcher::OnReceiverConnectionAvailable( 510 void PresentationDispatcher::OnReceiverConnectionAvailable(
534 const PresentationSessionInfo& session_info, 511 const PresentationSessionInfo& session_info,
535 blink::mojom::PresentationConnectionPtr controller_connection_ptr, 512 blink::mojom::PresentationConnectionPtr controller_connection_ptr,
536 blink::mojom::PresentationConnectionRequest receiver_connection_request) { 513 blink::mojom::PresentationConnectionRequest receiver_connection_request) {
537 DCHECK(receiver_); 514 DCHECK(receiver_);
538
539 // Bind receiver_connection_proxy with PresentationConnection in receiver 515 // Bind receiver_connection_proxy with PresentationConnection in receiver
540 // page. 516 // page.
541 auto* connection = receiver_->onReceiverConnectionAvailable( 517 auto* connection = receiver_->onReceiverConnectionAvailable(
542 blink::WebPresentationSessionInfo( 518 blink::WebPresentationSessionInfo(
543 session_info.presentation_url, 519 session_info.presentation_url,
544 blink::WebString::fromUTF8(session_info.presentation_id))); 520 blink::WebString::fromUTF8(session_info.presentation_id)));
545 auto* receiver_connection_proxy = new ReceiverConnectionProxy(connection); 521 auto* receiver_connection_proxy = new ReceiverConnectionProxy(connection);
546 connection->bindProxy(base::WrapUnique(receiver_connection_proxy)); 522 connection->bindProxy(base::WrapUnique(receiver_connection_proxy));
547 523
548 receiver_connection_proxy->Bind(std::move(receiver_connection_request)); 524 receiver_connection_proxy->Bind(std::move(receiver_connection_request));
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 753
778 PresentationDispatcher::ListeningStatus::ListeningStatus( 754 PresentationDispatcher::ListeningStatus::ListeningStatus(
779 const GURL& availability_url) 755 const GURL& availability_url)
780 : url(availability_url), 756 : url(availability_url),
781 last_known_availability(ScreenAvailability::UNKNOWN), 757 last_known_availability(ScreenAvailability::UNKNOWN),
782 listening_state(ListeningState::INACTIVE) {} 758 listening_state(ListeningState::INACTIVE) {}
783 759
784 PresentationDispatcher::ListeningStatus::~ListeningStatus() {} 760 PresentationDispatcher::ListeningStatus::~ListeningStatus() {}
785 761
786 } // namespace content 762 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698