privet_local_printer_lister.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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_PRIVET_LOCAL_PRINTER_LISTER_H_
6#define CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_LOCAL_PRINTER_LISTER_H_
7
8#include <map>
9#include <string>
10
11#include "base/memory/linked_ptr.h"
12#include "chrome/browser/local_discovery/privet_device_lister.h"
13#include "chrome/browser/local_discovery/privet_http.h"
14#include "chrome/browser/local_discovery/privet_http_asynchronous_factory.h"
15#include "chrome/common/local_discovery/service_discovery_client.h"
16#include "net/url_request/url_request_context.h"
17
18namespace local_discovery {
19
20// This is an adapter to PrivetDeviceLister that finds printers and checks if
21// they support Privet local printing.
22class PrivetLocalPrinterLister : PrivetDeviceLister::Delegate {
23 public:
24  class Delegate {
25   public:
26    virtual ~Delegate() {}
27    virtual void LocalPrinterChanged(bool added,
28                                     const std::string& name,
29                                     bool has_local_printing,
30                                     const DeviceDescription& description) = 0;
31    virtual void LocalPrinterRemoved(const std::string& name) = 0;
32    virtual void LocalPrinterCacheFlushed() = 0;
33  };
34
35  PrivetLocalPrinterLister(ServiceDiscoveryClient* service_discovery_client,
36                           net::URLRequestContextGetter* request_context,
37                           Delegate* delegate);
38  virtual ~PrivetLocalPrinterLister();
39
40  void Start();
41
42  // Stops listening/listing, keeps the data.
43  void Stop();
44
45  const DeviceDescription* GetDeviceDescription(const std::string& name);
46
47  // PrivetDeviceLister::Delegate implementation.
48  virtual void DeviceChanged(bool added,
49                             const std::string& name,
50                             const DeviceDescription& description) OVERRIDE;
51  virtual void DeviceRemoved(const std::string& name) OVERRIDE;
52  virtual void DeviceCacheFlushed() OVERRIDE;
53
54 private:
55  struct DeviceContext;
56
57  typedef std::map<std::string, linked_ptr<DeviceContext> > DeviceContextMap;
58
59  void OnPrivetInfoDone(DeviceContext* context,
60                        std::string name,
61                        const base::DictionaryValue* json_value);
62
63  void OnPrivetResolved(scoped_ptr<PrivetHTTPClient> http_client);
64
65  scoped_ptr<PrivetHTTPAsynchronousFactory> privet_http_factory_;
66  DeviceContextMap device_contexts_;
67  Delegate* delegate_;
68
69  scoped_ptr<PrivetDeviceLister> privet_lister_;
70};
71
72}  // namespace local_discovery
73
74#endif  // CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_LOCAL_PRINTER_LISTER_H_
75