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 <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 } | 137 } |
138 | 138 |
139 private: | 139 private: |
140 net::InterfaceIndexFamilyList interfaces_; | 140 net::InterfaceIndexFamilyList interfaces_; |
141 }; | 141 }; |
142 | 142 |
143 void InitMdns(const MdnsInitCallback& on_initialized, | 143 void InitMdns(const MdnsInitCallback& on_initialized, |
144 const net::InterfaceIndexFamilyList& interfaces, | 144 const net::InterfaceIndexFamilyList& interfaces, |
145 net::MDnsClient* mdns) { | 145 net::MDnsClient* mdns) { |
146 SocketFactory socket_factory(interfaces); | 146 SocketFactory socket_factory(interfaces); |
147 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 147 BrowserThread::PostTask( |
148 base::Bind(on_initialized, | 148 BrowserThread::UI, FROM_HERE, |
149 mdns->StartListening(&socket_factory))); | 149 base::BindOnce(on_initialized, mdns->StartListening(&socket_factory))); |
150 } | 150 } |
151 | 151 |
152 template<class T> | 152 template<class T> |
153 class ProxyBase : public ServiceDiscoveryClientMdns::Proxy, public T { | 153 class ProxyBase : public ServiceDiscoveryClientMdns::Proxy, public T { |
154 public: | 154 public: |
155 typedef ProxyBase<T> Base; | 155 typedef ProxyBase<T> Base; |
156 | 156 |
157 explicit ProxyBase(ServiceDiscoveryClientMdns* client) | 157 explicit ProxyBase(ServiceDiscoveryClientMdns* client) |
158 : Proxy(client) { | 158 : Proxy(client) { |
159 } | 159 } |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 // Only network changes resets counter. | 375 // Only network changes resets counter. |
376 restart_attempts_ = 0; | 376 restart_attempts_ = 0; |
377 ScheduleStartNewClient(); | 377 ScheduleStartNewClient(); |
378 } | 378 } |
379 | 379 |
380 void ServiceDiscoveryClientMdns::ScheduleStartNewClient() { | 380 void ServiceDiscoveryClientMdns::ScheduleStartNewClient() { |
381 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 381 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
382 OnBeforeMdnsDestroy(); | 382 OnBeforeMdnsDestroy(); |
383 if (restart_attempts_ < kMaxRestartAttempts) { | 383 if (restart_attempts_ < kMaxRestartAttempts) { |
384 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 384 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
385 FROM_HERE, base::Bind(&ServiceDiscoveryClientMdns::StartNewClient, | 385 FROM_HERE, |
386 weak_ptr_factory_.GetWeakPtr()), | 386 base::BindOnce(&ServiceDiscoveryClientMdns::StartNewClient, |
| 387 weak_ptr_factory_.GetWeakPtr()), |
387 base::TimeDelta::FromSeconds(kRestartDelayOnNetworkChangeSeconds * | 388 base::TimeDelta::FromSeconds(kRestartDelayOnNetworkChangeSeconds * |
388 (1 << restart_attempts_))); | 389 (1 << restart_attempts_))); |
389 } else { | 390 } else { |
390 ReportSuccess(); | 391 ReportSuccess(); |
391 } | 392 } |
392 } | 393 } |
393 | 394 |
394 void ServiceDiscoveryClientMdns::StartNewClient() { | 395 void ServiceDiscoveryClientMdns::StartNewClient() { |
395 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 396 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
396 ++restart_attempts_; | 397 ++restart_attempts_; |
397 DestroyMdns(); | 398 DestroyMdns(); |
398 mdns_ = net::MDnsClient::CreateDefault(); | 399 mdns_ = net::MDnsClient::CreateDefault(); |
399 client_.reset(new ServiceDiscoveryClientImpl(mdns_.get())); | 400 client_.reset(new ServiceDiscoveryClientImpl(mdns_.get())); |
400 BrowserThread::PostTaskAndReplyWithResult( | 401 BrowserThread::PostTaskAndReplyWithResult( |
401 BrowserThread::FILE, | 402 BrowserThread::FILE, |
402 FROM_HERE, | 403 FROM_HERE, |
403 base::Bind(&net::GetMDnsInterfacesToBind), | 404 base::Bind(&net::GetMDnsInterfacesToBind), |
404 base::Bind(&ServiceDiscoveryClientMdns::OnInterfaceListReady, | 405 base::Bind(&ServiceDiscoveryClientMdns::OnInterfaceListReady, |
405 weak_ptr_factory_.GetWeakPtr())); | 406 weak_ptr_factory_.GetWeakPtr())); |
406 } | 407 } |
407 | 408 |
408 void ServiceDiscoveryClientMdns::OnInterfaceListReady( | 409 void ServiceDiscoveryClientMdns::OnInterfaceListReady( |
409 const net::InterfaceIndexFamilyList& interfaces) { | 410 const net::InterfaceIndexFamilyList& interfaces) { |
410 mdns_runner_->PostTask( | 411 mdns_runner_->PostTask( |
411 FROM_HERE, | 412 FROM_HERE, |
412 base::Bind(&InitMdns, | 413 base::BindOnce(&InitMdns, |
413 base::Bind(&ServiceDiscoveryClientMdns::OnMdnsInitialized, | 414 base::Bind(&ServiceDiscoveryClientMdns::OnMdnsInitialized, |
414 weak_ptr_factory_.GetWeakPtr()), | 415 weak_ptr_factory_.GetWeakPtr()), |
415 interfaces, | 416 interfaces, base::Unretained(mdns_.get()))); |
416 base::Unretained(mdns_.get()))); | |
417 } | 417 } |
418 | 418 |
419 void ServiceDiscoveryClientMdns::OnMdnsInitialized(bool success) { | 419 void ServiceDiscoveryClientMdns::OnMdnsInitialized(bool success) { |
420 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 420 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
421 if (!success) { | 421 if (!success) { |
422 ScheduleStartNewClient(); | 422 ScheduleStartNewClient(); |
423 return; | 423 return; |
424 } | 424 } |
425 ReportSuccess(); | 425 ReportSuccess(); |
426 | 426 |
(...skipping 20 matching lines...) Expand all Loading... |
447 OnBeforeMdnsDestroy(); | 447 OnBeforeMdnsDestroy(); |
448 // After calling |Proxy::OnMdnsDestroy| all references to client_ and mdns_ | 448 // After calling |Proxy::OnMdnsDestroy| all references to client_ and mdns_ |
449 // should be destroyed. | 449 // should be destroyed. |
450 if (client_) | 450 if (client_) |
451 mdns_runner_->DeleteSoon(FROM_HERE, client_.release()); | 451 mdns_runner_->DeleteSoon(FROM_HERE, client_.release()); |
452 if (mdns_) | 452 if (mdns_) |
453 mdns_runner_->DeleteSoon(FROM_HERE, mdns_.release()); | 453 mdns_runner_->DeleteSoon(FROM_HERE, mdns_.release()); |
454 } | 454 } |
455 | 455 |
456 } // namespace local_discovery | 456 } // namespace local_discovery |
OLD | NEW |