service_discovery_client_mdns.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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 18namespace local_discovery { 19 20// Implementation of ServiceDiscoverySharedClient with front-end of UI thread 21// and networking code on IO thread. 22class ServiceDiscoveryClientMdns 23 : public ServiceDiscoverySharedClient, 24 public net::NetworkChangeNotifier::NetworkChangeObserver { 25 public: 26 class Proxy; 27 ServiceDiscoveryClientMdns(); 28 29 // ServiceDiscoveryClient implementation. 30 virtual scoped_ptr<ServiceWatcher> CreateServiceWatcher( 31 const std::string& service_type, 32 const ServiceWatcher::UpdatedCallback& callback) OVERRIDE; 33 virtual scoped_ptr<ServiceResolver> CreateServiceResolver( 34 const std::string& service_name, 35 const ServiceResolver::ResolveCompleteCallback& callback) OVERRIDE; 36 virtual 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 virtual void OnNetworkChanged( 43 net::NetworkChangeNotifier::ConnectionType type) OVERRIDE; 44 45 private: 46 virtual ~ServiceDiscoveryClientMdns(); 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 bool PostToMdnsThread(const base::Closure& task); 58 59 ObserverList<Proxy, true> proxies_; 60 61 scoped_refptr<base::SequencedTaskRunner> mdns_runner_; 62 63 // Access only on |mdns_runner_| thread. 64 scoped_ptr<net::MDnsClient> mdns_; 65 66 // Access only on |mdns_runner_| thread. 67 scoped_ptr<ServiceDiscoveryClient> client_; 68 69 // Counter of restart attempts we have made after network change. 70 int restart_attempts_; 71 72 // If false delay tasks until initialization is posted to |mdns_runner_| 73 // thread. 74 bool need_dalay_mdns_tasks_; 75 76 // Delayed |mdns_runner_| tasks. 77 std::vector<base::Closure> delayed_tasks_; 78 79 base::WeakPtrFactory<ServiceDiscoveryClientMdns> weak_ptr_factory_; 80 81 DISALLOW_COPY_AND_ASSIGN(ServiceDiscoveryClientMdns); 82}; 83 84} // namespace local_discovery 85 86#endif // CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_MDNS_H_ 87