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