Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Side by Side Diff: chrome/browser/extensions/api/mdns/dns_sd_registry.h

Issue 2876703002: [mDns] Move dns_sd_registry from extension/api/mdns to media/router/discovery/mdns (Closed)
Patch Set: rebase with master Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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_EXTENSIONS_API_MDNS_DNS_SD_REGISTRY_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_MDNS_DNS_SD_REGISTRY_H_
7
8 #include <map>
9 #include <memory>
10 #include <string>
11 #include <utility>
12 #include <vector>
13
14 #include "base/macros.h"
15 #include "base/observer_list.h"
16 #include "chrome/browser/extensions/api/mdns/dns_sd_delegate.h"
17
18 namespace local_discovery {
19 class ServiceDiscoverySharedClient;
20 }
21
22 namespace extensions {
23
24 class DnsSdDeviceLister;
25 class ServiceTypeData;
26
27 // Registry class for keeping track of discovered network services over DNS-SD.
28 class DnsSdRegistry : public DnsSdDelegate {
29 public:
30 typedef std::vector<DnsSdService> DnsSdServiceList;
31
32 class DnsSdObserver {
33 public:
34 virtual void OnDnsSdEvent(const std::string& service_type,
35 const DnsSdServiceList& services) = 0;
36
37 protected:
38 virtual ~DnsSdObserver() {}
39 };
40
41 DnsSdRegistry();
42 explicit DnsSdRegistry(local_discovery::ServiceDiscoverySharedClient* client);
43 virtual ~DnsSdRegistry();
44
45 // Publishes the current device list for |service_type| to event listeners
46 // whose event filter matches the service type.
47 virtual void Publish(const std::string& service_type);
48
49 // Immediately issues a multicast DNS query for all service types of the
50 // calling extension.
51 virtual void ForceDiscovery();
52
53 // Observer registration for parties interested in discovery events.
54 virtual void AddObserver(DnsSdObserver* observer);
55 virtual void RemoveObserver(DnsSdObserver* observer);
56
57 // DNS-SD-related discovery functionality.
58 virtual void RegisterDnsSdListener(const std::string& service_type);
59 virtual void UnregisterDnsSdListener(const std::string& service_type);
60
61 protected:
62 // Data class for managing all the resources and information related to a
63 // particular service type.
64 class ServiceTypeData {
65 public:
66 explicit ServiceTypeData(std::unique_ptr<DnsSdDeviceLister> lister);
67 virtual ~ServiceTypeData();
68
69 // Notify the data class of listeners so that it can be reference counted.
70 void ListenerAdded();
71 // Returns true if the last listener was removed.
72 bool ListenerRemoved();
73 int GetListenerCount();
74
75 // Immediately issues a multicast DNS query for the service type owned by
76 // |this|.
77 void ForceDiscovery();
78
79 // Methods for adding, updating or removing services for this service type.
80 bool UpdateService(bool added, const DnsSdService& service);
81 bool RemoveService(const std::string& service_name);
82 // Called when the discovery service was restarted.
83 // Clear the local cache and initiate rediscovery.
84 bool ClearServices();
85
86 const DnsSdRegistry::DnsSdServiceList& GetServiceList();
87
88 private:
89 int ref_count;
90 std::unique_ptr<DnsSdDeviceLister> lister_;
91 DnsSdRegistry::DnsSdServiceList service_list_;
92 DISALLOW_COPY_AND_ASSIGN(ServiceTypeData);
93 };
94
95 virtual DnsSdDeviceLister* CreateDnsSdDeviceLister(
96 DnsSdDelegate* delegate,
97 const std::string& service_type,
98 local_discovery::ServiceDiscoverySharedClient* discovery_client);
99
100 // DnsSdDelegate implementation:
101 void ServiceChanged(const std::string& service_type,
102 bool added,
103 const DnsSdService& service) override;
104 void ServiceRemoved(const std::string& service_type,
105 const std::string& service_name) override;
106 void ServicesFlushed(const std::string& service_type) override;
107
108 std::map<std::string, std::unique_ptr<ServiceTypeData>> service_data_map_;
109
110 private:
111 void DispatchApiEvent(const std::string& service_type);
112 bool IsRegistered(const std::string& service_type);
113
114 scoped_refptr<local_discovery::ServiceDiscoverySharedClient>
115 service_discovery_client_;
116 base::ObserverList<DnsSdObserver> observers_;
117
118 DISALLOW_COPY_AND_ASSIGN(DnsSdRegistry);
119 };
120
121 } // namespace extensions
122
123 #endif // CHROME_BROWSER_EXTENSIONS_API_MDNS_DNS_SD_REGISTRY_H_
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/mdns/dns_sd_device_lister.cc ('k') | chrome/browser/extensions/api/mdns/dns_sd_registry.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698