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 "components/cast_channel/cast_socket_service.h" | 5 #include "components/cast_channel/cast_socket_service.h" |
6 | 6 |
7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
8 #include "components/cast_channel/cast_socket.h" | 8 #include "components/cast_channel/cast_socket.h" |
9 #include "components/cast_channel/logger.h" | 9 #include "components/cast_channel/logger.h" |
10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 // Liveness timeout for connect calls, in milliseconds. If no message is | 21 // Liveness timeout for connect calls, in milliseconds. If no message is |
22 // received from the receiver during kConnectLivenessTimeoutSecs, it is | 22 // received from the receiver during kConnectLivenessTimeoutSecs, it is |
23 // considered gone. | 23 // considered gone. |
24 const int kConnectLivenessTimeoutSecs = kPingIntervalInSecs * 2; | 24 const int kConnectLivenessTimeoutSecs = kPingIntervalInSecs * 2; |
25 } // namespace | 25 } // namespace |
26 | 26 |
27 namespace cast_channel { | 27 namespace cast_channel { |
28 | 28 |
29 int CastSocketService::last_channel_id_ = 0; | 29 int CastSocketService::last_channel_id_ = 0; |
30 | 30 |
31 CastSocketService::CastSocketService() | 31 CastSocketService::CastSocketService() : logger_(new Logger()) { |
32 : RefcountedKeyedService( | |
33 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)), | |
34 logger_(new Logger()) { | |
35 DETACH_FROM_THREAD(thread_checker_); | 32 DETACH_FROM_THREAD(thread_checker_); |
36 } | 33 } |
37 | 34 |
38 CastSocketService::~CastSocketService() { | 35 // This is a leaky singleton and the dtor won't be called. |
39 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); | 36 CastSocketService::~CastSocketService() = default; |
| 37 |
| 38 // static |
| 39 CastSocketService* CastSocketService::GetInstance() { |
| 40 return base::Singleton<CastSocketService, |
| 41 base::LeakySingletonTraits<CastSocketService>>::get(); |
40 } | 42 } |
41 | 43 |
42 scoped_refptr<Logger> CastSocketService::GetLogger() { | 44 scoped_refptr<Logger> CastSocketService::GetLogger() { |
43 return logger_; | 45 return logger_; |
44 } | 46 } |
45 | 47 |
46 CastSocket* CastSocketService::AddSocket(std::unique_ptr<CastSocket> socket) { | 48 CastSocket* CastSocketService::AddSocket(std::unique_ptr<CastSocket> socket) { |
47 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); | 49 DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
48 DCHECK(socket); | 50 DCHECK(socket); |
49 int id = ++last_channel_id_; | 51 int id = ++last_channel_id_; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 CastSocket::Observer* observer) { | 123 CastSocket::Observer* observer) { |
122 auto connect_timeout = base::TimeDelta::FromSeconds(kConnectTimeoutSecs); | 124 auto connect_timeout = base::TimeDelta::FromSeconds(kConnectTimeoutSecs); |
123 auto ping_interval = base::TimeDelta::FromSeconds(kPingIntervalInSecs); | 125 auto ping_interval = base::TimeDelta::FromSeconds(kPingIntervalInSecs); |
124 auto liveness_timeout = | 126 auto liveness_timeout = |
125 base::TimeDelta::FromSeconds(kConnectLivenessTimeoutSecs); | 127 base::TimeDelta::FromSeconds(kConnectLivenessTimeoutSecs); |
126 return OpenSocket(ip_endpoint, net_log, connect_timeout, liveness_timeout, | 128 return OpenSocket(ip_endpoint, net_log, connect_timeout, liveness_timeout, |
127 ping_interval, CastDeviceCapability::NONE, open_cb, | 129 ping_interval, CastDeviceCapability::NONE, open_cb, |
128 observer); | 130 observer); |
129 } | 131 } |
130 | 132 |
131 CastSocket::Observer* CastSocketService::GetObserver(const std::string& id) { | 133 void CastSocketService::RemoveObserver(CastSocket::Observer* observer) { |
132 auto it = socket_observer_map_.find(id); | 134 for (auto& socket_it : sockets_) |
133 return it == socket_observer_map_.end() ? nullptr : it->second.get(); | 135 socket_it.second->RemoveObserver(observer); |
134 } | |
135 | |
136 CastSocket::Observer* CastSocketService::AddObserver( | |
137 const std::string& id, | |
138 std::unique_ptr<CastSocket::Observer> observer) { | |
139 CastSocket::Observer* observer_ptr = observer.get(); | |
140 socket_observer_map_.insert(std::make_pair(id, std::move(observer))); | |
141 return observer_ptr; | |
142 } | 136 } |
143 | 137 |
144 void CastSocketService::SetSocketForTest( | 138 void CastSocketService::SetSocketForTest( |
145 std::unique_ptr<cast_channel::CastSocket> socket_for_test) { | 139 std::unique_ptr<cast_channel::CastSocket> socket_for_test) { |
146 socket_for_test_ = std::move(socket_for_test); | 140 socket_for_test_ = std::move(socket_for_test); |
147 } | 141 } |
148 | 142 |
149 void CastSocketService::ShutdownOnUIThread() {} | |
150 | |
151 } // namespace cast_channel | 143 } // namespace cast_channel |
OLD | NEW |