OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/local_discovery/service_discovery_client_mdns.h" | 5 #include "chrome/browser/local_discovery/service_discovery_client_mdns.h" |
6 | 6 |
7 #include "base/memory/scoped_vector.h" | 7 #include "base/memory/scoped_vector.h" |
8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
9 #include "chrome/common/local_discovery/service_discovery_client_impl.h" | 9 #include "chrome/common/local_discovery/service_discovery_client_impl.h" |
10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 | 105 |
106 typedef base::Callback<void(bool)> MdnsInitCallback; | 106 typedef base::Callback<void(bool)> MdnsInitCallback; |
107 | 107 |
108 class SocketFactory : public net::MDnsSocketFactory { | 108 class SocketFactory : public net::MDnsSocketFactory { |
109 public: | 109 public: |
110 explicit SocketFactory(const net::InterfaceIndexFamilyList& interfaces) | 110 explicit SocketFactory(const net::InterfaceIndexFamilyList& interfaces) |
111 : interfaces_(interfaces) {} | 111 : interfaces_(interfaces) {} |
112 | 112 |
113 // net::MDnsSocketFactory implementation: | 113 // net::MDnsSocketFactory implementation: |
114 virtual void CreateSockets( | 114 virtual void CreateSockets( |
115 ScopedVector<net::DatagramServerSocket>* sockets) OVERRIDE { | 115 ScopedVector<net::DatagramServerSocket>* sockets) override { |
116 for (size_t i = 0; i < interfaces_.size(); ++i) { | 116 for (size_t i = 0; i < interfaces_.size(); ++i) { |
117 DCHECK(interfaces_[i].second == net::ADDRESS_FAMILY_IPV4 || | 117 DCHECK(interfaces_[i].second == net::ADDRESS_FAMILY_IPV4 || |
118 interfaces_[i].second == net::ADDRESS_FAMILY_IPV6); | 118 interfaces_[i].second == net::ADDRESS_FAMILY_IPV6); |
119 scoped_ptr<net::DatagramServerSocket> socket( | 119 scoped_ptr<net::DatagramServerSocket> socket( |
120 CreateAndBindMDnsSocket(interfaces_[i].second, interfaces_[i].first)); | 120 CreateAndBindMDnsSocket(interfaces_[i].second, interfaces_[i].first)); |
121 if (socket) | 121 if (socket) |
122 sockets->push_back(socket.release()); | 122 sockets->push_back(socket.release()); |
123 } | 123 } |
124 } | 124 } |
125 | 125 |
(...skipping 16 matching lines...) Expand all Loading... |
142 typedef ProxyBase<T> Base; | 142 typedef ProxyBase<T> Base; |
143 | 143 |
144 explicit ProxyBase(ServiceDiscoveryClientMdns* client) | 144 explicit ProxyBase(ServiceDiscoveryClientMdns* client) |
145 : Proxy(client) { | 145 : Proxy(client) { |
146 } | 146 } |
147 | 147 |
148 virtual ~ProxyBase() { | 148 virtual ~ProxyBase() { |
149 DeleteOnMdnsThread(implementation_.release()); | 149 DeleteOnMdnsThread(implementation_.release()); |
150 } | 150 } |
151 | 151 |
152 virtual bool IsValid() OVERRIDE { | 152 virtual bool IsValid() override { |
153 return !!implementation(); | 153 return !!implementation(); |
154 } | 154 } |
155 | 155 |
156 virtual void OnMdnsDestroy() OVERRIDE { | 156 virtual void OnMdnsDestroy() override { |
157 DeleteOnMdnsThread(implementation_.release()); | 157 DeleteOnMdnsThread(implementation_.release()); |
158 }; | 158 }; |
159 | 159 |
160 protected: | 160 protected: |
161 void set_implementation(scoped_ptr<T> implementation) { | 161 void set_implementation(scoped_ptr<T> implementation) { |
162 implementation_ = implementation.Pass(); | 162 implementation_ = implementation.Pass(); |
163 } | 163 } |
164 | 164 |
165 T* implementation() const { | 165 T* implementation() const { |
166 return implementation_.get(); | 166 return implementation_.get(); |
(...skipping 13 matching lines...) Expand all Loading... |
180 service_type_(service_type), | 180 service_type_(service_type), |
181 callback_(callback) { | 181 callback_(callback) { |
182 // It's safe to call |CreateServiceWatcher| on UI thread, because | 182 // It's safe to call |CreateServiceWatcher| on UI thread, because |
183 // |MDnsClient| is not used there. It's simplify implementation. | 183 // |MDnsClient| is not used there. It's simplify implementation. |
184 set_implementation(client()->CreateServiceWatcher( | 184 set_implementation(client()->CreateServiceWatcher( |
185 service_type, | 185 service_type, |
186 base::Bind(&ServiceWatcherProxy::OnCallback, GetWeakPtr(), callback))); | 186 base::Bind(&ServiceWatcherProxy::OnCallback, GetWeakPtr(), callback))); |
187 } | 187 } |
188 | 188 |
189 // ServiceWatcher methods. | 189 // ServiceWatcher methods. |
190 virtual void Start() OVERRIDE { | 190 virtual void Start() override { |
191 if (implementation()) { | 191 if (implementation()) { |
192 PostToMdnsThread(base::Bind(&ServiceWatcher::Start, | 192 PostToMdnsThread(base::Bind(&ServiceWatcher::Start, |
193 base::Unretained(implementation()))); | 193 base::Unretained(implementation()))); |
194 } | 194 } |
195 } | 195 } |
196 | 196 |
197 virtual void DiscoverNewServices(bool force_update) OVERRIDE { | 197 virtual void DiscoverNewServices(bool force_update) override { |
198 if (implementation()) { | 198 if (implementation()) { |
199 PostToMdnsThread(base::Bind(&ServiceWatcher::DiscoverNewServices, | 199 PostToMdnsThread(base::Bind(&ServiceWatcher::DiscoverNewServices, |
200 base::Unretained(implementation()), | 200 base::Unretained(implementation()), |
201 force_update)); | 201 force_update)); |
202 } | 202 } |
203 } | 203 } |
204 | 204 |
205 virtual void SetActivelyRefreshServices( | 205 virtual void SetActivelyRefreshServices( |
206 bool actively_refresh_services) OVERRIDE { | 206 bool actively_refresh_services) override { |
207 if (implementation()) { | 207 if (implementation()) { |
208 PostToMdnsThread(base::Bind(&ServiceWatcher::SetActivelyRefreshServices, | 208 PostToMdnsThread(base::Bind(&ServiceWatcher::SetActivelyRefreshServices, |
209 base::Unretained(implementation()), | 209 base::Unretained(implementation()), |
210 actively_refresh_services)); | 210 actively_refresh_services)); |
211 } | 211 } |
212 } | 212 } |
213 | 213 |
214 virtual std::string GetServiceType() const OVERRIDE { | 214 virtual std::string GetServiceType() const override { |
215 return service_type_; | 215 return service_type_; |
216 } | 216 } |
217 | 217 |
218 virtual void OnNewMdnsReady() OVERRIDE { | 218 virtual void OnNewMdnsReady() override { |
219 ProxyBase<ServiceWatcher>::OnNewMdnsReady(); | 219 ProxyBase<ServiceWatcher>::OnNewMdnsReady(); |
220 if (!implementation()) | 220 if (!implementation()) |
221 callback_.Run(ServiceWatcher::UPDATE_INVALIDATED, ""); | 221 callback_.Run(ServiceWatcher::UPDATE_INVALIDATED, ""); |
222 } | 222 } |
223 | 223 |
224 private: | 224 private: |
225 static void OnCallback(const WeakPtr& proxy, | 225 static void OnCallback(const WeakPtr& proxy, |
226 const ServiceWatcher::UpdatedCallback& callback, | 226 const ServiceWatcher::UpdatedCallback& callback, |
227 UpdateType a1, | 227 UpdateType a1, |
228 const std::string& a2) { | 228 const std::string& a2) { |
(...skipping 14 matching lines...) Expand all Loading... |
243 : ProxyBase(client_mdns), | 243 : ProxyBase(client_mdns), |
244 service_name_(service_name) { | 244 service_name_(service_name) { |
245 // It's safe to call |CreateServiceResolver| on UI thread, because | 245 // It's safe to call |CreateServiceResolver| on UI thread, because |
246 // |MDnsClient| is not used there. It's simplify implementation. | 246 // |MDnsClient| is not used there. It's simplify implementation. |
247 set_implementation(client()->CreateServiceResolver( | 247 set_implementation(client()->CreateServiceResolver( |
248 service_name, | 248 service_name, |
249 base::Bind(&ServiceResolverProxy::OnCallback, GetWeakPtr(), callback))); | 249 base::Bind(&ServiceResolverProxy::OnCallback, GetWeakPtr(), callback))); |
250 } | 250 } |
251 | 251 |
252 // ServiceResolver methods. | 252 // ServiceResolver methods. |
253 virtual void StartResolving() OVERRIDE { | 253 virtual void StartResolving() override { |
254 if (implementation()) { | 254 if (implementation()) { |
255 PostToMdnsThread(base::Bind(&ServiceResolver::StartResolving, | 255 PostToMdnsThread(base::Bind(&ServiceResolver::StartResolving, |
256 base::Unretained(implementation()))); | 256 base::Unretained(implementation()))); |
257 } | 257 } |
258 }; | 258 }; |
259 | 259 |
260 virtual std::string GetName() const OVERRIDE { | 260 virtual std::string GetName() const override { |
261 return service_name_; | 261 return service_name_; |
262 } | 262 } |
263 | 263 |
264 private: | 264 private: |
265 static void OnCallback( | 265 static void OnCallback( |
266 const WeakPtr& proxy, | 266 const WeakPtr& proxy, |
267 const ServiceResolver::ResolveCompleteCallback& callback, | 267 const ServiceResolver::ResolveCompleteCallback& callback, |
268 RequestStatus a1, | 268 RequestStatus a1, |
269 const ServiceDescription& a2) { | 269 const ServiceDescription& a2) { |
270 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI)); | 270 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI)); |
(...skipping 16 matching lines...) Expand all Loading... |
287 // It's safe to call |CreateLocalDomainResolver| on UI thread, because | 287 // It's safe to call |CreateLocalDomainResolver| on UI thread, because |
288 // |MDnsClient| is not used there. It's simplify implementation. | 288 // |MDnsClient| is not used there. It's simplify implementation. |
289 set_implementation(client()->CreateLocalDomainResolver( | 289 set_implementation(client()->CreateLocalDomainResolver( |
290 domain, | 290 domain, |
291 address_family, | 291 address_family, |
292 base::Bind( | 292 base::Bind( |
293 &LocalDomainResolverProxy::OnCallback, GetWeakPtr(), callback))); | 293 &LocalDomainResolverProxy::OnCallback, GetWeakPtr(), callback))); |
294 } | 294 } |
295 | 295 |
296 // LocalDomainResolver methods. | 296 // LocalDomainResolver methods. |
297 virtual void Start() OVERRIDE { | 297 virtual void Start() override { |
298 if (implementation()) { | 298 if (implementation()) { |
299 PostToMdnsThread(base::Bind(&LocalDomainResolver::Start, | 299 PostToMdnsThread(base::Bind(&LocalDomainResolver::Start, |
300 base::Unretained(implementation()))); | 300 base::Unretained(implementation()))); |
301 } | 301 } |
302 }; | 302 }; |
303 | 303 |
304 private: | 304 private: |
305 static void OnCallback(const WeakPtr& proxy, | 305 static void OnCallback(const WeakPtr& proxy, |
306 const LocalDomainResolver::IPAddressCallback& callback, | 306 const LocalDomainResolver::IPAddressCallback& callback, |
307 bool a1, | 307 bool a1, |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 OnBeforeMdnsDestroy(); | 437 OnBeforeMdnsDestroy(); |
438 // After calling |Proxy::OnMdnsDestroy| all references to client_ and mdns_ | 438 // After calling |Proxy::OnMdnsDestroy| all references to client_ and mdns_ |
439 // should be destroyed. | 439 // should be destroyed. |
440 if (client_) | 440 if (client_) |
441 mdns_runner_->DeleteSoon(FROM_HERE, client_.release()); | 441 mdns_runner_->DeleteSoon(FROM_HERE, client_.release()); |
442 if (mdns_) | 442 if (mdns_) |
443 mdns_runner_->DeleteSoon(FROM_HERE, mdns_.release()); | 443 mdns_runner_->DeleteSoon(FROM_HERE, mdns_.release()); |
444 } | 444 } |
445 | 445 |
446 } // namespace local_discovery | 446 } // namespace local_discovery |
OLD | NEW |