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

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

Issue 1436703002: Revert of [Presentation API / Media Router] Clean up default pres URL logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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 5d20a311e0927bab74e7b86d85622fb8f613ee2b..dd5203dce31567a3007fc996485817fb88235e61 100644
--- a/content/browser/presentation/presentation_service_impl.cc
+++ b/content/browser/presentation/presentation_service_impl.cc
@@ -224,6 +224,13 @@
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) {
@@ -361,12 +368,11 @@
const std::string& new_default_url = url.get();
if (default_presentation_url_ == new_default_url)
return;
-
+ delegate_->SetDefaultPresentationUrl(
+ render_process_id_,
+ render_frame_id_,
+ new_default_url);
default_presentation_url_ = new_default_url;
- delegate_->SetDefaultPresentationUrl(
- render_process_id_, render_frame_id_, new_default_url,
- base::Bind(&PresentationServiceImpl::OnDefaultPresentationStarted,
- weak_factory_.GetWeakPtr()));
}
void PresentationServiceImpl::SendSessionMessage(
@@ -515,6 +521,8 @@
pending_join_session_cbs_.clear();
+ default_session_start_context_.reset();
+
if (on_session_messages_callback_.get()) {
on_session_messages_callback_->Run(
mojo::Array<presentation::SessionMessagePtr>());
@@ -536,10 +544,9 @@
}
void PresentationServiceImpl::OnDefaultPresentationStarted(
- const PresentationSessionInfo& session_info) {
- DCHECK(client_.get());
- client_->OnDefaultSessionStarted(
- presentation::PresentationSessionInfo::From(session_info));
+ const PresentationSessionInfo& session) {
+ if (default_session_start_context_.get())
+ default_session_start_context_->set_session(session);
}
PresentationServiceImpl::ScreenAvailabilityListenerImpl
@@ -590,4 +597,45 @@
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