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 |