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

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

Issue 2837363002: [Media Router] Use DialMediaSinkService in MediaRouterMojoImpl (Closed)
Patch Set: resolve code review comments from Mark Created 3 years, 7 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 8
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/guid.h" 12 #include "base/guid.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/observer_list.h" 15 #include "base/observer_list.h"
16 #include "base/stl_util.h" 16 #include "base/stl_util.h"
17 #include "base/strings/stringprintf.h" 17 #include "base/strings/stringprintf.h"
18 #include "chrome/browser/media/router/discovery/dial/dial_media_sink_service.h"
18 #include "chrome/browser/media/router/issues_observer.h" 19 #include "chrome/browser/media/router/issues_observer.h"
19 #include "chrome/browser/media/router/media_router_factory.h" 20 #include "chrome/browser/media/router/media_router_factory.h"
21 #include "chrome/browser/media/router/media_router_feature.h"
20 #include "chrome/browser/media/router/media_routes_observer.h" 22 #include "chrome/browser/media/router/media_routes_observer.h"
21 #include "chrome/browser/media/router/media_sinks_observer.h" 23 #include "chrome/browser/media/router/media_sinks_observer.h"
22 #include "chrome/browser/media/router/mojo/media_route_controller.h" 24 #include "chrome/browser/media/router/mojo/media_route_controller.h"
23 #include "chrome/browser/media/router/mojo/media_route_provider_util_win.h" 25 #include "chrome/browser/media/router/mojo/media_route_provider_util_win.h"
24 #include "chrome/browser/media/router/mojo/media_router_mojo_metrics.h" 26 #include "chrome/browser/media/router/mojo/media_router_mojo_metrics.h"
25 #include "chrome/browser/media/router/route_message_observer.h" 27 #include "chrome/browser/media/router/route_message_observer.h"
26 #include "chrome/browser/sessions/session_tab_helper.h" 28 #include "chrome/browser/sessions/session_tab_helper.h"
27 #include "chrome/common/media_router/media_source_helper.h" 29 #include "chrome/common/media_router/media_source_helper.h"
28 #include "chrome/common/media_router/route_message.h" 30 #include "chrome/common/media_router/route_message.h"
29 #include "content/public/browser/browser_thread.h" 31 #include "content/public/browser/browser_thread.h"
(...skipping 21 matching lines...) Expand all
51 53
52 MediaRouterMojoImpl::MediaRoutesQuery::MediaRoutesQuery() = default; 54 MediaRouterMojoImpl::MediaRoutesQuery::MediaRoutesQuery() = default;
53 55
54 MediaRouterMojoImpl::MediaRoutesQuery::~MediaRoutesQuery() = default; 56 MediaRouterMojoImpl::MediaRoutesQuery::~MediaRoutesQuery() = default;
55 57
56 MediaRouterMojoImpl::MediaSinksQuery::MediaSinksQuery() = default; 58 MediaRouterMojoImpl::MediaSinksQuery::MediaSinksQuery() = default;
57 59
58 MediaRouterMojoImpl::MediaSinksQuery::~MediaSinksQuery() = default; 60 MediaRouterMojoImpl::MediaSinksQuery::~MediaSinksQuery() = default;
59 61
60 MediaRouterMojoImpl::MediaRouterMojoImpl( 62 MediaRouterMojoImpl::MediaRouterMojoImpl(
61 extensions::EventPageTracker* event_page_tracker) 63 extensions::EventPageTracker* event_page_tracker,
64 content::BrowserContext* context)
62 : event_page_tracker_(event_page_tracker), 65 : event_page_tracker_(event_page_tracker),
63 instance_id_(base::GenerateGUID()), 66 instance_id_(base::GenerateGUID()),
64 availability_(mojom::MediaRouter::SinkAvailability::UNAVAILABLE), 67 availability_(mojom::MediaRouter::SinkAvailability::UNAVAILABLE),
65 current_wake_reason_(MediaRouteProviderWakeReason::TOTAL_COUNT), 68 current_wake_reason_(MediaRouteProviderWakeReason::TOTAL_COUNT),
66 weak_factory_(this) { 69 weak_factory_(this) {
67 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 70 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
68 DCHECK(event_page_tracker_); 71 DCHECK(event_page_tracker_);
69 #if defined(OS_WIN) 72 #if defined(OS_WIN)
70 CanFirewallUseLocalPorts( 73 CanFirewallUseLocalPorts(
71 base::Bind(&MediaRouterMojoImpl::OnFirewallCheckComplete, 74 base::Bind(&MediaRouterMojoImpl::OnFirewallCheckComplete,
72 weak_factory_.GetWeakPtr())); 75 weak_factory_.GetWeakPtr()));
73 #endif 76 #endif
77 context_ = context;
Kevin M 2017/05/03 21:07:27 Put this in the initialization list?
zhaobin 2017/05/04 23:52:36 Done.
74 } 78 }
75 79
76 MediaRouterMojoImpl::~MediaRouterMojoImpl() { 80 MediaRouterMojoImpl::~MediaRouterMojoImpl() {
77 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 81 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
78 } 82 }
79 83
80 // static 84 // static
81 void MediaRouterMojoImpl::BindToRequest( 85 void MediaRouterMojoImpl::BindToRequest(
82 const extensions::Extension* extension, 86 const extensions::Extension* extension,
83 content::BrowserContext* context, 87 content::BrowserContext* context,
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 "suspended."; 148 "suspended.";
145 media_route_provider_.reset(); 149 media_route_provider_.reset();
146 SetWakeReason(MediaRouteProviderWakeReason::REGISTER_MEDIA_ROUTE_PROVIDER); 150 SetWakeReason(MediaRouteProviderWakeReason::REGISTER_MEDIA_ROUTE_PROVIDER);
147 AttemptWakeEventPage(); 151 AttemptWakeEventPage();
148 return; 152 return;
149 } 153 }
150 154
151 media_route_provider_ = std::move(media_route_provider_ptr); 155 media_route_provider_ = std::move(media_route_provider_ptr);
152 media_route_provider_.set_connection_error_handler(base::Bind( 156 media_route_provider_.set_connection_error_handler(base::Bind(
153 &MediaRouterMojoImpl::OnConnectionError, base::Unretained(this))); 157 &MediaRouterMojoImpl::OnConnectionError, base::Unretained(this)));
154 callback.Run(instance_id_); 158
159 auto config = mojom::MediaRouteProviderConfig::New();
160 config->enable_dial_discovery = !media_router::DialLocalDiscoveryEnabled();
Kevin M 2017/05/03 21:07:27 Eh??? This doesn't make sense - you're setting an
zhaobin 2017/05/04 23:52:36 Yes. config->enable_dial_discovery controls extens
161 config->enable_cast_discovery = !media_router::CastDiscoveryEnabled();
162 callback.Run(instance_id_, std::move(config));
155 ExecutePendingRequests(); 163 ExecutePendingRequests();
156 wakeup_attempt_count_ = 0; 164 wakeup_attempt_count_ = 0;
157 #if defined(OS_WIN) 165 #if defined(OS_WIN)
158 // The MRPM extension already turns on mDNS discovery for platforms other than 166 // The MRPM extension already turns on mDNS discovery for platforms other than
159 // Windows. It only relies on this signalling from MR on Windows to avoid 167 // Windows. It only relies on this signalling from MR on Windows to avoid
160 // triggering a firewall prompt out of the context of MR from the user's 168 // triggering a firewall prompt out of the context of MR from the user's
161 // perspective. This particular call reminds the extension to enable mDNS 169 // perspective. This particular call reminds the extension to enable mDNS
162 // discovery when it wakes up, has been upgraded, etc. 170 // discovery when it wakes up, has been upgraded, etc.
163 if (should_enable_mdns_discovery_) { 171 if (should_enable_mdns_discovery_) {
164 DoEnsureMdnsDiscoveryEnabled(); 172 DoEnsureMdnsDiscoveryEnabled();
165 } 173 }
166 #endif 174 #endif
175
176 if (media_router::DialLocalDiscoveryEnabled())
177 StartDiscovery();
167 } 178 }
168 179
169 void MediaRouterMojoImpl::OnIssue(const IssueInfo& issue) { 180 void MediaRouterMojoImpl::OnIssue(const IssueInfo& issue) {
170 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 181 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
171 DVLOG_WITH_INSTANCE(1) << "OnIssue " << issue.title; 182 DVLOG_WITH_INSTANCE(1) << "OnIssue " << issue.title;
172 issue_manager_.AddIssue(issue); 183 issue_manager_.AddIssue(issue);
173 } 184 }
174 185
175 void MediaRouterMojoImpl::OnSinksReceived( 186 void MediaRouterMojoImpl::OnSinksReceived(
176 const std::string& media_source, 187 const std::string& media_source,
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 std::move(mojo_media_controller_request), 434 std::move(mojo_media_controller_request),
424 route_controller->BindObserverPtr())); 435 route_controller->BindObserverPtr()));
425 route_controllers_.emplace(route_id, route_controller.get()); 436 route_controllers_.emplace(route_id, route_controller.get());
426 return route_controller; 437 return route_controller;
427 } 438 }
428 439
429 void MediaRouterMojoImpl::ProvideSinks( 440 void MediaRouterMojoImpl::ProvideSinks(
430 const std::string& provider_name, 441 const std::string& provider_name,
431 const std::vector<MediaSinkInternal>& sinks) { 442 const std::vector<MediaSinkInternal>& sinks) {
432 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 443 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
444 DVLOG_WITH_INSTANCE(1) << "OnDialMediaSinkDiscovered found " << sinks.size()
445 << " devices...";
433 446
434 SetWakeReason(MediaRouteProviderWakeReason::PROVIDE_SINKS); 447 SetWakeReason(MediaRouteProviderWakeReason::PROVIDE_SINKS);
435 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoProvideSinks, 448 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoProvideSinks,
436 base::Unretained(this), provider_name, sinks)); 449 base::Unretained(this), provider_name, sinks));
437 } 450 }
438 451
439 bool MediaRouterMojoImpl::RegisterMediaSinksObserver( 452 bool MediaRouterMojoImpl::RegisterMediaSinksObserver(
440 MediaSinksObserver* observer) { 453 MediaSinksObserver* observer) {
441 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 454 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
442 455
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 } 1043 }
1031 } 1044 }
1032 1045
1033 void MediaRouterMojoImpl::OnFirewallCheckComplete( 1046 void MediaRouterMojoImpl::OnFirewallCheckComplete(
1034 bool firewall_can_use_local_ports) { 1047 bool firewall_can_use_local_ports) {
1035 if (firewall_can_use_local_ports) 1048 if (firewall_can_use_local_ports)
1036 EnsureMdnsDiscoveryEnabled(); 1049 EnsureMdnsDiscoveryEnabled();
1037 } 1050 }
1038 #endif 1051 #endif
1039 1052
1053 void MediaRouterMojoImpl::StartDiscovery() {
1054 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
1055 DVLOG_WITH_INSTANCE(1) << "StartDiscovery";
1056
1057 if (dial_media_sink_service_)
1058 return;
1059
1060 auto* profile = Profile::FromBrowserContext(context_);
1061 if (!profile)
1062 return;
1063
1064 dial_media_sink_service_ =
1065 new DialMediaSinkService(base::Bind(&MediaRouterMojoImpl::ProvideSinks,
1066 base::Unretained(this), "dial"),
1067 profile->GetRequestContext());
1068 dial_media_sink_service_->Start();
1069 }
1070
1040 void MediaRouterMojoImpl::UpdateMediaSinks( 1071 void MediaRouterMojoImpl::UpdateMediaSinks(
1041 const MediaSource::Id& source_id) { 1072 const MediaSource::Id& source_id) {
1042 SetWakeReason(MediaRouteProviderWakeReason::UPDATE_MEDIA_SINKS); 1073 SetWakeReason(MediaRouteProviderWakeReason::UPDATE_MEDIA_SINKS);
1043 RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoUpdateMediaSinks, 1074 RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoUpdateMediaSinks,
1044 base::Unretained(this), source_id)); 1075 base::Unretained(this), source_id));
1045 } 1076 }
1046 1077
1047 void MediaRouterMojoImpl::DoUpdateMediaSinks( 1078 void MediaRouterMojoImpl::DoUpdateMediaSinks(
1048 const MediaSource::Id& source_id) { 1079 const MediaSource::Id& source_id) {
1049 DVLOG_WITH_INSTANCE(1) << "DoUpdateMediaSinks: " << source_id; 1080 DVLOG_WITH_INSTANCE(1) << "DoUpdateMediaSinks: " << source_id;
(...skipping 15 matching lines...) Expand all
1065 1096
1066 void MediaRouterMojoImpl::OnMediaControllerCreated( 1097 void MediaRouterMojoImpl::OnMediaControllerCreated(
1067 const MediaRoute::Id& route_id, 1098 const MediaRoute::Id& route_id,
1068 bool success) { 1099 bool success) {
1069 // TODO(takumif): Record success/failure with UMA. 1100 // TODO(takumif): Record success/failure with UMA.
1070 DVLOG_WITH_INSTANCE(1) << "OnMediaControllerCreated: " << route_id 1101 DVLOG_WITH_INSTANCE(1) << "OnMediaControllerCreated: " << route_id
1071 << (success ? " was successful." : " failed."); 1102 << (success ? " was successful." : " failed.");
1072 } 1103 }
1073 1104
1074 } // namespace media_router 1105 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698