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