15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#ifndef CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_UTILITY_H_ 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_UTILITY_H_ 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include <string> 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/cancelable_callback.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/local_discovery/service_discovery_shared_client.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/common/local_discovery/service_discovery_client.h" 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "net/base/network_change_notifier.h" 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace local_discovery { 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass ServiceDiscoveryHostClient; 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Wrapper for ServiceDiscoveryHostClient to hide restarting of utility process 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// from mdns users. 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass ServiceDiscoveryClientUtility 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : public ServiceDiscoverySharedClient, 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public net::NetworkChangeNotifier::NetworkChangeObserver { 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public: 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ServiceDiscoveryClientUtility(); 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // ServiceDiscoveryClient implementation. 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual scoped_ptr<ServiceWatcher> CreateServiceWatcher( 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& service_type, 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const ServiceWatcher::UpdatedCallback& callback) OVERRIDE; 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual scoped_ptr<ServiceResolver> CreateServiceResolver( 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& service_name, 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const ServiceResolver::ResolveCompleteCallback& callback) OVERRIDE; 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual scoped_ptr<LocalDomainResolver> CreateLocalDomainResolver( 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& domain, 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu net::AddressFamily address_family, 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const LocalDomainResolver::IPAddressCallback& callback) OVERRIDE; 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // net::NetworkChangeNotifier::NetworkChangeObserver implementation. 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void OnNetworkChanged( 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu net::NetworkChangeNotifier::ConnectionType type) OVERRIDE; 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private: 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu friend class base::RefCounted<ServiceDiscoveryClientUtility>; 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ~ServiceDiscoveryClientUtility(); 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void ScheduleStartNewClient(); 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void StartNewClient(); 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void ReportSuccess(); 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_refptr<ServiceDiscoveryHostClient> host_client_; 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int restart_attempts_; 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::WeakPtrFactory<ServiceDiscoveryClientUtility> weak_ptr_factory_; 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DISALLOW_COPY_AND_ASSIGN(ServiceDiscoveryClientUtility); 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} // namespace local_discovery 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#endif // CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_UTILITY_H_ 61