service_discovery_client_mac.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright 2013 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_MAC_H_
6#define CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_MAC_H_
7
8#include <string>
9
10#include "base/mac/scoped_nsobject.h"
11#include "chrome/browser/local_discovery/service_discovery_shared_client.h"
12
13namespace local_discovery {
14
15// Implementation of ServiceDiscoveryClient that uses the Bonjour SDK.
16// https://developer.apple.com/library/mac/documentation/Networking/Conceptual/
17// NSNetServiceProgGuide/Articles/BrowsingForServices.html
18class ServiceDiscoveryClientMac : public ServiceDiscoverySharedClient {
19 public:
20  ServiceDiscoveryClientMac();
21
22 private:
23  virtual ~ServiceDiscoveryClientMac();
24
25  // ServiceDiscoveryClient implementation.
26  virtual scoped_ptr<ServiceWatcher> CreateServiceWatcher(
27      const std::string& service_type,
28      const ServiceWatcher::UpdatedCallback& callback) OVERRIDE;
29  virtual scoped_ptr<ServiceResolver> CreateServiceResolver(
30      const std::string& service_name,
31      const ServiceResolver::ResolveCompleteCallback& callback) OVERRIDE;
32  virtual scoped_ptr<LocalDomainResolver> CreateLocalDomainResolver(
33      const std::string& domain,
34      net::AddressFamily address_family,
35      const LocalDomainResolver::IPAddressCallback& callback) OVERRIDE;
36
37  DISALLOW_COPY_AND_ASSIGN(ServiceDiscoveryClientMac);
38};
39
40class ServiceWatcherImplMac : public ServiceWatcher {
41 public:
42  ServiceWatcherImplMac(const std::string& service_type,
43                        const ServiceWatcher::UpdatedCallback& callback);
44
45  void OnServicesUpdate(ServiceWatcher::UpdateType update,
46                        const std::string& service);
47
48 private:
49  virtual ~ServiceWatcherImplMac();
50
51  virtual void Start() OVERRIDE;
52  virtual void DiscoverNewServices(bool force_update) OVERRIDE;
53  virtual void SetActivelyRefreshServices(
54      bool actively_refresh_services) OVERRIDE;
55  virtual std::string GetServiceType() const OVERRIDE;
56
57  std::string service_type_;
58
59  ServiceWatcher::UpdatedCallback callback_;
60  bool started_;
61  base::scoped_nsobject<id> delegate_;
62  base::scoped_nsobject<NSNetServiceBrowser> browser_;
63
64  DISALLOW_COPY_AND_ASSIGN(ServiceWatcherImplMac);
65};
66
67class ServiceResolverImplMac : public ServiceResolver {
68 public:
69  ServiceResolverImplMac(
70      const std::string& service_name,
71      const ServiceResolver::ResolveCompleteCallback& callback);
72
73  void OnResolveUpdate(RequestStatus);
74
75  // Testing methods.
76  void SetServiceForTesting(
77      base::scoped_nsobject<NSNetService> service);
78
79 private:
80  virtual ~ServiceResolverImplMac();
81
82  virtual void StartResolving() OVERRIDE;
83  virtual std::string GetName() const OVERRIDE;
84
85  const std::string service_name_;
86  ServiceResolver::ResolveCompleteCallback callback_;
87  bool has_resolved_;
88  base::scoped_nsobject<id> delegate_;
89  base::scoped_nsobject<NSNetService> service_;
90  ServiceDescription service_description_;
91
92  DISALLOW_COPY_AND_ASSIGN(ServiceResolverImplMac);
93};
94
95}  // namespace local_discovery
96
97#endif  // CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_MAC_H_
98