Chromium Code Reviews| 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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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) { |
| 94 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); | 91 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
| 95 cast_socket_service_ = cast_channel::CastSocketServiceFactory::GetInstance() | 92 cast_socket_service_ = cast_channel::CastSocketService::GetInstance(); |
|
imcheng
2017/07/11 01:31:15
Can this be moved into the initializer block, and
zhaobin
2017/07/12 21:58:08
Done.
| |
| 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 |