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

Side by Side Diff: chrome/browser/media/router/discovery/mdns/cast_media_sink_service.cc

Issue 2974523002: [cast_channel] Make CastSocketService a global leaky singleton (Closed)
Patch Set: merge with master Created 3 years, 5 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 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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698