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 #ifndef CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_UTILITY_H_ | 5 #ifndef CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_MDNS_H_ |
6 #define CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_UTILITY_H_ | 6 #define CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_MDNS_H_ |
7 | 7 |
| 8 #include <set> |
8 #include <string> | 9 #include <string> |
9 | 10 |
10 #include "base/cancelable_callback.h" | 11 #include "base/cancelable_callback.h" |
11 #include "chrome/browser/local_discovery/service_discovery_shared_client.h" | 12 #include "chrome/browser/local_discovery/service_discovery_shared_client.h" |
12 #include "chrome/common/local_discovery/service_discovery_client.h" | 13 #include "chrome/common/local_discovery/service_discovery_client.h" |
13 #include "net/base/network_change_notifier.h" | 14 #include "net/base/network_change_notifier.h" |
| 15 #include "net/dns/mdns_client.h" |
14 | 16 |
15 namespace local_discovery { | 17 namespace local_discovery { |
16 | 18 |
17 class ServiceDiscoveryHostClient; | 19 // Implementation of ServiceDiscoverySharedClient with front-end of UI thread |
18 | 20 // and networking code on IO thread. |
19 // Wrapper for ServiceDiscoveryHostClient to hide restarting of utility process | 21 class ServiceDiscoveryClientMdns |
20 // from mdns users. | |
21 class ServiceDiscoveryClientUtility | |
22 : public ServiceDiscoverySharedClient, | 22 : public ServiceDiscoverySharedClient, |
23 public net::NetworkChangeNotifier::NetworkChangeObserver { | 23 public net::NetworkChangeNotifier::NetworkChangeObserver { |
24 public: | 24 public: |
25 ServiceDiscoveryClientUtility(); | 25 class Proxy; |
| 26 ServiceDiscoveryClientMdns(); |
26 | 27 |
27 // ServiceDiscoveryClient implementation. | 28 // ServiceDiscoveryClient implementation. |
28 virtual scoped_ptr<ServiceWatcher> CreateServiceWatcher( | 29 virtual scoped_ptr<ServiceWatcher> CreateServiceWatcher( |
29 const std::string& service_type, | 30 const std::string& service_type, |
30 const ServiceWatcher::UpdatedCallback& callback) OVERRIDE; | 31 const ServiceWatcher::UpdatedCallback& callback) OVERRIDE; |
31 virtual scoped_ptr<ServiceResolver> CreateServiceResolver( | 32 virtual scoped_ptr<ServiceResolver> CreateServiceResolver( |
32 const std::string& service_name, | 33 const std::string& service_name, |
33 const ServiceResolver::ResolveCompleteCallback& callback) OVERRIDE; | 34 const ServiceResolver::ResolveCompleteCallback& callback) OVERRIDE; |
34 virtual scoped_ptr<LocalDomainResolver> CreateLocalDomainResolver( | 35 virtual scoped_ptr<LocalDomainResolver> CreateLocalDomainResolver( |
35 const std::string& domain, | 36 const std::string& domain, |
36 net::AddressFamily address_family, | 37 net::AddressFamily address_family, |
37 const LocalDomainResolver::IPAddressCallback& callback) OVERRIDE; | 38 const LocalDomainResolver::IPAddressCallback& callback) OVERRIDE; |
38 | 39 |
39 // net::NetworkChangeNotifier::NetworkChangeObserver implementation. | 40 // net::NetworkChangeNotifier::NetworkChangeObserver implementation. |
40 virtual void OnNetworkChanged( | 41 virtual void OnNetworkChanged( |
41 net::NetworkChangeNotifier::ConnectionType type) OVERRIDE; | 42 net::NetworkChangeNotifier::ConnectionType type) OVERRIDE; |
42 | 43 |
43 private: | 44 private: |
44 friend class base::RefCounted<ServiceDiscoveryClientUtility>; | 45 virtual ~ServiceDiscoveryClientMdns(); |
45 | 46 |
46 virtual ~ServiceDiscoveryClientUtility(); | |
47 void ScheduleStartNewClient(); | 47 void ScheduleStartNewClient(); |
48 void StartNewClient(); | 48 void StartNewClient(); |
| 49 void OnInterfaceListReady(const net::InterfaceIndexFamilyList& interfaces); |
| 50 void OnMdnsInitialized(bool success); |
49 void ReportSuccess(); | 51 void ReportSuccess(); |
| 52 void InvalidateWeakPtrs(); |
| 53 void Reset(); |
50 | 54 |
51 scoped_refptr<ServiceDiscoveryHostClient> host_client_; | 55 bool PostToMdnsThread(const base::Closure& task); |
| 56 |
| 57 std::set<Proxy*> proxies_; |
| 58 |
| 59 scoped_refptr<base::SequencedTaskRunner> mdns_runner_; |
| 60 |
| 61 // Access only on |mdns_runner_| thread. |
| 62 scoped_ptr<net::MDnsClient> mdns_; |
| 63 |
| 64 // Access only on |mdns_runner_| thread. |
| 65 scoped_ptr<ServiceDiscoveryClient> client_; |
| 66 |
| 67 // Counter of restart attempts we have made after network change. |
52 int restart_attempts_; | 68 int restart_attempts_; |
53 base::WeakPtrFactory<ServiceDiscoveryClientUtility> weak_ptr_factory_; | |
54 | 69 |
55 DISALLOW_COPY_AND_ASSIGN(ServiceDiscoveryClientUtility); | 70 // If false delay tasks until initialization is posted to |mdns_runner_| |
| 71 // thread. |
| 72 bool need_dalay_mdns_tasks_; |
| 73 |
| 74 // Delayed |mdns_runner_| tasks. |
| 75 std::vector<base::Closure> delayed_tasks_; |
| 76 |
| 77 base::WeakPtrFactory<ServiceDiscoveryClientMdns> weak_ptr_factory_; |
| 78 |
| 79 DISALLOW_COPY_AND_ASSIGN(ServiceDiscoveryClientMdns); |
56 }; | 80 }; |
57 | 81 |
58 } // namespace local_discovery | 82 } // namespace local_discovery |
59 | 83 |
60 #endif // CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_UTILITY_H_ | 84 #endif // CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_MDNS_H_ |
OLD | NEW |