Chromium Code Reviews| 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..f1acd360d8d3504b174011b196640edc7c048812 100644 |
| --- a/chrome/browser/media/router/media_router_mojo_impl.cc |
| +++ b/chrome/browser/media/router/media_router_mojo_impl.cc |
| @@ -165,7 +165,8 @@ void MediaRouterMojoImpl::OnIssue(const interfaces::IssuePtr issue) { |
| void MediaRouterMojoImpl::OnSinksReceived( |
| const mojo::String& media_source, |
| - mojo::Array<interfaces::MediaSinkPtr> sinks) { |
| + mojo::Array<interfaces::MediaSinkPtr> sinks, |
| + mojo::Array<mojo::String> origins) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| DVLOG_WITH_INSTANCE(1) << "OnSinksReceived"; |
| auto it = sinks_queries_.find(media_source); |
| @@ -182,12 +183,21 @@ void MediaRouterMojoImpl::OnSinksReceived( |
| for (size_t i = 0; i < sinks.size(); ++i) |
| cached_sink_list.push_back(sinks[i].To<MediaSink>()); |
| + auto& origins_list = sinks_query->origins; |
| + origins_list.clear(); |
| + origins_list.reserve(origins.size()); |
| + for (size_t i = 0; i < origins.size(); ++i) { |
| + GURL origin(origins[i].get()); |
| + DLOG_IF(ERROR, !origin.is_valid()) << "Received invalid origin: " << origin; |
| + origins_list.push_back(origin); |
|
mark a. foltz
2016/03/11 01:20:23
If we receive an invalid origin from the MRPM, can
imcheng
2016/03/14 21:30:20
Changed it to do an early return if an origin is i
|
| + } |
| + |
| if (!sinks_query->observers.might_have_observers()) { |
| DVLOG_WITH_INSTANCE(1) |
| << "Received sink list without any active observers: " << media_source; |
| } else { |
| FOR_EACH_OBSERVER(MediaSinksObserver, sinks_query->observers, |
| - OnSinksReceived(cached_sink_list)); |
| + OnSinksUpdated(cached_sink_list, origins_list)); |
| } |
| } |
| @@ -395,7 +405,7 @@ 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->OnSinksUpdated(std::vector<MediaSink>(), std::vector<GURL>()); |
| } else { |
| // Need to call MRPM to start observing sinks if the query is new. |
| if (new_query) { |
| @@ -403,7 +413,8 @@ bool MediaRouterMojoImpl::RegisterMediaSinksObserver( |
| RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoStartObservingMediaSinks, |
| base::Unretained(this), source_id)); |
| } else if (sinks_query->has_cached_result) { |
| - observer->OnSinksReceived(sinks_query->cached_sink_list); |
| + observer->OnSinksUpdated(sinks_query->cached_sink_list, |
|
mark a. foltz
2016/03/11 01:20:23
It seems like an observer could get an empty list
imcheng
2016/03/14 21:30:20
It should be ok for now. In all cases, the observe
|
| + sinks_query->origins); |
| } |
| } |
| return true; |
| @@ -699,6 +710,7 @@ void MediaRouterMojoImpl::OnSinkAvailabilityUpdated( |
| query->is_active = false; |
| query->has_cached_result = false; |
| query->cached_sink_list.clear(); |
| + query->origins.clear(); |
| } |
| } else { |
| // Sinks are now available. Tell MRPM to start all sink queries again. |