158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_API_MDNS_DNS_SD_DEVICE_LISTER_H_
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_API_MDNS_DNS_SD_DEVICE_LISTER_H_
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <string>
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/extensions/api/mdns/dns_sd_delegate.h"
118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/local_discovery/service_discovery_device_lister.h"
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace local_discovery {
148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class ServiceDiscoveryClient;
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // local_discovery
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace extensions {
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Manages a watcher for a specific MDNS/DNS-SD service type and notifies
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// a delegate of changes to watched services.
218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class DnsSdDeviceLister
228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    : public local_discovery::ServiceDiscoveryDeviceLister::Delegate {
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DnsSdDeviceLister(
258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      local_discovery::ServiceDiscoveryClient* service_discovery_client,
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      DnsSdDelegate* delegate,
278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const std::string& service_type);
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~DnsSdDeviceLister();
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void Discover(bool force_update);
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected:
338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual void OnDeviceChanged(
348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      bool added,
358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      const local_discovery::ServiceDescription& service_description) OVERRIDE;
368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual void OnDeviceRemoved(const std::string& service_name) OVERRIDE;
378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual void OnDeviceCacheFlushed() OVERRIDE;
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private:
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // The delegate to notify of changes to services.
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DnsSdDelegate* const delegate_;
428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  local_discovery::ServiceDiscoveryDeviceLister device_lister_;
438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool started_;
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(DnsSdDeviceLister);
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace extensions
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif  // CHROME_BROWSER_EXTENSIONS_API_MDNS_DNS_SD_DEVICE_LISTER_H_
51