| Index: chrome/browser/media/router/media_router_mojo_impl.cc
|
| diff --git a/chrome/browser/media/router/media_router_mojo_impl.cc b/chrome/browser/media/router/media_router_mojo_impl.cc
|
| index 787dbdb50c214333bb4730b1eea55f83b2c4d415..98e3f7428c522a8e617e4b8edc3b31286e4bf8d9 100644
|
| --- a/chrome/browser/media/router/media_router_mojo_impl.cc
|
| +++ b/chrome/browser/media/router/media_router_mojo_impl.cc
|
| @@ -165,10 +165,13 @@ void MediaRouterMojoImpl::OnIssue(const interfaces::IssuePtr issue) {
|
|
|
| void MediaRouterMojoImpl::OnSinksReceived(
|
| const mojo::String& media_source,
|
| + const mojo::String& origin,
|
| mojo::Array<interfaces::MediaSinkPtr> sinks) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| DVLOG_WITH_INSTANCE(1) << "OnSinksReceived";
|
| - auto it = sinks_queries_.find(media_source);
|
| + MediaSource source(media_source);
|
| + source.set_origin(origin);
|
| + auto it = sinks_queries_.find(source);
|
| if (it == sinks_queries_.end()) {
|
| DVLOG_WITH_INSTANCE(1) << "Received sink list without MediaSinksQuery.";
|
| return;
|
| @@ -187,7 +190,7 @@ void MediaRouterMojoImpl::OnSinksReceived(
|
| << "Received sink list without any active observers: " << media_source;
|
| } else {
|
| FOR_EACH_OBSERVER(MediaSinksObserver, sinks_query->observers,
|
| - OnSinksReceived(cached_sink_list));
|
| + OnSinksReceived(source, cached_sink_list));
|
| }
|
| }
|
|
|
| @@ -380,13 +383,13 @@ bool MediaRouterMojoImpl::RegisterMediaSinksObserver(
|
|
|
| // Create an observer list for the media source and add |observer|
|
| // to it. Fail if |observer| is already registered.
|
| - const std::string& source_id = observer->source().id();
|
| - auto* sinks_query = sinks_queries_.get(source_id);
|
| + const MediaSource& source = observer->source();
|
| + auto* sinks_query = sinks_queries_.get(source);
|
| bool new_query = false;
|
| if (!sinks_query) {
|
| new_query = true;
|
| sinks_query = new MediaSinksQuery;
|
| - sinks_queries_.add(source_id, make_scoped_ptr(sinks_query));
|
| + sinks_queries_.add(source, make_scoped_ptr(sinks_query));
|
| } else {
|
| DCHECK(!sinks_query->observers.HasObserver(observer));
|
| }
|
| @@ -395,15 +398,15 @@ bool MediaRouterMojoImpl::RegisterMediaSinksObserver(
|
| // |observer| can be immediately notified with an empty list.
|
| sinks_query->observers.AddObserver(observer);
|
| if (availability_ == interfaces::MediaRouter::SinkAvailability::UNAVAILABLE) {
|
| - observer->OnSinksReceived(std::vector<MediaSink>());
|
| + observer->OnSinksReceived(source, std::vector<MediaSink>());
|
| } else {
|
| // Need to call MRPM to start observing sinks if the query is new.
|
| if (new_query) {
|
| SetWakeReason(MediaRouteProviderWakeReason::START_OBSERVING_MEDIA_SINKS);
|
| RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoStartObservingMediaSinks,
|
| - base::Unretained(this), source_id));
|
| + base::Unretained(this), source));
|
| } else if (sinks_query->has_cached_result) {
|
| - observer->OnSinksReceived(sinks_query->cached_sink_list);
|
| + observer->OnSinksReceived(source, sinks_query->cached_sink_list);
|
| }
|
| }
|
| return true;
|
| @@ -413,8 +416,8 @@ void MediaRouterMojoImpl::UnregisterMediaSinksObserver(
|
| MediaSinksObserver* observer) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| - const MediaSource::Id& source_id = observer->source().id();
|
| - auto* sinks_query = sinks_queries_.get(source_id);
|
| + const MediaSource& source = observer->source();
|
| + auto* sinks_query = sinks_queries_.get(source);
|
| if (!sinks_query || !sinks_query->observers.HasObserver(observer)) {
|
| return;
|
| }
|
| @@ -434,9 +437,9 @@ void MediaRouterMojoImpl::UnregisterMediaSinksObserver(
|
| // The |sinks_queries_| entry will be removed in the immediate or deferred
|
| // |DoStopObservingMediaSinks| call.
|
| RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoStopObservingMediaSinks,
|
| - base::Unretained(this), source_id));
|
| + base::Unretained(this), source));
|
| } else {
|
| - sinks_queries_.erase(source_id);
|
| + sinks_queries_.erase(source);
|
| }
|
| }
|
| }
|
| @@ -726,27 +729,28 @@ void MediaRouterMojoImpl::OnPresentationConnectionClosed(
|
| }
|
|
|
| void MediaRouterMojoImpl::DoStartObservingMediaSinks(
|
| - const MediaSource::Id& source_id) {
|
| - DVLOG_WITH_INSTANCE(1) << "DoStartObservingMediaSinks: " << source_id;
|
| + const MediaSource& source) {
|
| + DVLOG_WITH_INSTANCE(1) << "DoStartObservingMediaSinks: " << source.id();
|
| // No need to call MRPM if there are no sinks available.
|
| if (availability_ == interfaces::MediaRouter::SinkAvailability::UNAVAILABLE)
|
| return;
|
|
|
| // No need to call MRPM if all observers have been removed in the meantime.
|
| - auto* sinks_query = sinks_queries_.get(source_id);
|
| + auto* sinks_query = sinks_queries_.get(source);
|
| if (!sinks_query || !sinks_query->observers.might_have_observers())
|
| return;
|
|
|
| - DVLOG_WITH_INSTANCE(1) << "MRPM.StartObservingMediaSinks: " << source_id;
|
| - media_route_provider_->StartObservingMediaSinks(source_id);
|
| + DVLOG_WITH_INSTANCE(1) << "MRPM.StartObservingMediaSinks: " << source.id();
|
| + media_route_provider_->StartObservingMediaSinks(source.id(),
|
| + source.origin());
|
| sinks_query->is_active = true;
|
| }
|
|
|
| void MediaRouterMojoImpl::DoStopObservingMediaSinks(
|
| - const MediaSource::Id& source_id) {
|
| - DVLOG_WITH_INSTANCE(1) << "DoStopObservingMediaSinks: " << source_id;
|
| + const MediaSource& source) {
|
| + DVLOG_WITH_INSTANCE(1) << "DoStopObservingMediaSinks: " << source.id();
|
|
|
| - auto* sinks_query = sinks_queries_.get(source_id);
|
| + auto* sinks_query = sinks_queries_.get(source);
|
| // No need to call MRPM if observers have been added in the meantime,
|
| // or StopObservingMediaSinks has already been called.
|
| if (!sinks_query || !sinks_query->is_active ||
|
| @@ -754,9 +758,10 @@ void MediaRouterMojoImpl::DoStopObservingMediaSinks(
|
| return;
|
| }
|
|
|
| - DVLOG_WITH_INSTANCE(1) << "MRPM.StopObservingMediaSinks: " << source_id;
|
| - media_route_provider_->StopObservingMediaSinks(source_id);
|
| - sinks_queries_.erase(source_id);
|
| + DVLOG_WITH_INSTANCE(1) << "MRPM.StopObservingMediaSinks: " << source.id();
|
| + media_route_provider_->StopObservingMediaSinks(source.id(),
|
| + source.origin());
|
| + sinks_queries_.erase(source);
|
| }
|
|
|
| void MediaRouterMojoImpl::DoStartObservingMediaRoutes(
|
|
|