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

Side by Side Diff: content/browser/presentation/presentation_service_impl.cc

Issue 2343013002: [Presentation API] (MR side) 1-UA: notify receiver page when receiver connection becomes available (Closed)
Patch Set: resolve code review comments from Derek Created 4 years, 3 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/browser/presentation/presentation_service_impl.h" 5 #include "content/browser/presentation/presentation_service_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <algorithm> 9 #include <algorithm>
10 #include <utility> 10 #include <utility>
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 137
138 render_process_id_ = render_frame_host->GetProcess()->GetID(); 138 render_process_id_ = render_frame_host->GetProcess()->GetID();
139 render_frame_id_ = render_frame_host->GetRoutingID(); 139 render_frame_id_ = render_frame_host->GetRoutingID();
140 DVLOG(2) << "PresentationServiceImpl: " 140 DVLOG(2) << "PresentationServiceImpl: "
141 << render_process_id_ << ", " << render_frame_id_; 141 << render_process_id_ << ", " << render_frame_id_;
142 if (delegate_) 142 if (delegate_)
143 delegate_->AddObserver(render_process_id_, render_frame_id_, this); 143 delegate_->AddObserver(render_process_id_, render_frame_id_, this);
144 } 144 }
145 145
146 PresentationServiceImpl::~PresentationServiceImpl() { 146 PresentationServiceImpl::~PresentationServiceImpl() {
147 DVLOG(2) << "~PresentationServiceImpl: " << render_process_id_ << ", "
148 << render_frame_id_;
147 if (delegate_) 149 if (delegate_)
148 delegate_->RemoveObserver(render_process_id_, render_frame_id_); 150 delegate_->RemoveObserver(render_process_id_, render_frame_id_);
149 } 151 }
150 152
151 // static 153 // static
152 void PresentationServiceImpl::CreateMojoService( 154 void PresentationServiceImpl::CreateMojoService(
153 RenderFrameHost* render_frame_host, 155 RenderFrameHost* render_frame_host,
154 mojo::InterfaceRequest<blink::mojom::PresentationService> request) { 156 mojo::InterfaceRequest<blink::mojom::PresentationService> request) {
155 DVLOG(2) << "CreateMojoService"; 157 DVLOG(2) << "CreateMojoService";
156 WebContents* web_contents = 158 WebContents* web_contents =
(...skipping 14 matching lines...) Expand all
171 mojo::InterfaceRequest<blink::mojom::PresentationService> request) { 173 mojo::InterfaceRequest<blink::mojom::PresentationService> request) {
172 binding_.reset(new mojo::Binding<blink::mojom::PresentationService>( 174 binding_.reset(new mojo::Binding<blink::mojom::PresentationService>(
173 this, std::move(request))); 175 this, std::move(request)));
174 } 176 }
175 177
176 void PresentationServiceImpl::SetClient( 178 void PresentationServiceImpl::SetClient(
177 blink::mojom::PresentationServiceClientPtr client) { 179 blink::mojom::PresentationServiceClientPtr client) {
178 DCHECK(!client_.get()); 180 DCHECK(!client_.get());
179 // TODO(imcheng): Set ErrorHandler to listen for errors. 181 // TODO(imcheng): Set ErrorHandler to listen for errors.
180 client_ = std::move(client); 182 client_ = std::move(client);
183
184 if (delegate_) {
imcheng 2016/09/28 07:28:37 1) We might as well call these in the PSImpl const
zhaobin 2016/09/29 17:20:44 1) RegisterReceiverAvailableCallback() invokes dis
185 delegate_->RegisterReceiverAvailableCallback(
186 base::Bind(&PresentationServiceImpl::OnReceiverConnectionAvailable,
187 weak_factory_.GetWeakPtr()));
188 delegate_->RegisterOffscreenPresentationClient(render_process_id_,
189 render_frame_id_, this);
190 }
181 } 191 }
182 192
183 void PresentationServiceImpl::ListenForScreenAvailability(const GURL& url) { 193 void PresentationServiceImpl::ListenForScreenAvailability(const GURL& url) {
184 DVLOG(2) << "ListenForScreenAvailability " << url; 194 DVLOG(2) << "ListenForScreenAvailability " << url;
185 if (!delegate_) { 195 if (!delegate_) {
186 client_->OnScreenAvailabilityUpdated(url, false); 196 client_->OnScreenAvailabilityUpdated(url, false);
187 return; 197 return;
188 } 198 }
189 199
190 if (screen_availability_listeners_.count(url.spec())) 200 if (screen_availability_listeners_.count(url.spec()))
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 } 430 }
421 } 431 }
422 432
423 void PresentationServiceImpl::CloseConnection( 433 void PresentationServiceImpl::CloseConnection(
424 const GURL& presentation_url, 434 const GURL& presentation_url,
425 const std::string& presentation_id) { 435 const std::string& presentation_id) {
426 DVLOG(2) << "CloseConnection " << presentation_id; 436 DVLOG(2) << "CloseConnection " << presentation_id;
427 if (delegate_) 437 if (delegate_)
428 delegate_->CloseConnection(render_process_id_, render_frame_id_, 438 delegate_->CloseConnection(render_process_id_, render_frame_id_,
429 presentation_id); 439 presentation_id);
440
441 for (const auto& iter : offscreen_presentation_observers_)
imcheng 2016/09/28 07:28:37 This probably doesn't make sense until we have ext
zhaobin 2016/09/29 17:20:44 code removed in new patch
442 iter->RemoveOffscreenPresentationClient(this);
443 offscreen_presentation_observers_.clear();
430 } 444 }
431 445
432 void PresentationServiceImpl::Terminate(const GURL& presentation_url, 446 void PresentationServiceImpl::Terminate(const GURL& presentation_url,
433 const std::string& presentation_id) { 447 const std::string& presentation_id) {
434 DVLOG(2) << "Terminate " << presentation_id; 448 DVLOG(2) << "Terminate " << presentation_id;
435 if (delegate_) 449 if (delegate_)
436 delegate_->Terminate(render_process_id_, render_frame_id_, presentation_id); 450 delegate_->Terminate(render_process_id_, render_frame_id_, presentation_id);
437 } 451 }
438 452
439 void PresentationServiceImpl::OnConnectionStateChanged( 453 void PresentationServiceImpl::OnConnectionStateChanged(
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 std::transform(messages.begin(), messages.end(), mojo_messages.begin(), 499 std::transform(messages.begin(), messages.end(), mojo_messages.begin(),
486 [pass_ownership](PresentationSessionMessage* message) { 500 [pass_ownership](PresentationSessionMessage* message) {
487 return ToMojoSessionMessage(message, pass_ownership); 501 return ToMojoSessionMessage(message, pass_ownership);
488 }); 502 });
489 503
490 client_->OnSessionMessagesReceived( 504 client_->OnSessionMessagesReceived(
491 blink::mojom::PresentationSessionInfo::From(session), 505 blink::mojom::PresentationSessionInfo::From(session),
492 std::move(mojo_messages)); 506 std::move(mojo_messages));
493 } 507 }
494 508
509 void PresentationServiceImpl::OnReceiverConnectionAvailable(
510 const content::PresentationSessionInfo& session_info,
511 OffscreenPresentationClient* controller) {
512 DVLOG(2) << "PresentationServiceImpl::OnReceiverConnectionAvailable";
513 client_->OnReceiverConnectionAvailable(
514 blink::mojom::PresentationSessionInfo::From(session_info));
515
516 controller->SetOffscreenPresentationClient(this);
517 this->SetOffscreenPresentationClient(controller);
518 }
519
520 void PresentationServiceImpl::SetOffscreenPresentationClient(
521 OffscreenPresentationClient* client) {
522 offscreen_presentation_observers_.insert(client);
523 }
524
525 void PresentationServiceImpl::RemoveOffscreenPresentationClient(
526 OffscreenPresentationClient* client) {
527 offscreen_presentation_observers_.erase(client);
528 }
529
495 void PresentationServiceImpl::DidNavigateAnyFrame( 530 void PresentationServiceImpl::DidNavigateAnyFrame(
496 content::RenderFrameHost* render_frame_host, 531 content::RenderFrameHost* render_frame_host,
497 const content::LoadCommittedDetails& details, 532 const content::LoadCommittedDetails& details,
498 const content::FrameNavigateParams& params) { 533 const content::FrameNavigateParams& params) {
499 DVLOG(2) << "PresentationServiceImpl::DidNavigateAnyFrame"; 534 DVLOG(2) << "PresentationServiceImpl::DidNavigateAnyFrame";
500 if (!FrameMatches(render_frame_host)) 535 if (!FrameMatches(render_frame_host))
501 return; 536 return;
502 537
503 std::string prev_url_host = details.previous_url.host(); 538 std::string prev_url_host = details.previous_url.host();
504 std::string curr_url_host = params.url.host(); 539 std::string curr_url_host = params.url.host();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 mojo::Array<blink::mojom::SessionMessagePtr>()); 589 mojo::Array<blink::mojom::SessionMessagePtr>());
555 on_session_messages_callback_.reset(); 590 on_session_messages_callback_.reset();
556 } 591 }
557 592
558 if (send_message_callback_) { 593 if (send_message_callback_) {
559 // Run the callback with false, indicating the renderer to stop sending 594 // Run the callback with false, indicating the renderer to stop sending
560 // the requests and invalidate all pending requests. 595 // the requests and invalidate all pending requests.
561 send_message_callback_->Run(false); 596 send_message_callback_->Run(false);
562 send_message_callback_.reset(); 597 send_message_callback_.reset();
563 } 598 }
599
600 for (const auto& iter : offscreen_presentation_observers_)
601 iter->RemoveOffscreenPresentationClient(this);
602
603 offscreen_presentation_observers_.clear();
564 } 604 }
565 605
566 void PresentationServiceImpl::OnDelegateDestroyed() { 606 void PresentationServiceImpl::OnDelegateDestroyed() {
567 DVLOG(2) << "PresentationServiceImpl::OnDelegateDestroyed"; 607 DVLOG(2) << "PresentationServiceImpl::OnDelegateDestroyed";
568 delegate_ = nullptr; 608 delegate_ = nullptr;
569 Reset(); 609 Reset();
570 } 610 }
571 611
572 void PresentationServiceImpl::OnDefaultPresentationStarted( 612 void PresentationServiceImpl::OnDefaultPresentationStarted(
573 const PresentationSessionInfo& connection) { 613 const PresentationSessionInfo& connection) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 660
621 void PresentationServiceImpl::NewSessionCallbackWrapper::Run( 661 void PresentationServiceImpl::NewSessionCallbackWrapper::Run(
622 blink::mojom::PresentationSessionInfoPtr session, 662 blink::mojom::PresentationSessionInfoPtr session,
623 blink::mojom::PresentationErrorPtr error) { 663 blink::mojom::PresentationErrorPtr error) {
624 DCHECK(!callback_.is_null()); 664 DCHECK(!callback_.is_null());
625 callback_.Run(std::move(session), std::move(error)); 665 callback_.Run(std::move(session), std::move(error));
626 callback_.Reset(); 666 callback_.Reset();
627 } 667 }
628 668
629 } // namespace content 669 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698