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

Unified Diff: content/browser/presentation/presentation_service_impl.cc

Issue 1314413005: [Presentation API] 1-UA presentation support + presenter APIs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments #18-21 Created 5 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 side-by-side diff with in-line comments
Download patch
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 1703ab2253d91aafbd3919fe1e6a10461ae175e9..de7e75680955417334d8c8859f7faa9b6b820b70 100644
--- a/content/browser/presentation/presentation_service_impl.cc
+++ b/content/browser/presentation/presentation_service_impl.cc
@@ -202,7 +202,8 @@ void PresentationServiceImpl::ListenForScreenAvailability(
listener.get())) {
screen_availability_listeners_.set(availability_url, listener.Pass());
} else {
- DVLOG(1) << "AddScreenAvailabilityListener failed. Ignoring request.";
+ DVLOG(1) << "AddScreenAvailabilityListener failed. Returning false.";
+ client_->OnScreenAvailabilityUpdated(url, false);
}
}
@@ -224,13 +225,6 @@ void PresentationServiceImpl::StopListeningForScreenAvailability(
screen_availability_listeners_.erase(listener_it);
}
-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);
-}
-
void PresentationServiceImpl::StartSession(
const mojo::String& presentation_url,
const NewSessionMojoCallback& callback) {
@@ -368,11 +362,14 @@ void PresentationServiceImpl::SetDefaultPresentationURL(
const std::string& new_default_url = url.get();
if (default_presentation_url_ == new_default_url)
miu 2015/10/20 00:56:50 Why is this check here? It feels like a waste of
imcheng 2016/06/13 22:30:01 It looks like PSDImpl already does some form of de
return;
+
+ default_presentation_url_ = new_default_url;
delegate_->SetDefaultPresentationUrl(
render_process_id_,
render_frame_id_,
- new_default_url);
- default_presentation_url_ = new_default_url;
+ default_presentation_url_,
+ base::Bind(&PresentationServiceImpl::OnDefaultPresentationStarted,
+ weak_factory_.GetWeakPtr()));
}
void PresentationServiceImpl::SendSessionMessage(
@@ -457,6 +454,33 @@ void PresentationServiceImpl::ListenForSessionMessages(
weak_factory_.GetWeakPtr(), session_info));
}
+void PresentationServiceImpl::GetPresentationReceiverSession(
+ const PresentationSessionMojoCallback& callback) {
+ DVLOG(2) << "GetPresentationReceiverSession";
+ DCHECK(receiver_session_callback_.is_null());
miu 2015/10/20 00:56:50 and DCHECK(!callback.is_null())
imcheng 2016/06/13 22:30:01 Done.
+ if (!delegate_) {
+ callback.Run(presentation::PresentationSessionInfoPtr());
+ return;
+ }
+
+ receiver_session_callback_ = callback;
+ delegate_->NotifyWhenReceiverSessionIsAvailable(
+ render_process_id_, render_frame_id_,
+ base::Bind(&PresentationServiceImpl::OnGetPresentationReceiverSession,
+ weak_factory_.GetWeakPtr()));
+}
+
+void PresentationServiceImpl::OnGetPresentationReceiverSession(
+ const content::PresentationSessionInfo* session_info) {
+ if (!receiver_session_callback_.is_null()) {
miu 2015/10/20 00:56:50 nit: Reduce indent on majority of the code by nega
imcheng 2016/06/13 22:30:01 Removed.
+ receiver_session_callback_.Run(
+ session_info
+ ? presentation::PresentationSessionInfo::From(*session_info)
+ : presentation::PresentationSessionInfoPtr());
+ receiver_session_callback_.reset();
+ }
+}
+
void PresentationServiceImpl::OnSessionMessages(
const PresentationSessionInfo& session,
const ScopedVector<PresentationSessionMessage>& messages,
@@ -523,9 +547,7 @@ void PresentationServiceImpl::Reset() {
pending_join_session_cbs_.clear();
- default_session_start_context_.reset();
-
- if (on_session_messages_callback_.get()) {
+ if (on_session_messages_callback_) {
on_session_messages_callback_->Run(
mojo::Array<presentation::SessionMessagePtr>());
on_session_messages_callback_.reset();
@@ -537,6 +559,11 @@ void PresentationServiceImpl::Reset() {
send_message_callback_->Run(false);
send_message_callback_.reset();
}
+
+ if (!receiver_session_callback_.is_null()) {
+ receiver_session_callback_.Run(presentation::PresentationSessionInfoPtr());
+ receiver_session_callback_.reset();
+ }
}
void PresentationServiceImpl::OnDelegateDestroyed() {
@@ -547,8 +574,8 @@ void PresentationServiceImpl::OnDelegateDestroyed() {
void PresentationServiceImpl::OnDefaultPresentationStarted(
const PresentationSessionInfo& session) {
- if (default_session_start_context_.get())
- default_session_start_context_->set_session(session);
+ client_->OnDefaultPresentationStarted(
+ presentation::PresentationSessionInfo::From(session));
}
PresentationServiceImpl::ScreenAvailabilityListenerImpl
@@ -622,45 +649,4 @@ void PresentationServiceImpl::NewSessionMojoCallbackWrapper::Run(
callback_.reset();
}
-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

Powered by Google App Engine
This is Rietveld 408576698