OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/discovery/mdns/cast_media_sink_service.h" | 5 #include "chrome/browser/media/router/discovery/mdns/cast_media_sink_service.h" |
6 | 6 |
7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
8 #include "chrome/browser/browser_process.h" | 8 #include "chrome/browser/browser_process.h" |
9 #include "chrome/common/media_router/discovery/media_sink_internal.h" | 9 #include "chrome/common/media_router/discovery/media_sink_internal.h" |
10 #include "components/cast_channel/cast_socket_service.h" | 10 #include "components/cast_channel/cast_socket_service.h" |
11 #include "components/cast_channel/cast_socket_service_factory.h" | |
12 #include "components/net_log/chrome_net_log.h" | 11 #include "components/net_log/chrome_net_log.h" |
13 #include "content/public/common/content_client.h" | 12 #include "content/public/common/content_client.h" |
14 #include "net/base/host_port_pair.h" | 13 #include "net/base/host_port_pair.h" |
15 #include "net/base/ip_address.h" | 14 #include "net/base/ip_address.h" |
16 | 15 |
17 namespace { | 16 namespace { |
18 | 17 |
19 constexpr char kObserverId[] = "browser_observer_id"; | |
20 | |
21 enum ErrorType { | 18 enum ErrorType { |
22 NONE, | 19 NONE, |
23 NOT_CAST_DEVICE, | 20 NOT_CAST_DEVICE, |
24 MISSING_ID, | 21 MISSING_ID, |
25 MISSING_FRIENDLY_NAME, | 22 MISSING_FRIENDLY_NAME, |
26 MISSING_OR_INVALID_IP_ADDRESS, | 23 MISSING_OR_INVALID_IP_ADDRESS, |
27 MISSING_OR_INVALID_PORT, | 24 MISSING_OR_INVALID_PORT, |
28 }; | 25 }; |
29 | 26 |
30 ErrorType CreateCastMediaSink(const media_router::DnsSdService& service, | 27 ErrorType CreateCastMediaSink(const media_router::DnsSdService& service, |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 } // namespace | 80 } // namespace |
84 | 81 |
85 namespace media_router { | 82 namespace media_router { |
86 | 83 |
87 // static | 84 // static |
88 const char CastMediaSinkService::kCastServiceType[] = "_googlecast._tcp.local"; | 85 const char CastMediaSinkService::kCastServiceType[] = "_googlecast._tcp.local"; |
89 | 86 |
90 CastMediaSinkService::CastMediaSinkService( | 87 CastMediaSinkService::CastMediaSinkService( |
91 const OnSinksDiscoveredCallback& callback, | 88 const OnSinksDiscoveredCallback& callback, |
92 content::BrowserContext* browser_context) | 89 content::BrowserContext* browser_context) |
93 : MediaSinkServiceBase(callback) { | 90 : MediaSinkServiceBase(callback), |
| 91 cast_socket_service_(cast_channel::CastSocketService::GetInstance()) { |
94 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); | 92 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
95 cast_socket_service_ = cast_channel::CastSocketServiceFactory::GetInstance() | |
96 ->GetForBrowserContext(browser_context); | |
97 DCHECK(cast_socket_service_); | 93 DCHECK(cast_socket_service_); |
98 } | 94 } |
99 | 95 |
100 CastMediaSinkService::CastMediaSinkService( | 96 CastMediaSinkService::CastMediaSinkService( |
101 const OnSinksDiscoveredCallback& callback, | 97 const OnSinksDiscoveredCallback& callback, |
102 cast_channel::CastSocketService* cast_socket_service) | 98 cast_channel::CastSocketService* cast_socket_service) |
103 : MediaSinkServiceBase(callback), | 99 : MediaSinkServiceBase(callback), |
104 cast_socket_service_(cast_socket_service) { | 100 cast_socket_service_(cast_socket_service) { |
105 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); | 101 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
106 DCHECK(cast_socket_service_); | 102 DCHECK(cast_socket_service_); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 base::Bind(&CastMediaSinkService::OpenChannelOnIOThread, this, service, | 158 base::Bind(&CastMediaSinkService::OpenChannelOnIOThread, this, service, |
163 net::IPEndPoint(ip_address, host_port_pair.port()))); | 159 net::IPEndPoint(ip_address, host_port_pair.port()))); |
164 } | 160 } |
165 | 161 |
166 MediaSinkServiceBase::RestartTimer(); | 162 MediaSinkServiceBase::RestartTimer(); |
167 } | 163 } |
168 | 164 |
169 void CastMediaSinkService::OpenChannelOnIOThread( | 165 void CastMediaSinkService::OpenChannelOnIOThread( |
170 const DnsSdService& service, | 166 const DnsSdService& service, |
171 const net::IPEndPoint& ip_endpoint) { | 167 const net::IPEndPoint& ip_endpoint) { |
172 auto* observer = cast_socket_service_->GetObserver(kObserverId); | 168 if (!observer_) |
173 if (!observer) { | 169 observer_.reset(new CastSocketObserver()); |
174 observer = new CastSocketObserver(); | |
175 cast_socket_service_->AddObserver(kObserverId, base::WrapUnique(observer)); | |
176 } | |
177 | 170 |
178 cast_socket_service_->OpenSocket( | 171 cast_socket_service_->OpenSocket( |
179 ip_endpoint, g_browser_process->net_log(), | 172 ip_endpoint, g_browser_process->net_log(), |
180 base::Bind(&CastMediaSinkService::OnChannelOpenedOnIOThread, this, | 173 base::Bind(&CastMediaSinkService::OnChannelOpenedOnIOThread, this, |
181 service), | 174 service), |
182 observer); | 175 observer_.get()); |
183 } | 176 } |
184 | 177 |
185 void CastMediaSinkService::OnChannelOpenedOnIOThread( | 178 void CastMediaSinkService::OnChannelOpenedOnIOThread( |
186 const DnsSdService& service, | 179 const DnsSdService& service, |
187 int channel_id, | 180 int channel_id, |
188 cast_channel::ChannelError channel_error) { | 181 cast_channel::ChannelError channel_error) { |
189 if (channel_error != cast_channel::ChannelError::NONE) { | 182 if (channel_error != cast_channel::ChannelError::NONE) { |
190 DVLOG(2) << "Fail to open channel " << service.ip_address << ": " | 183 DVLOG(2) << "Fail to open channel " << service.ip_address << ": " |
191 << service.service_host_port | 184 << service.service_host_port |
192 << " [ChannelError]: " << (int)channel_error; | 185 << " [ChannelError]: " << (int)channel_error; |
(...skipping 28 matching lines...) Expand all Loading... |
221 DVLOG(2) << "Service data not found in current service data list..."; | 214 DVLOG(2) << "Service data not found in current service data list..."; |
222 return; | 215 return; |
223 } | 216 } |
224 | 217 |
225 DVLOG(2) << "Ading sink to current_sinks_ [id]: " << sink.sink().id(); | 218 DVLOG(2) << "Ading sink to current_sinks_ [id]: " << sink.sink().id(); |
226 current_sinks_.insert(sink); | 219 current_sinks_.insert(sink); |
227 MediaSinkServiceBase::RestartTimer(); | 220 MediaSinkServiceBase::RestartTimer(); |
228 } | 221 } |
229 | 222 |
230 CastMediaSinkService::CastSocketObserver::CastSocketObserver() {} | 223 CastMediaSinkService::CastSocketObserver::CastSocketObserver() {} |
231 CastMediaSinkService::CastSocketObserver::~CastSocketObserver() {} | 224 CastMediaSinkService::CastSocketObserver::~CastSocketObserver() { |
| 225 cast_channel::CastSocketService::GetInstance()->RemoveObserver(this); |
| 226 } |
232 | 227 |
233 void CastMediaSinkService::CastSocketObserver::OnError( | 228 void CastMediaSinkService::CastSocketObserver::OnError( |
234 const cast_channel::CastSocket& socket, | 229 const cast_channel::CastSocket& socket, |
235 cast_channel::ChannelError error_state) { | 230 cast_channel::ChannelError error_state) { |
236 DVLOG(1) << "OnError [ip_endpoint]: " << socket.ip_endpoint().ToString() | 231 DVLOG(1) << "OnError [ip_endpoint]: " << socket.ip_endpoint().ToString() |
237 << " [error_state]: " | 232 << " [error_state]: " |
238 << cast_channel::ChannelErrorToString(error_state); | 233 << cast_channel::ChannelErrorToString(error_state); |
239 } | 234 } |
240 | 235 |
241 void CastMediaSinkService::CastSocketObserver::OnMessage( | 236 void CastMediaSinkService::CastSocketObserver::OnMessage( |
242 const cast_channel::CastSocket& socket, | 237 const cast_channel::CastSocket& socket, |
243 const cast_channel::CastMessage& message) {} | 238 const cast_channel::CastMessage& message) {} |
244 | 239 |
245 } // namespace media_router | 240 } // namespace media_router |
OLD | NEW |