Chromium Code Reviews| Index: chrome/browser/extensions/api/mdns/mdns_api.h |
| diff --git a/chrome/browser/extensions/api/mdns/mdns_api.h b/chrome/browser/extensions/api/mdns/mdns_api.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..9e71196040dd9716375e4fc88e73c124e5683410 |
| --- /dev/null |
| +++ b/chrome/browser/extensions/api/mdns/mdns_api.h |
| @@ -0,0 +1,82 @@ |
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CHROME_BROWSER_EXTENSIONS_API_MDNS_MDNS_API_H_ |
| +#define CHROME_BROWSER_EXTENSIONS_API_MDNS_MDNS_API_H_ |
| + |
| +#include <set> |
| +#include <string> |
| + |
| +#include "base/memory/scoped_ptr.h" |
| +#include "base/threading/thread_checker.h" |
| +#include "chrome/browser/extensions/api/mdns/nsd_registry.h" |
| +#include "chrome/browser/extensions/api/profile_keyed_api_factory.h" |
| +#include "chrome/browser/extensions/event_router.h" |
| + |
| +namespace extensions { |
| + |
| +class NsdRegistry; |
| + |
| +// MDnsAPI is instantiated with the profile and will listen for extensions that |
| +// register listeners for the chrome.mdns extension API. It will use an Network |
| +// Service Discovery type registry class to start the mDNS listener process (if |
| +// necessary) and observe new service events to dispatch them to registered |
| +// extensions. The Network Service Discovery registry is a location for |
| +// managing discovery protocols. |
|
mark a. foltz
2013/09/06 00:15:49
The way this is described it sounds more like an N
justinlin
2013/09/06 00:39:29
Done. Yes, I think that makes sense. Renamed NsdRe
|
| +class MDnsAPI : public ProfileKeyedAPI, |
| + public EventRouter::Observer, |
| + public NsdRegistry::NsdObserver { |
| + public: |
| + explicit MDnsAPI(Profile* profile); |
| + virtual ~MDnsAPI(); |
| + |
| + static MDnsAPI* Get(Profile* profile); |
| + |
| + // ProfileKeyedAPI implementation. |
| + static ProfileKeyedAPIFactory<MDnsAPI>* GetFactoryInstance(); |
| + |
| + // Used to mock out the NsdRegistry for testing. |
| + void SetNsdRegistryForTesting(scoped_ptr<NsdRegistry> registry); |
| + |
| + protected: |
| + // Retrieve an instance of the registry. Lazily created when needed. |
| + virtual NsdRegistry* nsd_registry(); |
| + |
| + private: |
| + friend class ProfileKeyedAPIFactory<MDnsAPI>; |
| + |
| + // EventRouter::Observer: |
| + virtual void OnListenerAdded(const EventListenerInfo& details) OVERRIDE; |
| + virtual void OnListenerRemoved(const EventListenerInfo& details) OVERRIDE; |
| + |
| + // NsdRegistry::Observer |
| + virtual void OnMDnsEvent( |
|
mark a. foltz
2013/09/06 00:15:49
OnDnsSdEvent?
justinlin
2013/09/06 00:39:29
Done.
|
| + const std::string& service_type, |
| + const NsdRegistry::NsdServiceList& services) OVERRIDE; |
| + |
| + // ProfileKeyedAPI implementation. |
| + static const char* service_name() { |
| + return "MDnsAPI"; |
| + } |
| + |
| + static const bool kServiceIsCreatedWithBrowserContext = true; |
| + static const bool kServiceIsNULLWhileTesting = true; |
| + |
| + // Update the current list of service types and update the NSD registry. |
| + void UpdateMDnsListeners(const EventListenerInfo& details); |
| + |
| + // Ensure methods are only called on UI thread. |
| + base::ThreadChecker thread_checker_; |
| + Profile* const profile_; |
| + // Lazily created on first access and destroyed with this API class. |
| + scoped_ptr<NsdRegistry> nsd_registry_; |
| + // Current set of service types registered with the NSD registry. |
| + std::set<std::string> service_types_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MDnsAPI); |
| +}; |
| + |
| +} // namespace extensions |
| + |
| +#endif // CHROME_BROWSER_EXTENSIONS_API_MDNS_MDNS_API_H_ |