Commit cca43d14 authored by Alan Screen's avatar Alan Screen Committed by Chromium LUCI CQ

Add PrinterBasicInfo to print backend mojom

Adding support for PrintBackend queries to happen out of the browser
process requires related data structures to be made available via a Mojo
interface.  These are moved into their own mojom file separate from the
common definition in printing/mojom since they are specific to a new
process being introduced and do not need to be encumbered by the
dependencies which exist for print.mojom.

Add PrinterBasicInfo to the definitions.  This will support forthcoming
queries such as EnumeratePrinters and FetchCapabilities.

Bug: 809738
Change-Id: I7a87e747a9b58f8e0f8460ecf85fb27466a0a8f5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2438580Reviewed-by: default avatarChris Palmer <palmer@chromium.org>
Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Reviewed-by: default avatarDaniel Hosseinian <dhoss@chromium.org>
Commit-Queue: Alan Screen <awscreen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#832546}
parent 4b4a433b
......@@ -15,6 +15,10 @@ mojom("mojom") {
cpp_typemaps = [
{
types = [
{
mojom = "printing.mojom.PrinterBasicInfo"
cpp = "::printing::PrinterBasicInfo"
},
{
mojom = "printing.mojom.Paper"
cpp = "::printing::PrinterSemanticCapsAndDefaults::Paper"
......
......@@ -7,6 +7,16 @@ module printing.mojom;
import "printing/mojom/print.mojom";
import "ui/gfx/geometry/mojom/geometry.mojom";
// Basic information for a specific printer.
struct PrinterBasicInfo {
string printer_name;
string display_name;
string printer_description;
int32 printer_status;
bool is_default;
map<string, string> options;
};
// Paper used by printer semantic capabilities and defaults.
struct Paper {
string display_name;
......
......@@ -72,6 +72,39 @@ class DuplicateChecker {
} // namespace
// static
bool StructTraits<printing::mojom::PrinterBasicInfoDataView,
printing::PrinterBasicInfo>::
Read(printing::mojom::PrinterBasicInfoDataView data,
printing::PrinterBasicInfo* out) {
if (!data.ReadPrinterName(&out->printer_name) ||
!data.ReadDisplayName(&out->display_name) ||
!data.ReadPrinterDescription(&out->printer_description)) {
return false;
}
out->printer_status = data.printer_status();
out->is_default = data.is_default();
if (!data.ReadOptions(&out->options))
return false;
// There should be a non-empty value for `printer_name` since it needs to
// uniquely identify the printer with the operating system among multiple
// possible destinations.
if (out->printer_name.empty()) {
DLOG(ERROR) << "The printer name must not be empty.";
return false;
}
// There should be a non-empty value for `display_name` since it needs to
// uniquely identify the printer in user dialogs among multiple possible
// destinations.
if (out->display_name.empty()) {
DLOG(ERROR) << "The printer's display name must not be empty.";
return false;
}
return true;
}
// static
bool StructTraits<printing::mojom::PaperDataView,
printing::PrinterSemanticCapsAndDefaults::Paper>::
......
......@@ -15,6 +15,34 @@
namespace mojo {
template <>
struct StructTraits<printing::mojom::PrinterBasicInfoDataView,
printing::PrinterBasicInfo> {
static const std::string& printer_name(const printing::PrinterBasicInfo& i) {
return i.printer_name;
}
static const std::string& display_name(const printing::PrinterBasicInfo& i) {
return i.display_name;
}
static const std::string& printer_description(
const printing::PrinterBasicInfo& i) {
return i.printer_description;
}
static int printer_status(const printing::PrinterBasicInfo& i) {
return i.printer_status;
}
static bool is_default(const printing::PrinterBasicInfo& i) {
return i.is_default;
}
static const printing::PrinterBasicInfoOptions& options(
const printing::PrinterBasicInfo& i) {
return i.options;
}
static bool Read(printing::mojom::PrinterBasicInfoDataView data,
printing::PrinterBasicInfo* out);
};
template <>
struct StructTraits<printing::mojom::PaperDataView,
printing::PrinterSemanticCapsAndDefaults::Paper> {
......
......@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <map>
#include <string>
#include <vector>
#include "mojo/public/cpp/test_support/test_utils.h"
......@@ -113,6 +115,70 @@ GenerateSamplePrinterSemanticCapsAndDefaults() {
} // namespace
TEST(PrintBackendMojomTraitsTest, TestSerializeAndDeserializePrinterBasicInfo) {
static const printing::PrinterBasicInfo kPrinterBasicInfo1(
/*printer_name=*/"test printer name 1",
/*display_name=*/"test display name 1",
/*printer_description=*/"This is printer #1 for unit testing.",
/*printer_status=*/0,
/*is_default=*/true,
/*options=*/
std::map<std::string, std::string>{{"opt1", "123"}, {"opt2", "456"}});
static const printing::PrinterBasicInfo kPrinterBasicInfo2(
/*printer_name=*/"test printer name 2",
/*display_name=*/"test display name 2",
/*printer_description=*/"This is printer #2 for unit testing.",
/*printer_status=*/1,
/*is_default=*/false,
/*options=*/std::map<std::string, std::string>{});
static const printing::PrinterBasicInfo kPrinterBasicInfo3(
/*printer_name=*/"test printer name 2",
/*display_name=*/"test display name 2",
/*printer_description=*/"",
/*printer_status=*/9,
/*is_default=*/false,
/*options=*/std::map<std::string, std::string>{});
static const PrinterList kPrinterList{kPrinterBasicInfo1, kPrinterBasicInfo2,
kPrinterBasicInfo3};
for (auto info : kPrinterList) {
printing::PrinterBasicInfo input = info;
printing::PrinterBasicInfo output;
EXPECT_TRUE(
mojo::test::SerializeAndDeserialize<printing::mojom::PrinterBasicInfo>(
input, output));
EXPECT_EQ(info, output);
}
}
TEST(PrintBackendMojomTraitsTest,
TestSerializeAndDeserializePrinterBasicInfoEmptyNames) {
static const printing::PrinterBasicInfo kPrinterBasicInfoEmptyPrinterName(
/*printer_name=*/"",
/*display_name=*/"test display name",
/*printer_description=*/"",
/*printer_status=*/0,
/*is_default=*/true,
/*options=*/std::map<std::string, std::string>{});
static const printing::PrinterBasicInfo kPrinterBasicInfoEmptyDisplayName(
/*printer_name=*/"test printer name",
/*display_name=*/"",
/*printer_description=*/"",
/*printer_status=*/0,
/*is_default=*/true,
/*options=*/std::map<std::string, std::string>{});
static const PrinterList kPrinterList{kPrinterBasicInfoEmptyPrinterName,
kPrinterBasicInfoEmptyDisplayName};
for (auto info : kPrinterList) {
printing::PrinterBasicInfo input = info;
printing::PrinterBasicInfo output;
EXPECT_FALSE(
mojo::test::SerializeAndDeserialize<printing::mojom::PrinterBasicInfo>(
input, output));
}
}
TEST(PrintBackendMojomTraitsTest, TestSerializeAndDeserializePaper) {
for (const auto& paper : kPapers) {
printing::PrinterSemanticCapsAndDefaults::Paper input = paper;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment