[go: nahoru, domu]

blob: 03268b0287e5a0b0e08deaf5c8047fd7edb63574 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "printing/backend/print_backend.h"
#include <string>
#include <utility>
#include "base/memory/scoped_refptr.h"
#include "build/build_config.h"
namespace {
// PrintBackend override for testing.
printing::PrintBackend* g_print_backend_for_test = nullptr;
} // namespace
namespace printing {
PrinterBasicInfo::PrinterBasicInfo() = default;
PrinterBasicInfo::PrinterBasicInfo(const std::string& printer_name,
const std::string& display_name,
const std::string& printer_description,
int printer_status,
bool is_default,
const PrinterBasicInfoOptions& options)
: printer_name(printer_name),
display_name(display_name),
printer_description(printer_description),
printer_status(printer_status),
is_default(is_default),
options(options) {}
PrinterBasicInfo::PrinterBasicInfo(const PrinterBasicInfo& other) = default;
PrinterBasicInfo::~PrinterBasicInfo() = default;
bool PrinterBasicInfo::operator==(const PrinterBasicInfo& other) const {
return printer_name == other.printer_name &&
display_name == other.display_name &&
printer_description == other.printer_description &&
printer_status == other.printer_status &&
is_default == other.is_default && options == other.options;
}
#if BUILDFLAG(IS_CHROMEOS)
AdvancedCapabilityValue::AdvancedCapabilityValue() = default;
AdvancedCapabilityValue::AdvancedCapabilityValue(
const std::string& name,
const std::string& display_name)
: name(name), display_name(display_name) {}
AdvancedCapabilityValue::AdvancedCapabilityValue(
const AdvancedCapabilityValue& other) = default;
AdvancedCapabilityValue::~AdvancedCapabilityValue() = default;
bool AdvancedCapabilityValue::operator==(
const AdvancedCapabilityValue& other) const {
return name == other.name && display_name == other.display_name;
}
AdvancedCapability::AdvancedCapability() = default;
AdvancedCapability::AdvancedCapability(const std::string& name,
AdvancedCapability::Type type)
: name(name), type(type) {}
AdvancedCapability::AdvancedCapability(
const std::string& name,
const std::string& display_name,
AdvancedCapability::Type type,
const std::string& default_value,
const std::vector<AdvancedCapabilityValue>& values)
: name(name),
display_name(display_name),
type(type),
default_value(default_value),
values(values) {}
AdvancedCapability::AdvancedCapability(const AdvancedCapability& other) =
default;
AdvancedCapability::~AdvancedCapability() = default;
bool AdvancedCapability::operator==(const AdvancedCapability& other) const {
return name == other.name && display_name == other.display_name &&
type == other.type && default_value == other.default_value &&
values == other.values;
}
#endif // BUILDFLAG(IS_CHROMEOS)
#if BUILDFLAG(IS_WIN)
PageOutputQualityAttribute::PageOutputQualityAttribute() = default;
PageOutputQualityAttribute::PageOutputQualityAttribute(
const std::string& display_name,
const std::string& name)
: display_name(display_name), name(name) {}
PageOutputQualityAttribute::~PageOutputQualityAttribute() = default;
bool PageOutputQualityAttribute::operator==(
const PageOutputQualityAttribute& other) const {
return display_name == other.display_name && name == other.name;
}
bool PageOutputQualityAttribute::operator<(
const ::printing::PageOutputQualityAttribute& other) const {
return std::tie(name, display_name) <
std::tie(other.name, other.display_name);
}
PageOutputQuality::PageOutputQuality() = default;
PageOutputQuality::PageOutputQuality(PageOutputQualityAttributes qualities,
std::optional<std::string> default_quality)
: qualities(std::move(qualities)),
default_quality(std::move(default_quality)) {}
PageOutputQuality::PageOutputQuality(const PageOutputQuality& other) = default;
PageOutputQuality::~PageOutputQuality() = default;
// This function is only supposed to be used in tests. The declaration in the
// header file is guarded by "#if defined(UNIT_TEST)" so that they can be used
// by tests but not non-test code. However, this .cc file is compiled as part of
// "backend" where "UNIT_TEST" is not defined. So we need to specify
// "COMPONENT_EXPORT(PRINT_BACKEND)" here again so that they are visible to
// tests.
COMPONENT_EXPORT(PRINT_BACKEND)
bool operator==(const PageOutputQuality& quality1,
const PageOutputQuality& quality2) {
return quality1.qualities == quality2.qualities &&
quality1.default_quality == quality2.default_quality;
}
XpsCapabilities::XpsCapabilities() = default;
XpsCapabilities::XpsCapabilities(XpsCapabilities&& other) noexcept = default;
XpsCapabilities& XpsCapabilities::operator=(XpsCapabilities&& other) noexcept =
default;
XpsCapabilities::~XpsCapabilities() = default;
#endif // BUILDFLAG(IS_WIN)
PrinterSemanticCapsAndDefaults::Paper::Paper() = default;
PrinterSemanticCapsAndDefaults::Paper::Paper(const std::string& display_name,
const std::string& vendor_id,
const gfx::Size& size_um)
: Paper(display_name, vendor_id, size_um, gfx::Rect(size_um)) {}
PrinterSemanticCapsAndDefaults::Paper::Paper(const std::string& display_name,
const std::string& vendor_id,
const gfx::Size& size_um,
const gfx::Rect& printable_area_um)
: Paper(display_name, vendor_id, size_um, printable_area_um, 0) {}
PrinterSemanticCapsAndDefaults::Paper::Paper(const std::string& display_name,
const std::string& vendor_id,
const gfx::Size& size_um,
const gfx::Rect& printable_area_um,
int max_height_um)
: Paper(display_name,
vendor_id,
size_um,
printable_area_um,
max_height_um,
false) {}
PrinterSemanticCapsAndDefaults::Paper::Paper(const std::string& display_name,
const std::string& vendor_id,
const gfx::Size& size_um,
const gfx::Rect& printable_area_um,
int max_height_um,
bool has_borderless_variant)
: display_name_(display_name),
vendor_id_(vendor_id),
size_um_(size_um),
printable_area_um_(printable_area_um),
max_height_um_(max_height_um),
has_borderless_variant_(has_borderless_variant) {}
PrinterSemanticCapsAndDefaults::Paper::Paper(const Paper& other) = default;
PrinterSemanticCapsAndDefaults::Paper&
PrinterSemanticCapsAndDefaults::Paper::operator=(const Paper& other) = default;
bool PrinterSemanticCapsAndDefaults::Paper::operator==(
const PrinterSemanticCapsAndDefaults::Paper& other) const {
return display_name_ == other.display_name_ &&
vendor_id_ == other.vendor_id_ && size_um_ == other.size_um_ &&
printable_area_um_ == other.printable_area_um_ &&
max_height_um_ == other.max_height_um_ &&
has_borderless_variant_ == other.has_borderless_variant_;
}
bool PrinterSemanticCapsAndDefaults::Paper::SupportsCustomSize() const {
return max_height_um_ > 0;
}
bool PrinterSemanticCapsAndDefaults::Paper::IsSizeWithinBounds(
const gfx::Size& other_um) const {
if (other_um == size_um_) {
return true;
}
if (!SupportsCustomSize()) {
return false;
}
return size_um_.width() == other_um.width() &&
size_um_.height() <= other_um.height() &&
other_um.height() <= max_height_um_;
}
bool PrinterSemanticCapsAndDefaults::MediaType::operator==(
const PrinterSemanticCapsAndDefaults::MediaType& other) const {
return display_name == other.display_name && vendor_id == other.vendor_id;
}
PrinterSemanticCapsAndDefaults::PrinterSemanticCapsAndDefaults() = default;
PrinterSemanticCapsAndDefaults::PrinterSemanticCapsAndDefaults(
const PrinterSemanticCapsAndDefaults& other) = default;
PrinterSemanticCapsAndDefaults::~PrinterSemanticCapsAndDefaults() = default;
// This function is only supposed to be used in tests. The declaration in the
// header file is guarded by "#if defined(UNIT_TEST)" so that they can be used
// by tests but not non-test code. However, this .cc file is compiled as part of
// "backend" where "UNIT_TEST" is not defined. So we need to specify
// "COMPONENT_EXPORT(PRINT_BACKEND)" here again so that they are visible to
// tests.
COMPONENT_EXPORT(PRINT_BACKEND)
bool operator==(const PrinterSemanticCapsAndDefaults& caps1,
const PrinterSemanticCapsAndDefaults& caps2) {
return caps1.collate_capable == caps2.collate_capable &&
caps1.collate_default == caps2.collate_default &&
caps1.copies_max == caps2.copies_max &&
caps1.duplex_modes == caps2.duplex_modes &&
caps1.duplex_default == caps2.duplex_default &&
caps1.color_changeable == caps2.color_changeable &&
caps1.color_default == caps2.color_default &&
caps1.color_model == caps2.color_model &&
caps1.bw_model == caps2.bw_model && caps1.papers == caps2.papers &&
caps1.user_defined_papers == caps2.user_defined_papers &&
caps1.default_paper == caps2.default_paper &&
caps1.dpis == caps2.dpis && caps1.default_dpi == caps2.default_dpi
#if BUILDFLAG(IS_CHROMEOS)
&& caps1.pin_supported == caps2.pin_supported &&
caps1.advanced_capabilities == caps2.advanced_capabilities
#endif // BUILDFLAG(IS_CHROMEOS)
#if BUILDFLAG(IS_WIN)
&& caps1.page_output_quality == caps2.page_output_quality
#endif // BUILDFLAG(IS_WIN)
;
}
PrinterCapsAndDefaults::PrinterCapsAndDefaults() = default;
PrinterCapsAndDefaults::PrinterCapsAndDefaults(
const PrinterCapsAndDefaults& other) = default;
PrinterCapsAndDefaults::~PrinterCapsAndDefaults() = default;
PrintBackend::PrintBackend() = default;
PrintBackend::~PrintBackend() = default;
// static
scoped_refptr<PrintBackend> PrintBackend::CreateInstance(
const std::string& locale) {
return g_print_backend_for_test ? g_print_backend_for_test
: PrintBackend::CreateInstanceImpl(locale);
}
// static
void PrintBackend::SetPrintBackendForTesting(PrintBackend* backend) {
g_print_backend_for_test = backend;
}
} // namespace printing