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

Side by Side Diff: chrome/browser/media/router/mojo/media_router_mojo_impl.cc

Issue 1805813002: [Media Router] Wiring for searching route providers for new sinks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Pseudo sinks and automatic route creation Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/media/router/mojo/media_router_mojo_impl.h" 5 #include "chrome/browser/media/router/mojo/media_router_mojo_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 if (!sinks_query->observers.might_have_observers()) { 227 if (!sinks_query->observers.might_have_observers()) {
228 DVLOG_WITH_INSTANCE(1) 228 DVLOG_WITH_INSTANCE(1)
229 << "Received sink list without any active observers: " << media_source; 229 << "Received sink list without any active observers: " << media_source;
230 } else { 230 } else {
231 FOR_EACH_OBSERVER( 231 FOR_EACH_OBSERVER(
232 MediaSinksObserver, sinks_query->observers, 232 MediaSinksObserver, sinks_query->observers,
233 OnSinksUpdated(sinks_query->cached_sink_list, sinks_query->origins)); 233 OnSinksUpdated(sinks_query->cached_sink_list, sinks_query->origins));
234 } 234 }
235 } 235 }
236 236
237 void MediaRouterMojoImpl::OnSearchSinkIdReceived(
238 const mojo::String& pseudo_sink_id,
239 const mojo::String& sink_id) {
240 auto sink_id_callback_entry = search_callbacks_.find(pseudo_sink_id);
241 if (sink_id_callback_entry == search_callbacks_.end()) {
amp 2016/04/06 21:29:36 Is this scenario expected? Is it possible to get
btolsch 2016/04/08 09:31:24 This isn't expected, it is just a generic guard. I
242 DVLOG_WITH_INSTANCE(1)
243 << "Received sink id for a search that is not in progress: "
244 << pseudo_sink_id;
245 return;
246 }
247 sink_id_callback_entry->second.Run(sink_id);
248 search_callbacks_.erase(sink_id_callback_entry);
249 }
250
237 void MediaRouterMojoImpl::OnRoutesUpdated( 251 void MediaRouterMojoImpl::OnRoutesUpdated(
238 mojo::Array<interfaces::MediaRoutePtr> routes, 252 mojo::Array<interfaces::MediaRoutePtr> routes,
239 const mojo::String& media_source, 253 const mojo::String& media_source,
240 mojo::Array<mojo::String> joinable_route_ids) { 254 mojo::Array<mojo::String> joinable_route_ids) {
241 DCHECK(thread_checker_.CalledOnValidThread()); 255 DCHECK(thread_checker_.CalledOnValidThread());
242 256
243 DVLOG_WITH_INSTANCE(1) << "OnRoutesUpdated"; 257 DVLOG_WITH_INSTANCE(1) << "OnRoutesUpdated";
244 auto it = routes_queries_.find(media_source); 258 auto it = routes_queries_.find(media_source);
245 if (it == routes_queries_.end() || 259 if (it == routes_queries_.end() ||
246 !(it->second->observers.might_have_observers())) { 260 !(it->second->observers.might_have_observers())) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 media_route.To<scoped_ptr<MediaRoute>>(), presentation_id); 303 media_route.To<scoped_ptr<MediaRoute>>(), presentation_id);
290 if (result->route()->off_the_record()) 304 if (result->route()->off_the_record())
291 OnOffTheRecordRouteCreated(result->route()->media_route_id()); 305 OnOffTheRecordRouteCreated(result->route()->media_route_id());
292 } 306 }
293 307
294 // TODO(imcheng): Add UMA histogram based on result code (crbug.com/583044). 308 // TODO(imcheng): Add UMA histogram based on result code (crbug.com/583044).
295 for (const MediaRouteResponseCallback& callback : callbacks) 309 for (const MediaRouteResponseCallback& callback : callbacks)
296 callback.Run(*result); 310 callback.Run(*result);
297 } 311 }
298 312
313 void MediaRouterMojoImpl::SearchAndCreateResponseReceived(
314 const std::string& presentation_id,
315 const std::vector<MediaRouteResponseCallback>& route_callbacks,
316 interfaces::MediaRoutePtr media_route,
317 const mojo::String& error_text,
318 interfaces::RouteRequestResultCode result_code) {
319 scoped_ptr<RouteRequestResult> result;
320 if (media_route.is_null()) {
321 // An error occurred.
322 DCHECK(!error_text.is_null());
323 std::string error =
324 !error_text.get().empty() ? error_text.get() : "Unknown error.";
325
326 result = RouteRequestResult::FromError(
amp 2016/04/06 21:29:36 Does this result in an issue being shown in the UI
btolsch 2016/04/08 09:31:24 This shows an issue in the UI like other route cre
327 error, mojo::RouteRequestResultCodeFromMojo(result_code));
328 } else {
329 result = RouteRequestResult::FromSuccess(
330 media_route.To<scoped_ptr<MediaRoute>>(), presentation_id);
331 }
332
333 for (const auto& route_callback : route_callbacks) {
334 route_callback.Run(*result);
335 }
336 }
337
299 void MediaRouterMojoImpl::CreateRoute( 338 void MediaRouterMojoImpl::CreateRoute(
300 const MediaSource::Id& source_id, 339 const MediaSource::Id& source_id,
301 const MediaSink::Id& sink_id, 340 const MediaSink::Id& sink_id,
302 const GURL& origin, 341 const GURL& origin,
303 content::WebContents* web_contents, 342 content::WebContents* web_contents,
304 const std::vector<MediaRouteResponseCallback>& callbacks, 343 const std::vector<MediaRouteResponseCallback>& callbacks,
305 base::TimeDelta timeout, 344 base::TimeDelta timeout,
306 bool off_the_record) { 345 bool off_the_record) {
307 DCHECK(thread_checker_.CalledOnValidThread()); 346 DCHECK(thread_checker_.CalledOnValidThread());
308 347
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 DCHECK(thread_checker_.CalledOnValidThread()); 464 DCHECK(thread_checker_.CalledOnValidThread());
426 issue_manager_.ClearIssue(issue_id); 465 issue_manager_.ClearIssue(issue_id);
427 } 466 }
428 467
429 void MediaRouterMojoImpl::OnUserGesture() { 468 void MediaRouterMojoImpl::OnUserGesture() {
430 #if defined(OS_WIN) 469 #if defined(OS_WIN)
431 EnsureMdnsDiscoveryEnabled(); 470 EnsureMdnsDiscoveryEnabled();
432 #endif 471 #endif
433 } 472 }
434 473
474 void MediaRouterMojoImpl::SearchSinksAndCreateRoute(
475 const MediaSink::Id& sink_id,
476 const MediaSource::Id& source_id,
477 const std::string& search_input,
478 const std::string& domain,
479 const GURL& origin,
480 content::WebContents* web_contents,
481 const std::vector<MediaRouteResponseCallback>& route_callbacks,
482 const MediaSinkSearchResponseCallback& sink_callback,
483 base::TimeDelta timeout,
484 bool off_the_record) {
485 DCHECK(thread_checker_.CalledOnValidThread());
486
487 int tab_id = SessionTabHelper::IdForTab(web_contents);
488 SetWakeReason(MediaRouteProviderWakeReason::SEARCH_SINKS);
489 RunOrDefer(
490 base::Bind(&MediaRouterMojoImpl::DoSearchSinksAndCreateRoute,
491 base::Unretained(this), sink_id, source_id, search_input,
492 domain, origin.is_empty() ? "" : origin.spec(), tab_id,
493 route_callbacks, sink_callback, timeout, off_the_record));
494 }
495
435 bool MediaRouterMojoImpl::RegisterMediaSinksObserver( 496 bool MediaRouterMojoImpl::RegisterMediaSinksObserver(
436 MediaSinksObserver* observer) { 497 MediaSinksObserver* observer) {
437 DCHECK(thread_checker_.CalledOnValidThread()); 498 DCHECK(thread_checker_.CalledOnValidThread());
438 499
439 // Create an observer list for the media source and add |observer| 500 // Create an observer list for the media source and add |observer|
440 // to it. Fail if |observer| is already registered. 501 // to it. Fail if |observer| is already registered.
441 const std::string& source_id = observer->source().id(); 502 const std::string& source_id = observer->source().id();
442 auto* sinks_query = sinks_queries_.get(source_id); 503 auto* sinks_query = sinks_queries_.get(source_id);
443 bool new_query = false; 504 bool new_query = false;
444 if (!sinks_query) { 505 if (!sinks_query) {
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 void MediaRouterMojoImpl::DoStopListeningForRouteMessages( 756 void MediaRouterMojoImpl::DoStopListeningForRouteMessages(
696 const MediaRoute::Id& route_id) { 757 const MediaRoute::Id& route_id) {
697 DVLOG_WITH_INSTANCE(1) << "StopListeningForRouteMessages"; 758 DVLOG_WITH_INSTANCE(1) << "StopListeningForRouteMessages";
698 759
699 // No need to erase |route_ids_listening_for_messages_| entry here. 760 // No need to erase |route_ids_listening_for_messages_| entry here.
700 // It will be removed when there are no more observers by the time 761 // It will be removed when there are no more observers by the time
701 // |OnRouteMessagesReceived| is invoked. 762 // |OnRouteMessagesReceived| is invoked.
702 media_route_provider_->StopListeningForRouteMessages(route_id); 763 media_route_provider_->StopListeningForRouteMessages(route_id);
703 } 764 }
704 765
766 void MediaRouterMojoImpl::DoSearchSinksAndCreateRoute(
767 const MediaSink::Id& sink_id,
768 const MediaSource::Id& source_id,
769 const std::string& search_input,
770 const std::string& domain,
771 const std::string& origin,
772 int tab_id,
773 const std::vector<MediaRouteResponseCallback>& route_callbacks,
774 const MediaSinkSearchResponseCallback& sink_callback,
775 base::TimeDelta timeout,
776 bool off_the_record) {
777 auto sink_callback_entry = search_callbacks_.find(sink_id);
778 if (sink_callback_entry != search_callbacks_.end()) {
779 LOG(WARNING) << "SearchSinksAndCreateRoute for pseudo sink " << sink_id
780 << " already has a registered callback.";
781 } else {
782 bool insert_wil_succeed;
amp 2016/04/06 21:29:36 s/wil/will/ Unless this is some kind of style/nam
btolsch 2016/04/08 09:31:24 Done.
783 std::tie(sink_callback_entry, insert_wil_succeed) =
784 search_callbacks_.insert(std::make_pair(sink_id, sink_callback));
785 }
786
787 std::string presentation_id("mr_");
788 presentation_id += base::GenerateGUID();
789 DVLOG_WITH_INSTANCE(1) << "SearchSinksAndCreateRoute";
790 auto sink_search_criteria = interfaces::SinkSearchCriteria::New();
791 sink_search_criteria->input = search_input;
792 sink_search_criteria->domain = domain;
793 media_route_provider_->SearchSinksAndCreateRoute(
794 sink_id, source_id, std::move(sink_search_criteria), presentation_id,
795 origin, tab_id,
796 timeout > base::TimeDelta() ? timeout.InMilliseconds() : 0,
797 off_the_record,
798 base::Bind(&MediaRouterMojoImpl::SearchAndCreateResponseReceived,
799 weak_factory_.GetWeakPtr(), presentation_id, route_callbacks));
800 }
801
705 void MediaRouterMojoImpl::OnRouteMessagesReceived( 802 void MediaRouterMojoImpl::OnRouteMessagesReceived(
706 const MediaRoute::Id& route_id, 803 const MediaRoute::Id& route_id,
707 mojo::Array<interfaces::RouteMessagePtr> messages, 804 mojo::Array<interfaces::RouteMessagePtr> messages,
708 bool error) { 805 bool error) {
709 DVLOG(1) << "OnRouteMessagesReceived"; 806 DVLOG(1) << "OnRouteMessagesReceived";
710 807
711 // If |messages| is null, then no more messages will come from this route. 808 // If |messages| is null, then no more messages will come from this route.
712 // We can stop listening. 809 // We can stop listening.
713 if (error) { 810 if (error) {
714 DVLOG(2) << "Encountered error in OnRouteMessagesReceived for " << route_id; 811 DVLOG(2) << "Encountered error in OnRouteMessagesReceived for " << route_id;
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 } 1077 }
981 1078
982 void MediaRouterMojoImpl::OnFirewallCheckComplete( 1079 void MediaRouterMojoImpl::OnFirewallCheckComplete(
983 bool firewall_can_use_local_ports) { 1080 bool firewall_can_use_local_ports) {
984 if (firewall_can_use_local_ports) 1081 if (firewall_can_use_local_ports)
985 EnsureMdnsDiscoveryEnabled(); 1082 EnsureMdnsDiscoveryEnabled();
986 } 1083 }
987 #endif 1084 #endif
988 1085
989 } // namespace media_router 1086 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698