| Index: content/browser/presentation/presentation_service_impl.cc
|
| diff --git a/content/browser/presentation/presentation_service_impl.cc b/content/browser/presentation/presentation_service_impl.cc
|
| index e22e9149eb2e86ce40775bb7405deac5c7bfea83..2d6769e0f102397ace4313ab131c28f4e247d1b9 100644
|
| --- a/content/browser/presentation/presentation_service_impl.cc
|
| +++ b/content/browser/presentation/presentation_service_impl.cc
|
| @@ -23,24 +23,23 @@
|
| WebContents* web_contents,
|
| PresentationServiceDelegate* delegate)
|
| : WebContentsObserver(web_contents),
|
| + render_frame_host_(render_frame_host),
|
| delegate_(delegate),
|
| is_start_session_pending_(false),
|
| next_request_session_id_(0),
|
| weak_factory_(this) {
|
| - DCHECK(render_frame_host);
|
| + DCHECK(render_frame_host_);
|
| DCHECK(web_contents);
|
| -
|
| - render_process_id_ = render_frame_host->GetProcess()->GetID();
|
| - render_frame_id_ = render_frame_host->GetRoutingID();
|
| DVLOG(2) << "PresentationServiceImpl: "
|
| - << render_process_id_ << ", " << render_frame_id_;
|
| + << render_frame_host_->GetProcess()->GetID() << ", "
|
| + << render_frame_host_->GetRoutingID();
|
| if (delegate_)
|
| - delegate_->AddObserver(render_process_id_, render_frame_id_, this);
|
| + delegate_->AddObserver(this);
|
| }
|
|
|
| PresentationServiceImpl::~PresentationServiceImpl() {
|
| if (delegate_)
|
| - delegate_->RemoveObserver(render_process_id_, render_frame_id_);
|
| + delegate_->RemoveObserver(this);
|
| FlushNewSessionCallbacks();
|
| }
|
|
|
| @@ -84,7 +83,9 @@
|
| linked_ptr<ScreenAvailabilityContext> context(
|
| new ScreenAvailabilityContext(presentation_url));
|
| if (!delegate_->AddScreenAvailabilityListener(
|
| - render_process_id_, render_frame_id_, context.get())) {
|
| + render_frame_host_->GetProcess()->GetID(),
|
| + render_frame_host_->GetRoutingID(),
|
| + context.get())) {
|
| DVLOG(1) << "AddScreenAvailabilityListener failed. Ignoring request.";
|
| return nullptr;
|
| }
|
| @@ -124,7 +125,9 @@
|
| return;
|
|
|
| delegate_->RemoveScreenAvailabilityListener(
|
| - render_process_id_, render_frame_id_, it->second.get());
|
| + render_frame_host_->GetProcess()->GetID(),
|
| + render_frame_host_->GetRoutingID(),
|
| + it->second.get());
|
| // Resolve the context's pending callbacks before removing it.
|
| it->second->OnScreenAvailabilityChanged(false);
|
| availability_contexts_.erase(it);
|
| @@ -132,9 +135,7 @@
|
|
|
| void PresentationServiceImpl::ListenForDefaultSessionStart(
|
| const DefaultSessionMojoCallback& callback) {
|
| - if (!default_session_start_context_.get())
|
| - default_session_start_context_.reset(new DefaultSessionStartContext);
|
| - default_session_start_context_->AddCallback(callback);
|
| + NOTIMPLEMENTED();
|
| }
|
|
|
| void PresentationServiceImpl::StartSession(
|
| @@ -168,8 +169,8 @@
|
|
|
| int request_session_id = RegisterNewSessionCallback(callback);
|
| delegate_->JoinSession(
|
| - render_process_id_,
|
| - render_frame_id_,
|
| + render_frame_host_->GetProcess()->GetID(),
|
| + render_frame_host_->GetRoutingID(),
|
| presentation_url,
|
| presentation_id,
|
| base::Bind(&PresentationServiceImpl::OnStartOrJoinSessionSucceeded,
|
| @@ -213,8 +214,8 @@
|
| int request_session_id = RegisterNewSessionCallback(callback);
|
| is_start_session_pending_ = true;
|
| delegate_->StartSession(
|
| - render_process_id_,
|
| - render_frame_id_,
|
| + render_frame_host_->GetProcess()->GetID(),
|
| + render_frame_host_->GetRoutingID(),
|
| presentation_url,
|
| presentation_id,
|
| base::Bind(&PresentationServiceImpl::OnStartOrJoinSessionSucceeded,
|
| @@ -265,8 +266,8 @@
|
| const std::string& default_presentation_id) {
|
| DCHECK(delegate_);
|
| delegate_->SetDefaultPresentationUrl(
|
| - render_process_id_,
|
| - render_frame_id_,
|
| + render_frame_host_->GetProcess()->GetID(),
|
| + render_frame_host_->GetRoutingID(),
|
| default_presentation_url,
|
| default_presentation_id);
|
| default_presentation_url_ = default_presentation_url;
|
| @@ -306,8 +307,8 @@
|
|
|
| // Remove listener for old default presentation URL.
|
| delegate_->RemoveScreenAvailabilityListener(
|
| - render_process_id_,
|
| - render_frame_id_,
|
| + render_frame_host_->GetProcess()->GetID(),
|
| + render_frame_host_->GetRoutingID(),
|
| old_it->second.get());
|
| availability_contexts_.erase(old_it);
|
| DoSetDefaultPresentationUrl(new_default_url, default_presentation_id);
|
| @@ -322,15 +323,6 @@
|
| void PresentationServiceImpl::ListenForSessionStateChange(
|
| const SessionStateCallback& callback) {
|
| NOTIMPLEMENTED();
|
| -}
|
| -
|
| -bool PresentationServiceImpl::FrameMatches(
|
| - content::RenderFrameHost* render_frame_host) const {
|
| - if (!render_frame_host)
|
| - return false;
|
| -
|
| - return render_frame_host->GetProcess()->GetID() == render_process_id_ &&
|
| - render_frame_host->GetRoutingID() == render_frame_id_;
|
| }
|
|
|
| void PresentationServiceImpl::DidNavigateAnyFrame(
|
| @@ -338,7 +330,7 @@
|
| const content::LoadCommittedDetails& details,
|
| const content::FrameNavigateParams& params) {
|
| DVLOG(2) << "PresentationServiceImpl::DidNavigateAnyFrame";
|
| - if (!FrameMatches(render_frame_host))
|
| + if (render_frame_host_ != render_frame_host)
|
| return;
|
|
|
| std::string prev_url_host = details.previous_url.host();
|
| @@ -363,26 +355,29 @@
|
| void PresentationServiceImpl::RenderFrameDeleted(
|
| content::RenderFrameHost* render_frame_host) {
|
| DVLOG(2) << "PresentationServiceImpl::RenderFrameDeleted";
|
| - if (!FrameMatches(render_frame_host))
|
| - return;
|
| -
|
| - // RenderFrameDeleted means the associated RFH is going to be deleted soon.
|
| + if (render_frame_host_ != render_frame_host)
|
| + return;
|
| +
|
| + // RenderFrameDeleted means |render_frame_host_| is going to be deleted soon.
|
| // This object should also be deleted.
|
| Reset();
|
| + render_frame_host_ = nullptr;
|
| delete this;
|
| }
|
|
|
| void PresentationServiceImpl::Reset() {
|
| DVLOG(2) << "PresentationServiceImpl::Reset";
|
| - if (delegate_)
|
| - delegate_->Reset(render_process_id_, render_frame_id_);
|
| + if (delegate_) {
|
| + delegate_->Reset(
|
| + render_frame_host_->GetProcess()->GetID(),
|
| + render_frame_host_->GetRoutingID());
|
| + }
|
|
|
| default_presentation_url_.clear();
|
| default_presentation_id_.clear();
|
| availability_contexts_.clear();
|
| queued_start_session_requests_.clear();
|
| FlushNewSessionCallbacks();
|
| - default_session_start_context_.reset();
|
| }
|
|
|
| // static
|
| @@ -398,12 +393,6 @@
|
| DVLOG(2) << "PresentationServiceImpl::OnDelegateDestroyed";
|
| delegate_ = nullptr;
|
| Reset();
|
| -}
|
| -
|
| -void PresentationServiceImpl::OnDefaultPresentationStarted(
|
| - const PresentationSessionInfo& session) {
|
| - if (default_session_start_context_.get())
|
| - default_session_start_context_->set_session(session);
|
| }
|
|
|
| PresentationServiceImpl::ScreenAvailabilityContext::ScreenAvailabilityContext(
|
| @@ -489,46 +478,5 @@
|
| return callback;
|
| }
|
|
|
| -PresentationServiceImpl::DefaultSessionStartContext
|
| -::DefaultSessionStartContext() {
|
| -}
|
| -
|
| -PresentationServiceImpl::DefaultSessionStartContext
|
| -::~DefaultSessionStartContext() {
|
| - Reset();
|
| -}
|
| -
|
| -void PresentationServiceImpl::DefaultSessionStartContext::AddCallback(
|
| - const DefaultSessionMojoCallback& callback) {
|
| - if (session_.get()) {
|
| - DCHECK(callbacks_.empty());
|
| - callback.Run(presentation::PresentationSessionInfo::From(*session_));
|
| - session_.reset();
|
| - } else {
|
| - callbacks_.push_back(new DefaultSessionMojoCallback(callback));
|
| - }
|
| -}
|
| -
|
| -void PresentationServiceImpl::DefaultSessionStartContext::set_session(
|
| - const PresentationSessionInfo& session) {
|
| - if (callbacks_.empty()) {
|
| - session_.reset(new PresentationSessionInfo(session));
|
| - } else {
|
| - DCHECK(!session_.get());
|
| - ScopedVector<DefaultSessionMojoCallback> callbacks;
|
| - callbacks.swap(callbacks_);
|
| - for (const auto& callback : callbacks)
|
| - callback->Run(presentation::PresentationSessionInfo::From(session));
|
| - }
|
| -}
|
| -
|
| -void PresentationServiceImpl::DefaultSessionStartContext::Reset() {
|
| - ScopedVector<DefaultSessionMojoCallback> callbacks;
|
| - callbacks.swap(callbacks_);
|
| - for (const auto& callback : callbacks)
|
| - callback->Run(presentation::PresentationSessionInfoPtr());
|
| - session_.reset();
|
| -}
|
| -
|
| } // namespace content
|
|
|
|
|