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_UTILITY_H_ 6#define CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_UTILITY_H_ 7 8#include <string> 9 10#include "base/cancelable_callback.h" 11#include "chrome/browser/local_discovery/service_discovery_shared_client.h" 12#include "chrome/common/local_discovery/service_discovery_client.h" 13#include "net/base/network_change_notifier.h" 14 15namespace local_discovery { 16 17class ServiceDiscoveryHostClient; 18 19// Wrapper for ServiceDiscoveryHostClient to hide restarting of utility process 20// from mdns users. 21class ServiceDiscoveryClientUtility 22 : public ServiceDiscoverySharedClient, 23 public net::NetworkChangeNotifier::NetworkChangeObserver { 24 public: 25 ServiceDiscoveryClientUtility(); 26 27 // ServiceDiscoveryClient implementation. 28 virtual scoped_ptr<ServiceWatcher> CreateServiceWatcher( 29 const std::string& service_type, 30 const ServiceWatcher::UpdatedCallback& callback) OVERRIDE; 31 virtual scoped_ptr<ServiceResolver> CreateServiceResolver( 32 const std::string& service_name, 33 const ServiceResolver::ResolveCompleteCallback& callback) OVERRIDE; 34 virtual scoped_ptr<LocalDomainResolver> CreateLocalDomainResolver( 35 const std::string& domain, 36 net::AddressFamily address_family, 37 const LocalDomainResolver::IPAddressCallback& callback) OVERRIDE; 38 39 // net::NetworkChangeNotifier::NetworkChangeObserver implementation. 40 virtual void OnNetworkChanged( 41 net::NetworkChangeNotifier::ConnectionType type) OVERRIDE; 42 43 private: 44 friend class base::RefCounted<ServiceDiscoveryClientUtility>; 45 46 virtual ~ServiceDiscoveryClientUtility(); 47 void ScheduleStartNewClient(); 48 void StartNewClient(); 49 void ReportSuccess(); 50 51 scoped_refptr<ServiceDiscoveryHostClient> host_client_; 52 int restart_attempts_; 53 base::WeakPtrFactory<ServiceDiscoveryClientUtility> weak_ptr_factory_; 54 55 DISALLOW_COPY_AND_ASSIGN(ServiceDiscoveryClientUtility); 56}; 57 58} // namespace local_discovery 59 60#endif // CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_UTILITY_H_ 61