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

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

Issue 2379703002: [Presentation API] (alternative) 1-UA: send message between controller and receiver page (Closed)
Patch Set: resolve code review comments from Mark Created 4 years, 2 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 <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 } 74 }
75 } 75 }
76 76
77 } // namespace 77 } // namespace
78 78
79 namespace content { 79 namespace content {
80 80
81 PresentationDispatcher::PresentationDispatcher(RenderFrame* render_frame) 81 PresentationDispatcher::PresentationDispatcher(RenderFrame* render_frame)
82 : RenderFrameObserver(render_frame), 82 : RenderFrameObserver(render_frame),
83 controller_(nullptr), 83 controller_(nullptr),
84 binding_(this) { 84 receiver_(nullptr),
85 } 85 binding_(this) {}
86 86
87 PresentationDispatcher::~PresentationDispatcher() { 87 PresentationDispatcher::~PresentationDispatcher() {
88 // Controller should be destroyed before the dispatcher when frame is 88 // Controller should be destroyed before the dispatcher when frame is
89 // destroyed. 89 // destroyed.
90 DCHECK(!controller_); 90 DCHECK(!controller_);
91 } 91 }
92 92
93 void PresentationDispatcher::setController( 93 void PresentationDispatcher::setController(
94 blink::WebPresentationController* controller) { 94 blink::WebPresentationController* controller) {
95 // There shouldn't be any swapping from one non-null controller to another. 95 // There shouldn't be any swapping from one non-null controller to another.
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 if (!error.is_null()) { 387 if (!error.is_null()) {
388 DCHECK(session_info.is_null()); 388 DCHECK(session_info.is_null());
389 callback->onError(blink::WebPresentationError( 389 callback->onError(blink::WebPresentationError(
390 GetWebPresentationErrorTypeFromMojo(error->error_type), 390 GetWebPresentationErrorTypeFromMojo(error->error_type),
391 blink::WebString::fromUTF8(error->message))); 391 blink::WebString::fromUTF8(error->message)));
392 return; 392 return;
393 } 393 }
394 394
395 DCHECK(!session_info.is_null()); 395 DCHECK(!session_info.is_null());
396 presentation_service_->ListenForSessionMessages(session_info.Clone()); 396 presentation_service_->ListenForSessionMessages(session_info.Clone());
397 callback->onSuccess( 397
398 base::MakeUnique<PresentationConnectionClient>(std::move(session_info))); 398 RendererPresentationConnection* controller_connection_proxy =
mark a. foltz 2016/10/10 18:28:52 How do you know this connection is for an offscree
zhaobin 2016/10/12 02:27:33 Done.
399 new RendererPresentationConnection();
400 // Bind controller_connection_proxy with PresentationConnection
401 // in controller page.
402 callback->onSuccess(base::MakeUnique<PresentationConnectionClient>(
imcheng 2016/10/12 02:22:55 It looks like we don't need the 2-argument Present
zhaobin 2016/10/13 02:33:52 Did some changes in new patch so we use 2-argument
403 session_info.Clone(), controller_connection_proxy));
404
405 // Pass controller_connection_proxy to PSImpl and register
406 // it with OffscreenPresentationManager.
407 presentation_service_->SetPresentationConnection(
408 session_info.Clone(), controller_connection_proxy->Bind());
imcheng 2016/10/12 02:22:54 |controller_connection_proxy| might have already b
zhaobin 2016/10/13 02:33:52 Done.
399 } 409 }
400 410
401 void PresentationDispatcher::OnReceiverConnectionAvailable( 411 void PresentationDispatcher::OnReceiverConnectionAvailable(
402 blink::mojom::PresentationSessionInfoPtr session_info) { 412 blink::mojom::PresentationSessionInfoPtr session_info,
403 if (receiver_) { 413 blink::mojom::PresentationConnectionPtr controller) {
404 receiver_->onReceiverConnectionAvailable( 414 if (!receiver_)
405 new PresentationConnectionClient(std::move(session_info))); 415 return;
406 } 416
417 RendererPresentationConnection* receiver_connection_proxy =
418 new RendererPresentationConnection();
419 // Bind receiver_connection_proxy with PresentationConnection
420 // in receiver page.
421 receiver_->onReceiverConnectionAvailable(new PresentationConnectionClient(
422 std::move(session_info), receiver_connection_proxy));
423
424 controller->SetTargetConnection(receiver_connection_proxy->Bind());
425 receiver_connection_proxy->SetTargetConnection(std::move(controller));
407 } 426 }
408 427
409 void PresentationDispatcher::OnConnectionStateChanged( 428 void PresentationDispatcher::OnConnectionStateChanged(
410 blink::mojom::PresentationSessionInfoPtr connection, 429 blink::mojom::PresentationSessionInfoPtr connection,
411 blink::mojom::PresentationConnectionState state) { 430 blink::mojom::PresentationConnectionState state) {
412 if (!controller_) 431 if (!controller_)
413 return; 432 return;
414 433
415 DCHECK(!connection.is_null()); 434 DCHECK(!connection.is_null());
416 controller_->didChangeSessionState( 435 controller_->didChangeSessionState(
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 PresentationDispatcher::AvailabilityStatus::AvailabilityStatus( 562 PresentationDispatcher::AvailabilityStatus::AvailabilityStatus(
544 const GURL& availability_url) 563 const GURL& availability_url)
545 : url(availability_url), 564 : url(availability_url),
546 last_known_availability(false), 565 last_known_availability(false),
547 listening_state(ListeningState::INACTIVE) {} 566 listening_state(ListeningState::INACTIVE) {}
548 567
549 PresentationDispatcher::AvailabilityStatus::~AvailabilityStatus() { 568 PresentationDispatcher::AvailabilityStatus::~AvailabilityStatus() {
550 } 569 }
551 570
552 } // namespace content 571 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698