cloud_print_printer_list.h revision 0529e5d033099cbfc42635f6f6183833b09dff6e
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/gcd_base_api_flow.h"
13
14namespace local_discovery {
15
16class CloudPrintPrinterList : public GCDBaseApiFlow::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                        OAuth2TokenService* token_service,
41                        const std::string& account_id,
42                        Delegate* delegate);
43  virtual ~CloudPrintPrinterList();
44
45  void Start();
46
47  virtual void OnGCDAPIFlowError(GCDBaseApiFlow* flow,
48                                 GCDBaseApiFlow::Status status) OVERRIDE;
49
50  virtual void OnGCDAPIFlowComplete(GCDBaseApiFlow* flow,
51                                    const base::DictionaryValue* value)
52      OVERRIDE;
53
54  virtual bool GCDIsCloudPrint() OVERRIDE;
55
56  const PrinterDetails* GetDetailsFor(const std::string& id);
57
58  iterator begin() { return printer_list_.begin(); }
59  iterator end() { return printer_list_.end(); }
60
61  GCDBaseApiFlow* GetOAuth2ApiFlowForTests() { return &api_flow_; }
62
63 private:
64  typedef std::map<std::string /*ID*/, int /* index in printer_list_ */>
65      PrinterIDMap;
66
67  bool FillPrinterDetails(const base::DictionaryValue* printer_value,
68                          PrinterDetails* printer_details);
69
70  scoped_refptr<net::URLRequestContextGetter> request_context_;
71  PrinterIDMap printer_id_map_;
72  PrinterList printer_list_;
73  Delegate* delegate_;
74  GCDBaseApiFlow api_flow_;
75};
76
77}  // namespace local_discovery
78
79#endif  // CHROME_BROWSER_LOCAL_DISCOVERY_CLOUD_PRINT_PRINTER_LIST_H_
80