chromium/chromeos/printing/epson_driver_matching.cc

// 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.

#include "chromeos/printing/epson_driver_matching.h"

#include <string_view>

#include "base/ranges/algorithm.h"
#include "base/strings/string_util.h"
#include "chromeos/printing/ppd_provider.h"

namespace chromeos {

bool CanUseEpsonGenericPPD(const PrinterSearchData& sd) {
  // Only matches USB printers.
  if (sd.discovery_type != PrinterSearchData::PrinterDiscoveryType::kUsb) {
    return false;
  }

  // Needed to check if its an Epson printer.
  if (sd.make_and_model.empty()) {
    return false;
  }

  // Fail if this isn't an Epson printer.
  // Note: Assumes make and model strings are already lowercase.
  if (base::ranges::none_of(sd.make_and_model, [](std::string_view emm) {
        return emm.find("epson") != std::string_view::npos;
      })) {
    return false;
  }

  // The command set is retrieved from the 'CMD' field of the printer's IEEE
  // 1284 Device ID.
  for (std::string_view format : sd.printer_id.command_set()) {
    if (base::StartsWith(format, "ESCPR")) {
      return true;
    }
  }

  return false;
}

}  // namespace chromeos