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

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

Issue 1693963003: Pass origin to StartObservingMediaSinks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Marks Review Fixes with URL changes Created 4 years, 10 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: 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 6c6c379133c384e9ae444d0c0ab601dbfc617c2f..bc448a344e608d834b27a4999e036a3bb8927f9e 100644
--- a/chrome/browser/media/router/presentation_service_delegate_impl.cc
+++ b/chrome/browser/media/router/presentation_service_delegate_impl.cc
@@ -72,11 +72,13 @@ class PresentationFrame {
// Mirror corresponding APIs in PresentationServiceDelegateImpl.
bool SetScreenAvailabilityListener(
- content::PresentationScreenAvailabilityListener* listener);
+ content::PresentationScreenAvailabilityListener* listener,
+ const GURL& origin);
bool RemoveScreenAvailabilityListener(
- content::PresentationScreenAvailabilityListener* listener);
+ content::PresentationScreenAvailabilityListener* listener,
+ const GURL& origin);
bool HasScreenAvailabilityListenerForTest(
- const MediaSource::Id& source_id) const;
+ const MediaSource& source) const;
std::string GetDefaultPresentationId() const;
void ListenForConnectionStateChange(
const content::PresentationSessionInfo& connection,
@@ -104,12 +106,13 @@ class PresentationFrame {
private:
MediaSource GetMediaSourceFromListener(
- content::PresentationScreenAvailabilityListener* listener) const;
+ content::PresentationScreenAvailabilityListener* listener,
+ const GURL& origin) const;
base::SmallMap<std::map<std::string, MediaRoute::Id>>
presentation_id_to_route_id_;
base::SmallMap<
- std::map<std::string, scoped_ptr<PresentationMediaSinksObserver>>>
- url_to_sinks_observer_;
+ std::map<MediaSource, scoped_ptr<PresentationMediaSinksObserver>>>
+ media_source_to_sinks_observer_;
base::ScopedPtrHashMap<MediaRoute::Id,
scoped_ptr<PresentationConnectionStateSubscription>>
connection_state_subscriptions_;
@@ -159,9 +162,10 @@ const std::vector<MediaRoute::Id> PresentationFrame::GetRouteIds() const {
}
bool PresentationFrame::SetScreenAvailabilityListener(
- content::PresentationScreenAvailabilityListener* listener) {
- MediaSource source(GetMediaSourceFromListener(listener));
- auto& sinks_observer = url_to_sinks_observer_[source.id()];
+ content::PresentationScreenAvailabilityListener* listener,
+ const GURL& origin) {
+ MediaSource source(GetMediaSourceFromListener(listener, origin));
+ auto& sinks_observer = media_source_to_sinks_observer_[source];
if (sinks_observer && sinks_observer->listener() == listener)
return false;
@@ -169,7 +173,7 @@ bool PresentationFrame::SetScreenAvailabilityListener(
new PresentationMediaSinksObserver(router_, listener, source));
if (!sinks_observer->Init()) {
- url_to_sinks_observer_.erase(source.id());
+ media_source_to_sinks_observer_.erase(source);
listener->OnScreenAvailabilityNotSupported();
return false;
}
@@ -178,20 +182,22 @@ bool PresentationFrame::SetScreenAvailabilityListener(
}
bool PresentationFrame::RemoveScreenAvailabilityListener(
- content::PresentationScreenAvailabilityListener* listener) {
- MediaSource source(GetMediaSourceFromListener(listener));
- auto sinks_observer_it = url_to_sinks_observer_.find(source.id());
- if (sinks_observer_it != url_to_sinks_observer_.end() &&
+ content::PresentationScreenAvailabilityListener* listener,
+ const GURL& origin) {
+ MediaSource source(GetMediaSourceFromListener(listener, origin));
+ auto sinks_observer_it = media_source_to_sinks_observer_.find(source);
+ if (sinks_observer_it != media_source_to_sinks_observer_.end() &&
sinks_observer_it->second->listener() == listener) {
- url_to_sinks_observer_.erase(sinks_observer_it);
+ media_source_to_sinks_observer_.erase(sinks_observer_it);
return true;
}
return false;
}
bool PresentationFrame::HasScreenAvailabilityListenerForTest(
- const MediaSource::Id& source_id) const {
- return url_to_sinks_observer_.find(source_id) != url_to_sinks_observer_.end();
+ const MediaSource& source) const {
+ return media_source_to_sinks_observer_.find(source) !=
+ media_source_to_sinks_observer_.end();
}
void PresentationFrame::Reset() {
@@ -199,7 +205,7 @@ void PresentationFrame::Reset() {
router_->DetachRoute(pid_route_id.second);
presentation_id_to_route_id_.clear();
- url_to_sinks_observer_.clear();
+ media_source_to_sinks_observer_.clear();
connection_state_subscriptions_.clear();
session_messages_observers_.clear();
}
@@ -261,12 +267,13 @@ void PresentationFrame::ListenForSessionMessages(
}
MediaSource PresentationFrame::GetMediaSourceFromListener(
- content::PresentationScreenAvailabilityListener* listener) const {
+ content::PresentationScreenAvailabilityListener* listener,
+ const GURL& origin) const {
// If the default presentation URL is empty then fall back to tab mirroring.
std::string availability_url(listener->GetAvailabilityUrl());
return availability_url.empty()
? MediaSourceForTab(SessionTabHelper::IdForTab(web_contents_))
- : MediaSourceForPresentationUrl(availability_url);
+ : MediaSourceForPresentationUrl(availability_url, origin.spec());
}
// Used by PresentationServiceDelegateImpl to manage PresentationFrames.
@@ -431,7 +438,8 @@ bool PresentationFrameManager::SetScreenAvailabilityListener(
content::PresentationScreenAvailabilityListener* listener) {
DCHECK(listener);
auto presentation_frame = GetOrAddPresentationFrame(render_frame_host_id);
- return presentation_frame->SetScreenAvailabilityListener(listener);
+ GURL frame_url(GetLastCommittedURLForFrame(render_frame_host_id));
+ return presentation_frame->SetScreenAvailabilityListener(listener, frame_url);
}
bool PresentationFrameManager::RemoveScreenAvailabilityListener(
@@ -439,16 +447,21 @@ bool PresentationFrameManager::RemoveScreenAvailabilityListener(
content::PresentationScreenAvailabilityListener* listener) {
DCHECK(listener);
auto presentation_frame = presentation_frames_.get(render_frame_host_id);
+ GURL frame_url(GetLastCommittedURLForFrame(render_frame_host_id));
return presentation_frame &&
- presentation_frame->RemoveScreenAvailabilityListener(listener);
+ presentation_frame->RemoveScreenAvailabilityListener(listener,
+ frame_url);
}
bool PresentationFrameManager::HasScreenAvailabilityListenerForTest(
const RenderFrameHostId& render_frame_host_id,
const MediaSource::Id& source_id) const {
auto presentation_frame = presentation_frames_.get(render_frame_host_id);
+ GURL frame_url(GetLastCommittedURLForFrame(render_frame_host_id));
+ MediaSource source(source_id);
+ source.set_origin(frame_url.spec());
return presentation_frame &&
- presentation_frame->HasScreenAvailabilityListenerForTest(source_id);
+ presentation_frame->HasScreenAvailabilityListenerForTest(source);
}
void PresentationFrameManager::ListenForConnectionStateChange(
@@ -748,13 +761,13 @@ void PresentationServiceDelegateImpl::JoinSession(
weak_factory_.GetWeakPtr(), render_process_id, render_frame_id,
content::PresentationSessionInfo(presentation_url, presentation_id),
success_cb, error_cb));
- router_->JoinRoute(MediaSourceForPresentationUrl(presentation_url).id(),
- presentation_id,
- GetLastCommittedURLForFrame(
- RenderFrameHostId(render_process_id, render_frame_id))
- .GetOrigin(),
- web_contents_, route_response_callbacks, base::TimeDelta(),
- off_the_record);
+ GURL origin(GetLastCommittedURLForFrame(
+ RenderFrameHostId(render_process_id, render_frame_id))
+ .GetOrigin());
+ router_->JoinRoute(
+ MediaSourceForPresentationUrl(presentation_url, origin.spec()).id(),
+ presentation_id, origin, web_contents_, route_response_callbacks,
+ base::TimeDelta(), off_the_record);
}
void PresentationServiceDelegateImpl::CloseConnection(

Powered by Google App Engine
This is Rietveld 408576698