Add GCMChannelStatusSyncer to schedule requests and enable/disable GCM
[chromium-blink-merge.git] / chrome / browser / local_discovery / service_discovery_host_client.h
blob330418c3774116fd722d0f9d2a2dd4a1a40f8362
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.
5 #ifndef CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_HOST_CLIENT_H_
6 #define CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_HOST_CLIENT_H_
8 #include <map>
9 #include <string>
10 #include <vector>
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_vector.h"
14 #include "base/memory/weak_ptr.h"
15 #include "chrome/common/local_discovery/service_discovery_client.h"
16 #include "content/public/browser/utility_process_host_client.h"
18 struct LocalDiscoveryMsg_SocketInfo;
20 namespace base {
21 class TaskRunner;
24 namespace content {
25 class UtilityProcessHost;
28 namespace local_discovery {
30 #if defined(OS_POSIX)
31 typedef std::vector<LocalDiscoveryMsg_SocketInfo> SocketInfoList;
32 #endif // OS_POSIX
34 // Implementation of ServiceDiscoveryClient that delegates all functionality to
35 // utility process.
36 class ServiceDiscoveryHostClient
37 : public ServiceDiscoveryClient,
38 public content::UtilityProcessHostClient {
39 public:
40 ServiceDiscoveryHostClient();
42 // Starts utility process with ServiceDiscoveryClient.
43 void Start(const base::Closure& error_callback);
45 // Shutdowns utility process.
46 void Shutdown();
48 // ServiceDiscoveryClient implementation.
49 virtual scoped_ptr<ServiceWatcher> CreateServiceWatcher(
50 const std::string& service_type,
51 const ServiceWatcher::UpdatedCallback& callback) OVERRIDE;
52 virtual scoped_ptr<ServiceResolver> CreateServiceResolver(
53 const std::string& service_name,
54 const ServiceResolver::ResolveCompleteCallback& callback) OVERRIDE;
55 virtual scoped_ptr<LocalDomainResolver> CreateLocalDomainResolver(
56 const std::string& domain,
57 net::AddressFamily address_family,
58 const LocalDomainResolver::IPAddressCallback& callback) OVERRIDE;
60 // UtilityProcessHostClient implementation.
61 virtual void OnProcessCrashed(int exit_code) OVERRIDE;
62 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
64 protected:
65 virtual ~ServiceDiscoveryHostClient();
67 private:
68 class ServiceWatcherProxy;
69 class ServiceResolverProxy;
70 class LocalDomainResolverProxy;
71 friend class ServiceDiscoveryClientUtility;
73 typedef std::map<uint64, ServiceWatcher::UpdatedCallback> WatcherCallbacks;
74 typedef std::map<uint64, ServiceResolver::ResolveCompleteCallback>
75 ResolverCallbacks;
76 typedef std::map<uint64, LocalDomainResolver::IPAddressCallback>
77 DomainResolverCallbacks;
79 void StartOnIOThread();
80 void ShutdownOnIOThread();
82 #if defined(OS_POSIX)
83 void OnSocketsReady(const SocketInfoList& interfaces);
84 #endif // OS_POSIX
86 void InvalidateWatchers();
88 void Send(IPC::Message* msg);
89 void SendOnIOThread(IPC::Message* msg);
91 uint64 RegisterWatcherCallback(
92 const ServiceWatcher::UpdatedCallback& callback);
93 uint64 RegisterResolverCallback(
94 const ServiceResolver::ResolveCompleteCallback& callback);
95 uint64 RegisterLocalDomainResolverCallback(
96 const LocalDomainResolver::IPAddressCallback& callback);
98 void UnregisterWatcherCallback(uint64 id);
99 void UnregisterResolverCallback(uint64 id);
100 void UnregisterLocalDomainResolverCallback(uint64 id);
102 // IPC Message handlers.
103 void OnError();
104 void OnWatcherCallback(uint64 id,
105 ServiceWatcher::UpdateType update,
106 const std::string& service_name);
107 void OnResolverCallback(uint64 id,
108 ServiceResolver::RequestStatus status,
109 const ServiceDescription& description);
110 void OnLocalDomainResolverCallback(uint64 id,
111 bool success,
112 const net::IPAddressNumber& address_ipv4,
113 const net::IPAddressNumber& address_ipv6);
116 // Runs watcher callback on owning thread.
117 void RunWatcherCallback(uint64 id,
118 ServiceWatcher::UpdateType update,
119 const std::string& service_name);
120 // Runs resolver callback on owning thread.
121 void RunResolverCallback(uint64 id,
122 ServiceResolver::RequestStatus status,
123 const ServiceDescription& description);
124 // Runs local domain resolver callback on owning thread.
125 void RunLocalDomainResolverCallback(uint64 id,
126 bool success,
127 const net::IPAddressNumber& address_ipv4,
128 const net::IPAddressNumber& address_ipv6);
131 base::WeakPtr<content::UtilityProcessHost> utility_host_;
133 // Incrementing counter to assign ID to watchers and resolvers.
134 uint64 current_id_;
135 base::Closure error_callback_;
136 WatcherCallbacks service_watcher_callbacks_;
137 ResolverCallbacks service_resolver_callbacks_;
138 DomainResolverCallbacks domain_resolver_callbacks_;
139 scoped_refptr<base::TaskRunner> callback_runner_;
140 scoped_refptr<base::TaskRunner> io_runner_;
141 ScopedVector<IPC::Message> delayed_messages_;
143 DISALLOW_COPY_AND_ASSIGN(ServiceDiscoveryHostClient);
146 } // namespace local_discovery
148 #endif // CHROME_BROWSER_LOCAL_DISCOVERY_SERVICE_DISCOVERY_HOST_CLIENT_H_