Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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_ << ", " | |
|
mark a. foltz
2016/10/08 00:33:42
__FUNCTION__ as is done elsewhere in this patch?
zhaobin
2016/10/12 02:27:33
Done.
| |
| 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 Loading... | |
| 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_) { | |
| 185 delegate_->RegisterReceiverAvailableCallback( | |
| 186 base::Bind(&PresentationServiceImpl::OnReceiverConnectionAvailable, | |
| 187 weak_factory_.GetWeakPtr())); | |
| 188 } | |
| 181 } | 189 } |
| 182 | 190 |
| 183 void PresentationServiceImpl::ListenForScreenAvailability(const GURL& url) { | 191 void PresentationServiceImpl::ListenForScreenAvailability(const GURL& url) { |
| 184 DVLOG(2) << "ListenForScreenAvailability " << url; | 192 DVLOG(2) << "ListenForScreenAvailability " << url; |
| 185 if (!delegate_) { | 193 if (!delegate_) { |
| 186 client_->OnScreenAvailabilityUpdated(url, false); | 194 client_->OnScreenAvailabilityUpdated(url, false); |
| 187 return; | 195 return; |
| 188 } | 196 } |
| 189 | 197 |
| 190 if (screen_availability_listeners_.count(url.spec())) | 198 if (screen_availability_listeners_.count(url.spec())) |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 386 delegate_->SetDefaultPresentationUrls( | 394 delegate_->SetDefaultPresentationUrls( |
| 387 render_process_id_, render_frame_id_, presentation_urls_for_delegate, | 395 render_process_id_, render_frame_id_, presentation_urls_for_delegate, |
| 388 base::Bind(&PresentationServiceImpl::OnDefaultPresentationStarted, | 396 base::Bind(&PresentationServiceImpl::OnDefaultPresentationStarted, |
| 389 weak_factory_.GetWeakPtr())); | 397 weak_factory_.GetWeakPtr())); |
| 390 } | 398 } |
| 391 | 399 |
| 392 void PresentationServiceImpl::SendSessionMessage( | 400 void PresentationServiceImpl::SendSessionMessage( |
| 393 blink::mojom::PresentationSessionInfoPtr session, | 401 blink::mojom::PresentationSessionInfoPtr session, |
| 394 blink::mojom::SessionMessagePtr session_message, | 402 blink::mojom::SessionMessagePtr session_message, |
| 395 const SendSessionMessageCallback& callback) { | 403 const SendSessionMessageCallback& callback) { |
| 396 DVLOG(2) << "SendSessionMessage"; | 404 DVLOG(2) << "SendSessionMessage" |
| 405 << " [url]: " << session->url << ", [id]: " << session->id | |
| 406 << ", [process id]: " << render_process_id_ | |
| 407 << ", [render frame id]: " << render_frame_id_; | |
| 397 DCHECK(!session_message.is_null()); | 408 DCHECK(!session_message.is_null()); |
| 398 // send_message_callback_ should be null by now, otherwise resetting of | 409 // send_message_callback_ should be null by now, otherwise resetting of |
| 399 // send_message_callback_ with new callback will drop the old callback. | 410 // send_message_callback_ with new callback will drop the old callback. |
| 400 if (!delegate_ || send_message_callback_) { | 411 if (!delegate_ || send_message_callback_) { |
| 401 callback.Run(false); | 412 callback.Run(false); |
| 402 return; | 413 return; |
| 403 } | 414 } |
| 404 | 415 |
| 405 send_message_callback_.reset(new SendSessionMessageCallback(callback)); | 416 send_message_callback_.reset(new SendSessionMessageCallback(callback)); |
| 406 delegate_->SendMessage( | 417 delegate_->SendMessage( |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 467 if (!delegate_) | 478 if (!delegate_) |
| 468 return; | 479 return; |
| 469 | 480 |
| 470 PresentationSessionInfo session_info(session.To<PresentationSessionInfo>()); | 481 PresentationSessionInfo session_info(session.To<PresentationSessionInfo>()); |
| 471 delegate_->ListenForSessionMessages( | 482 delegate_->ListenForSessionMessages( |
| 472 render_process_id_, render_frame_id_, session_info, | 483 render_process_id_, render_frame_id_, session_info, |
| 473 base::Bind(&PresentationServiceImpl::OnSessionMessages, | 484 base::Bind(&PresentationServiceImpl::OnSessionMessages, |
| 474 weak_factory_.GetWeakPtr(), session_info)); | 485 weak_factory_.GetWeakPtr(), session_info)); |
| 475 } | 486 } |
| 476 | 487 |
| 488 void PresentationServiceImpl::SetPresentationConnection( | |
| 489 blink::mojom::PresentationSessionInfoPtr session, | |
| 490 blink::mojom::PresentationConnectionPtr connection) { | |
| 491 DVLOG(2) << "SetPresentationConnection"; | |
| 492 | |
| 493 if (!delegate_) | |
| 494 return; | |
| 495 | |
| 496 PresentationSessionInfo session_info(session.To<PresentationSessionInfo>()); | |
| 497 delegate_->RegisterOffscreenPresentationConnection( | |
| 498 render_process_id_, render_frame_id_, session_info, | |
| 499 std::move(connection)); | |
| 500 } | |
| 501 | |
| 477 void PresentationServiceImpl::OnSessionMessages( | 502 void PresentationServiceImpl::OnSessionMessages( |
| 478 const PresentationSessionInfo& session, | 503 const PresentationSessionInfo& session, |
| 479 const ScopedVector<PresentationSessionMessage>& messages, | 504 const ScopedVector<PresentationSessionMessage>& messages, |
| 480 bool pass_ownership) { | 505 bool pass_ownership) { |
| 481 DCHECK(client_); | 506 DCHECK(client_); |
| 482 | 507 DVLOG(2) << "OnSessionMessages" |
| 483 DVLOG(2) << "OnSessionMessages"; | 508 << " [url]: " << session.presentation_url |
| 509 << ", [id]: " << session.presentation_id | |
| 510 << ", [process id]: " << render_process_id_ | |
| 511 << ", [render frame id]: " << render_frame_id_; | |
| 484 std::vector<blink::mojom::SessionMessagePtr> mojo_messages(messages.size()); | 512 std::vector<blink::mojom::SessionMessagePtr> mojo_messages(messages.size()); |
| 485 std::transform(messages.begin(), messages.end(), mojo_messages.begin(), | 513 std::transform(messages.begin(), messages.end(), mojo_messages.begin(), |
| 486 [pass_ownership](PresentationSessionMessage* message) { | 514 [pass_ownership](PresentationSessionMessage* message) { |
| 487 return ToMojoSessionMessage(message, pass_ownership); | 515 return ToMojoSessionMessage(message, pass_ownership); |
| 488 }); | 516 }); |
| 489 | 517 |
| 490 client_->OnSessionMessagesReceived( | 518 client_->OnSessionMessagesReceived( |
| 491 blink::mojom::PresentationSessionInfo::From(session), | 519 blink::mojom::PresentationSessionInfo::From(session), |
| 492 std::move(mojo_messages)); | 520 std::move(mojo_messages)); |
| 493 } | 521 } |
| 494 | 522 |
| 523 void PresentationServiceImpl::OnReceiverConnectionAvailable( | |
| 524 const content::PresentationSessionInfo& session_info, | |
| 525 PresentationConnectionPtr&& controller) { | |
| 526 DVLOG(2) << "PresentationServiceImpl::OnReceiverConnectionAvailable"; | |
| 527 DVLOG(2) << "controller: " << controller; | |
| 528 | |
| 529 client_->OnReceiverConnectionAvailable( | |
| 530 blink::mojom::PresentationSessionInfo::From(session_info), | |
| 531 std::move(controller)); | |
| 532 } | |
| 533 | |
| 495 void PresentationServiceImpl::DidNavigateAnyFrame( | 534 void PresentationServiceImpl::DidNavigateAnyFrame( |
| 496 content::RenderFrameHost* render_frame_host, | 535 content::RenderFrameHost* render_frame_host, |
| 497 const content::LoadCommittedDetails& details, | 536 const content::LoadCommittedDetails& details, |
| 498 const content::FrameNavigateParams& params) { | 537 const content::FrameNavigateParams& params) { |
| 499 DVLOG(2) << "PresentationServiceImpl::DidNavigateAnyFrame"; | 538 DVLOG(2) << "PresentationServiceImpl::DidNavigateAnyFrame"; |
| 500 if (!FrameMatches(render_frame_host)) | 539 if (!FrameMatches(render_frame_host)) |
| 501 return; | 540 return; |
| 502 | 541 |
| 503 std::string prev_url_host = details.previous_url.host(); | 542 std::string prev_url_host = details.previous_url.host(); |
| 504 std::string curr_url_host = params.url.host(); | 543 std::string curr_url_host = params.url.host(); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 620 | 659 |
| 621 void PresentationServiceImpl::NewSessionCallbackWrapper::Run( | 660 void PresentationServiceImpl::NewSessionCallbackWrapper::Run( |
| 622 blink::mojom::PresentationSessionInfoPtr session, | 661 blink::mojom::PresentationSessionInfoPtr session, |
| 623 blink::mojom::PresentationErrorPtr error) { | 662 blink::mojom::PresentationErrorPtr error) { |
| 624 DCHECK(!callback_.is_null()); | 663 DCHECK(!callback_.is_null()); |
| 625 callback_.Run(std::move(session), std::move(error)); | 664 callback_.Run(std::move(session), std::move(error)); |
| 626 callback_.Reset(); | 665 callback_.Reset(); |
| 627 } | 666 } |
| 628 | 667 |
| 629 } // namespace content | 668 } // namespace content |
| OLD | NEW |