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