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

Unified Diff: chrome/browser/media/router/presentation_service_delegate_impl.cc

Issue 1430413003: [Media Router] Connection state change listening redesign part 2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix content_unittests compile 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: chrome/browser/media/router/presentation_service_delegate_impl.cc
diff --git a/chrome/browser/media/router/presentation_service_delegate_impl.cc b/chrome/browser/media/router/presentation_service_delegate_impl.cc
index bc145d2d57daccb92b092bbb7ea530b914eeb863..1d199145fadc77e0af51c61367eec07ade307742 100644
--- a/chrome/browser/media/router/presentation_service_delegate_impl.cc
+++ b/chrome/browser/media/router/presentation_service_delegate_impl.cc
@@ -20,7 +20,6 @@
#include "chrome/browser/media/router/media_source_helper.h"
#include "chrome/browser/media/router/presentation_media_sinks_observer.h"
#include "chrome/browser/media/router/presentation_session_messages_observer.h"
-#include "chrome/browser/media/router/presentation_session_state_observer.h"
#include "chrome/browser/sessions/session_tab_helper.h"
#include "content/public/browser/presentation_screen_availability_listener.h"
#include "content/public/browser/presentation_session.h"
@@ -75,8 +74,10 @@ class PresentationFrame {
bool HasScreenAvailabilityListenerForTest(
const MediaSource::Id& source_id) const;
std::string GetDefaultPresentationId() const;
- void ListenForSessionStateChange(
- const content::SessionStateChangedCallback& state_changed_cb);
+ void ListenForConnectionStateChange(
+ const content::PresentationSessionInfo& connection,
+ const content::PresentationConnectionStateChangedCallback&
+ state_changed_cb);
void ListenForSessionMessages(
const content::PresentationSessionInfo& session,
const content::PresentationSessionMessageCallback& message_cb);
@@ -85,7 +86,6 @@ class PresentationFrame {
const MediaRoute::Id GetRouteId(const std::string& presentation_id) const;
const std::vector<MediaRoute::Id> GetRouteIds() const;
- void OnPresentationSessionClosed(const std::string& presentation_id);
void OnPresentationSessionStarted(
const content::PresentationSessionInfo& session,
@@ -99,11 +99,11 @@ class PresentationFrame {
private:
MediaSource GetMediaSourceFromListener(
content::PresentationScreenAvailabilityListener* listener) const;
- MediaRouteIdToPresentationSessionMapping route_id_to_presentation_;
base::SmallMap<std::map<std::string, MediaRoute::Id>>
presentation_id_to_route_id_;
scoped_ptr<PresentationMediaSinksObserver> sinks_observer_;
- scoped_ptr<PresentationSessionStateObserver> session_state_observer_;
+ std::vector<scoped_ptr<PresentationConnectionStateSubscription>>
+ connection_state_subscriptions_;
ScopedVector<PresentationSessionMessagesObserver> session_messages_observers_;
// References to the owning WebContents, and the corresponding MediaRouter.
@@ -134,19 +134,6 @@ void PresentationFrame::OnPresentationSessionStarted(
const content::PresentationSessionInfo& session,
const MediaRoute::Id& route_id) {
presentation_id_to_route_id_[session.presentation_id] = route_id;
- route_id_to_presentation_.Add(route_id, session);
- if (session_state_observer_)
- session_state_observer_->OnPresentationSessionConnected(route_id);
-}
-
-void PresentationFrame::OnPresentationSessionClosed(
- const std::string& presentation_id) {
- auto it = presentation_id_to_route_id_.find(presentation_id);
- if (it != presentation_id_to_route_id_.end()) {
- route_id_to_presentation_.Remove(it->second);
- presentation_id_to_route_id_.erase(it);
- }
- // TODO(imcheng): Notify |session_state_observer_|?
}
const MediaRoute::Id PresentationFrame::GetRouteId(
@@ -195,24 +182,29 @@ bool PresentationFrame::HasScreenAvailabilityListenerForTest(
}
void PresentationFrame::Reset() {
- route_id_to_presentation_.Clear();
-
for (const auto& pid_route_id : presentation_id_to_route_id_)
router_->OnPresentationSessionDetached(pid_route_id.second);
presentation_id_to_route_id_.clear();
sinks_observer_.reset();
- if (session_state_observer_)
- session_state_observer_->Reset();
-
+ connection_state_subscriptions_.clear();
session_messages_observers_.clear();
}
-void PresentationFrame::ListenForSessionStateChange(
- const content::SessionStateChangedCallback& state_changed_cb) {
- CHECK(!session_state_observer_.get());
- session_state_observer_.reset(new PresentationSessionStateObserver(
- state_changed_cb, &route_id_to_presentation_, router_));
+void PresentationFrame::ListenForConnectionStateChange(
mark a. foltz 2015/11/18 00:39:38 Can this be called more than once per |connection|
imcheng 2015/11/19 23:39:53 Yes. Although it should only be called once by Pre
+ const content::PresentationSessionInfo& connection,
+ const content::PresentationConnectionStateChangedCallback&
+ state_changed_cb) {
+ auto it = presentation_id_to_route_id_.find(connection.presentation_id);
+ if (it == presentation_id_to_route_id_.end()) {
+ DLOG(ERROR) << __FUNCTION__ << "route id not found for presentation: "
+ << connection.presentation_id;
+ return;
+ }
+
+ connection_state_subscriptions_.push_back(
mark a. foltz 2015/11/18 00:39:38 It seems like we only want to add at most one Subs
imcheng 2015/11/19 23:39:53 We could do that, by keeping a map from route id t
+ router_->AddPresentationConnectionStateChangedCallback(it->second,
+ state_changed_cb));
}
void PresentationFrame::ListenForSessionMessages(
@@ -252,9 +244,11 @@ class PresentationFrameManager {
bool RemoveScreenAvailabilityListener(
const RenderFrameHostId& render_frame_host_id,
content::PresentationScreenAvailabilityListener* listener);
- void ListenForSessionStateChange(
+ void ListenForConnectionStateChange(
const RenderFrameHostId& render_frame_host_id,
- const content::SessionStateChangedCallback& state_changed_cb);
+ const content::PresentationSessionInfo& connection,
+ const content::PresentationConnectionStateChangedCallback&
+ state_changed_cb);
void ListenForSessionMessages(
const RenderFrameHostId& render_frame_host_id,
const content::PresentationSessionInfo& session,
@@ -291,9 +285,6 @@ class PresentationFrameManager {
const content::PresentationSessionInfo& session,
const MediaRoute::Id& route_id);
- void OnPresentationSessionClosed(
- const RenderFrameHostId& render_frame_host_id,
- const std::string& presentation_id);
const MediaRoute::Id GetRouteId(const RenderFrameHostId& render_frame_host_id,
const std::string& presentation_id) const;
const std::vector<MediaRoute::Id> GetRouteIds(
@@ -359,9 +350,8 @@ void PresentationFrameManager::OnPresentationSessionStarted(
const RenderFrameHostId& render_frame_host_id,
const content::PresentationSessionInfo& session,
const MediaRoute::Id& route_id) {
- auto presentation_frame = presentation_frames_.get(render_frame_host_id);
- if (presentation_frame)
- presentation_frame->OnPresentationSessionStarted(session, route_id);
+ auto presentation_frame = GetOrAddPresentationFrame(render_frame_host_id);
+ presentation_frame->OnPresentationSessionStarted(session, route_id);
}
void PresentationFrameManager::OnDefaultPresentationSessionStarted(
@@ -379,14 +369,6 @@ void PresentationFrameManager::OnDefaultPresentationSessionStarted(
}
}
-void PresentationFrameManager::OnPresentationSessionClosed(
- const RenderFrameHostId& render_frame_host_id,
- const std::string& presentation_id) {
- auto presentation_frame = presentation_frames_.get(render_frame_host_id);
- if (presentation_frame)
- presentation_frame->OnPresentationSessionClosed(presentation_id);
-}
-
const MediaRoute::Id PresentationFrameManager::GetRouteId(
const RenderFrameHostId& render_frame_host_id,
const std::string& presentation_id) const {
@@ -427,12 +409,16 @@ bool PresentationFrameManager::HasScreenAvailabilityListenerForTest(
presentation_frame->HasScreenAvailabilityListenerForTest(source_id);
}
-void PresentationFrameManager::ListenForSessionStateChange(
+void PresentationFrameManager::ListenForConnectionStateChange(
const RenderFrameHostId& render_frame_host_id,
- const content::SessionStateChangedCallback& state_changed_cb) {
- PresentationFrame* presentation_frame =
- GetOrAddPresentationFrame(render_frame_host_id);
- presentation_frame->ListenForSessionStateChange(state_changed_cb);
+ const content::PresentationSessionInfo& connection,
+ const content::PresentationConnectionStateChangedCallback&
+ state_changed_cb) {
+ auto presentation_frame = presentation_frames_.get(render_frame_host_id);
+ if (presentation_frame) {
+ presentation_frame->ListenForConnectionStateChange(connection,
+ state_changed_cb);
+ }
}
void PresentationFrameManager::ListenForSessionMessages(
@@ -766,12 +752,15 @@ void PresentationServiceDelegateImpl::SendMessage(
}
}
-void PresentationServiceDelegateImpl::ListenForSessionStateChange(
+void PresentationServiceDelegateImpl::ListenForConnectionStateChange(
int render_process_id,
int render_frame_id,
- const content::SessionStateChangedCallback& state_changed_cb) {
- frame_manager_->ListenForSessionStateChange(
- RenderFrameHostId(render_process_id, render_frame_id), state_changed_cb);
+ const content::PresentationSessionInfo& connection,
+ const content::PresentationConnectionStateChangedCallback&
+ state_changed_cb) {
+ frame_manager_->ListenForConnectionStateChange(
+ RenderFrameHostId(render_process_id, render_frame_id), connection,
+ state_changed_cb);
}
void PresentationServiceDelegateImpl::OnRouteResponse(

Powered by Google App Engine
This is Rietveld 408576698