Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / local_discovery / service_discovery_client_mdns.h
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
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_MDNS_H_
6 #define CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_MDNS_H_
7
8 #include <set>
9 #include <string>
10
11 #include "base/cancelable_callback.h"
12 #include "base/observer_list.h"
13 #include "chrome/browser/local_discovery/service_discovery_shared_client.h"
14 #include "chrome/common/local_discovery/service_discovery_client.h"
15 #include "net/base/network_change_notifier.h"
16 #include "net/dns/mdns_client.h"
17
18 namespace local_discovery {
19
20 // Implementation of ServiceDiscoverySharedClient with front-end of UI thread
21 // and networking code on IO thread.
22 class ServiceDiscoveryClientMdns
23     : public ServiceDiscoverySharedClient,
24       public net::NetworkChangeNotifier::NetworkChangeObserver {
25  public:
26   class Proxy;
27   ServiceDiscoveryClientMdns();
28
29   // ServiceDiscoveryClient implementation.
30   scoped_ptr<ServiceWatcher> CreateServiceWatcher(
31       const std::string& service_type,
32       const ServiceWatcher::UpdatedCallback& callback) override;
33   scoped_ptr<ServiceResolver> CreateServiceResolver(
34       const std::string& service_name,
35       const ServiceResolver::ResolveCompleteCallback& callback) override;
36   scoped_ptr<LocalDomainResolver> CreateLocalDomainResolver(
37       const std::string& domain,
38       net::AddressFamily address_family,
39       const LocalDomainResolver::IPAddressCallback& callback) override;
40
41   // net::NetworkChangeNotifier::NetworkChangeObserver implementation.
42   void OnNetworkChanged(
43       net::NetworkChangeNotifier::ConnectionType type) override;
44
45  private:
46   ~ServiceDiscoveryClientMdns() override;
47
48   void ScheduleStartNewClient();
49   void StartNewClient();
50   void OnInterfaceListReady(const net::InterfaceIndexFamilyList& interfaces);
51   void OnMdnsInitialized(bool success);
52   void ReportSuccess();
53   void InvalidateWeakPtrs();
54   void OnBeforeMdnsDestroy();
55   void DestroyMdns();
56
57   ObserverList<Proxy, true> 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.
68   int restart_attempts_;
69
70   // If false delay tasks until initialization is posted to |mdns_runner_|
71   // thread.
72   bool need_dalay_mdns_tasks_;
73
74   base::WeakPtrFactory<ServiceDiscoveryClientMdns> weak_ptr_factory_;
75
76   DISALLOW_COPY_AND_ASSIGN(ServiceDiscoveryClientMdns);
77 };
78
79 }  // namespace local_discovery
80
81 #endif  // CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_MDNS_H_