cloud_print_printer_list.h revision 58537e28ecd584eab876aee8be7156509866d23a
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_CLOUD_PRINT_PRINTER_LIST_H_
6#define CHROME_BROWSER_LOCAL_DISCOVERY_CLOUD_PRINT_PRINTER_LIST_H_
7
8#include <map>
9#include <string>
10#include <vector>
11
12#include "chrome/browser/local_discovery/cloud_print_base_api_flow.h"
13
14namespace local_discovery {
15
16class CloudPrintPrinterList : public CloudPrintBaseApiFlow::Delegate {
17 public:
18  class Delegate {
19   public:
20    ~Delegate() {}
21
22    virtual void OnCloudPrintPrinterListReady() = 0;
23    virtual void OnCloudPrintPrinterListUnavailable() = 0;
24  };
25
26  struct PrinterDetails {
27    PrinterDetails();
28    ~PrinterDetails();
29
30    std::string id;
31    std::string display_name;
32    std::string description;
33    // TODO(noamsml): std::string user;
34  };
35
36  typedef std::vector<PrinterDetails> PrinterList;
37  typedef PrinterList::const_iterator iterator;
38
39  CloudPrintPrinterList(net::URLRequestContextGetter* request_context,
40                        const std::string& cloud_print_url,
41                        OAuth2TokenService* token_service,
42                        Delegate* delegate);
43  virtual ~CloudPrintPrinterList();
44
45  void Start();
46
47  virtual void OnCloudPrintAPIFlowError(
48      CloudPrintBaseApiFlow* flow,
49      CloudPrintBaseApiFlow::Status status) OVERRIDE;
50
51  virtual void OnCloudPrintAPIFlowComplete(
52      CloudPrintBaseApiFlow* flow,
53      const base::DictionaryValue* value) OVERRIDE;
54
55  const PrinterDetails* GetDetailsFor(const std::string& id);
56
57  iterator begin() { return printer_list_.begin(); }
58  iterator end() { return printer_list_.end(); }
59
60  CloudPrintBaseApiFlow* GetOAuth2ApiFlowForTests() {
61    return &api_flow_;
62  }
63
64 private:
65  typedef std::map<std::string /*ID*/, int /* index in printer_list_ */>
66      PrinterIDMap;
67
68  bool FillPrinterDetails(const base::DictionaryValue* printer_value,
69                          PrinterDetails* printer_details);
70
71  scoped_refptr<net::URLRequestContextGetter> request_context_;
72  GURL url_;
73  PrinterIDMap printer_id_map_;
74  PrinterList printer_list_;
75  Delegate* delegate_;
76  CloudPrintBaseApiFlow api_flow_;
77};
78
79}  // namespace local_discovery
80
81#endif  // CHROME_BROWSER_LOCAL_DISCOVERY_CLOUD_PRINT_PRINTER_LIST_H_
82