| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_ASH_PRINTING_PRINTERS_MAP_H_ |
| #define CHROME_BROWSER_ASH_PRINTING_PRINTERS_MAP_H_ |
| |
| #include <optional> |
| #include <set> |
| #include <string> |
| #include <unordered_map> |
| #include <vector> |
| |
| #include "base/containers/flat_map.h" |
| #include "chromeos/printing/cups_printer_status.h" |
| #include "chromeos/printing/printer_configuration.h" |
| |
| namespace ash { |
| |
| // PrintersMap stores printers, categorized by class. |
| class PrintersMap { |
| public: |
| PrintersMap(); |
| |
| PrintersMap(const PrintersMap&) = delete; |
| PrintersMap& operator=(const PrintersMap&) = delete; |
| |
| ~PrintersMap(); |
| |
| // Returns printer matching |printer_id| if found in any PrinterClass. |
| std::optional<chromeos::Printer> Get(const std::string& printer_id) const; |
| |
| // Returns printer matching |printer_id| in |printer_class|. |
| std::optional<chromeos::Printer> Get(chromeos::PrinterClass printer_class, |
| const std::string& printer_id) const; |
| |
| // Returns all printers across all classes. |
| std::vector<chromeos::Printer> Get() const; |
| |
| // Returns all printers in |printer_class|. |
| std::vector<chromeos::Printer> Get( |
| chromeos::PrinterClass printer_class) const; |
| |
| // Returns all printers in |printer_class| that have a secure protocol |
| // (non-network or IPPS). |
| std::vector<chromeos::Printer> GetSecurePrinters( |
| chromeos::PrinterClass printer_class) const; |
| |
| // Returns all printers that have a secure protocol (non-network or IPPS). |
| std::vector<chromeos::Printer> GetSecurePrinters() const; |
| |
| // Adds |printer| to |printer_class|. |
| void Insert(chromeos::PrinterClass printer_class, |
| const chromeos::Printer& printer); |
| |
| // Adds |printer| with status |cups_printer_status| to |printer_class|. |
| void Insert(chromeos::PrinterClass printer_class, |
| const chromeos::Printer& printer, |
| const chromeos::CupsPrinterStatus& cups_printer_status); |
| |
| // Removes all printers in |printer_class|. |
| void Clear(chromeos::PrinterClass printer_class); |
| |
| // Replaces the printers in |printer_class| with |printers|. Adds a status to |
| // the printer if a status was previously saved in the printer status map. |
| void ReplacePrintersInClass(chromeos::PrinterClass printer_class, |
| const std::vector<chromeos::Printer>& printers); |
| |
| // Removes printer with |printer_id| from |printer_class|. This is a no-op if |
| // |printer_id| doesn't exist in printer_class. |
| void Remove(chromeos::PrinterClass printer_class, |
| const std::string& printer_id); |
| |
| // Returns true if the printer |printer_id| exists in |printer_class|. |
| bool IsPrinterInClass(chromeos::PrinterClass printer_class, |
| const std::string& printer_id) const; |
| |
| // Adds printer status to existing printers in |printers_| map and also saves |
| // to |printer_statuses_| cache for future printer retrievals. Returns true |
| // if this is the printer's first saved status or different than the |
| // previously saved status. |
| bool SavePrinterStatus( |
| const std::string& printer_id, |
| const chromeos::CupsPrinterStatus& cups_printer_status); |
| |
| private: |
| using PrintersInClassMap = std::unordered_map<std::string, chromeos::Printer>; |
| using PrinterClassesMap = |
| std::unordered_map<chromeos::PrinterClass, PrintersInClassMap>; |
| |
| // Returns true if |printer_id| exists in any class. Used only for DCHECKs. |
| bool IsExistingPrinter(const std::string& printer_id) const; |
| |
| // Returns a const pointer to the map of all printers for a particular |
| // |printer_class|, or nullptr if it doesn't exist. |
| const PrintersInClassMap* FindPrintersInClassOrNull( |
| chromeos::PrinterClass printer_class) const; |
| |
| // Returns set of printer id's for printers in class |printer_class|. |
| std::set<std::string> GetPrinterIdsInClass( |
| chromeos::PrinterClass printer_class) const; |
| |
| // Categorized printers. Outer map keyed on PrinterClass, inner map keyed on |
| // PrinterId. |
| PrinterClassesMap printers_; |
| |
| // Stores printer statuses returned from performing printer status queries. |
| // This map is used to persist the printer statuses so when |printers_| map is |
| // rebuilt, all the statuses aren't lost. Key for this map is a printer id. |
| base::flat_map<std::string, chromeos::CupsPrinterStatus> printer_statuses_; |
| }; |
| |
| } // namespace ash |
| |
| #endif // CHROME_BROWSER_ASH_PRINTING_PRINTERS_MAP_H_ |