#include "chrome/common/printing/printer_capabilities.h"
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include "base/containers/contains.h"
#include "base/logging.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/strcat.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/threading/scoped_blocking_call.h"
#include "base/types/optional_util.h"
#include "base/values.h"
#include "build/build_config.h"
#include "build/buildflag.h"
#include "build/chromeos_buildflags.h"
#include "chrome/common/printing/printing_buildflags.h"
#include "components/crash/core/common/crash_keys.h"
#include "components/device_event_log/device_event_log.h"
#include "components/printing/common/cloud_print_cdd_conversion.h"
#include "components/strings/grit/components_strings.h"
#include "printing/backend/print_backend.h"
#include "printing/backend/print_backend_consts.h"
#include "printing/mojom/print.mojom.h"
#include "printing/print_job_constants.h"
#include "ui/base/l10n/l10n_util.h"
#if BUILDFLAG(IS_WIN)
#include "base/strings/string_split.h"
#include "base/strings/utf_string_conversions.h"
#endif
#if BUILDFLAG(IS_CHROMEOS)
#include "chrome/common/printing/ipp_l10n.h"
#endif
#if BUILDFLAG(PRINT_MEDIA_L10N_ENABLED)
#include "chrome/common/printing/print_media_l10n.h"
#if BUILDFLAG(IS_MAC)
#include "printing/printing_features.h"
#endif
#endif
namespace printing {
const char kPrinter[] = …;
namespace {
#if BUILDFLAG(PRINT_MEDIA_L10N_ENABLED)
void PopulateAndSortAllPaperNames(PrinterSemanticCapsAndDefaults& info) {
MediaSizeInfo default_paper =
LocalizePaperDisplayName(info.default_paper.size_um());
info.default_paper.set_display_name(
base::UTF16ToUTF8(default_paper.display_name));
info.default_paper.set_vendor_id(default_paper.vendor_id);
std::vector<PaperWithSizeInfo> size_list;
for (PrinterSemanticCapsAndDefaults::Paper& paper : info.papers) {
gfx::Size size_um = paper.size_um();
size_list.emplace_back(LocalizePaperDisplayName(size_um), std::move(paper));
}
SortPaperDisplayNames(size_list);
info.papers.clear();
for (auto& pair : size_list) {
auto& paper = info.papers.emplace_back(std::move(pair.paper));
paper.set_display_name(base::UTF16ToUTF8(pair.size_info.display_name));
paper.set_vendor_id(pair.size_info.vendor_id);
}
}
#endif
#if BUILDFLAG(IS_CHROMEOS)
void PopulateMediaTypeLocalization(
PrinterSemanticCapsAndDefaults::MediaTypes& media_types) {
auto& l10n_map = CapabilityLocalizationMap();
for (auto& value : media_types) {
auto value_it =
l10n_map.find(base::StrCat({"media-type/", value.vendor_id}));
if (value_it != l10n_map.end()) {
value.display_name = l10n_util::GetStringUTF8(value_it->second);
}
}
}
void PopulateAdvancedCapsLocalization(
std::vector<AdvancedCapability>* advanced_capabilities) {
auto& l10n_map = CapabilityLocalizationMap();
for (AdvancedCapability& capability : *advanced_capabilities) {
auto capability_it = l10n_map.find(capability.name);
if (capability_it != l10n_map.end())
capability.display_name = l10n_util::GetStringUTF8(capability_it->second);
for (AdvancedCapabilityValue& value : capability.values) {
auto value_it =
l10n_map.find(base::StrCat({capability.name, "/", value.name}));
if (value_it != l10n_map.end())
value.display_name = l10n_util::GetStringUTF8(value_it->second);
}
}
}
#endif
base::Value AssemblePrinterCapabilities(const std::string& device_name,
bool has_secure_protocol,
PrinterSemanticCapsAndDefaults* caps) { … }
}
#if BUILDFLAG(IS_WIN)
std::string GetUserFriendlyName(const std::string& printer_name) {
if (!base::StartsWith(printer_name, "\\\\",
base::CompareCase::INSENSITIVE_ASCII)) {
return printer_name;
}
std::string printer_name_trimmed = printer_name.substr(2);
std::vector<std::string> tokens = base::SplitString(
printer_name_trimmed, "\\", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
if (tokens.size() != 2 || tokens[0].empty() || tokens[1].empty())
return printer_name;
return l10n_util::GetStringFUTF8(
IDS_PRINT_PREVIEW_FRIENDLY_WIN_NETWORK_PRINTER_NAME,
base::UTF8ToUTF16(tokens[1]), base::UTF8ToUTF16(tokens[0]));
}
#endif
base::Value::Dict AssemblePrinterSettings(
const std::string& device_name,
const PrinterBasicInfo& basic_info,
bool has_secure_protocol,
PrinterSemanticCapsAndDefaults* caps) { … }
base::Value::Dict GetSettingsOnBlockingTaskRunner(
const std::string& device_name,
const PrinterBasicInfo& basic_info,
PrinterSemanticCapsAndDefaults::Papers user_defined_papers,
scoped_refptr<PrintBackend> print_backend) { … }
}