- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / local_discovery / service_discovery_client_mac.h
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
13 namespace 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
18 class 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
40 class 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 std::string GetServiceType() const OVERRIDE;
54
55   std::string service_type_;
56
57   ServiceWatcher::UpdatedCallback callback_;
58   bool started_;
59   base::scoped_nsobject<id> delegate_;
60   base::scoped_nsobject<NSNetServiceBrowser> browser_;
61
62   DISALLOW_COPY_AND_ASSIGN(ServiceWatcherImplMac);
63 };
64
65 class ServiceResolverImplMac : public ServiceResolver {
66  public:
67   ServiceResolverImplMac(
68       const std::string& service_name,
69       const ServiceResolver::ResolveCompleteCallback& callback);
70
71   void OnResolveUpdate(RequestStatus);
72
73   // Testing methods.
74   void SetServiceForTesting(
75       base::scoped_nsobject<NSNetService> service);
76
77  private:
78   virtual ~ServiceResolverImplMac();
79
80   virtual void StartResolving() OVERRIDE;
81   virtual std::string GetName() const OVERRIDE;
82
83   const std::string service_name_;
84   ServiceResolver::ResolveCompleteCallback callback_;
85   bool has_resolved_;
86   base::scoped_nsobject<id> delegate_;
87   base::scoped_nsobject<NSNetService> service_;
88   ServiceDescription service_description_;
89
90   DISALLOW_COPY_AND_ASSIGN(ServiceResolverImplMac);
91 };
92
93 }  // namespace local_discovery
94
95 #endif  // CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_CLIENT_MAC_H_