Skip to content

Commit

Permalink
Add printing RequestedMedia mojo type with mapping
Browse files Browse the repository at this point in the history
Print driver settings queries and document printing with the print
backend service requires the ability to transfer PrintSettings over
Mojo.  This requires types used by its members to also be mojoified.

Add a mojo definition for printing::PrintSettings::RequestedMedia as
part of the overall mojofication for PrintSettings.

Bug: 809738
Change-Id: I2638e92f0f9bd6cd644b27007b3ad1d92053feb3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3062581
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Commit-Queue: Alan Screen <awscreen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#910002}
  • Loading branch information
Alan Screen authored and Chromium LUCI CQ committed Aug 9, 2021
1 parent 6485799 commit 87cafce
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 0 deletions.
4 changes: 4 additions & 0 deletions printing/mojom/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ mojom("printing_context") {
mojom = "printing.mojom.PageRange"
cpp = "::printing::PageRange"
},
{
mojom = "printing.mojom.RequestedMedia"
cpp = "::printing::PrintSettings::RequestedMedia"
},
]
traits_sources = [ "printing_context_mojom_traits.cc" ]
traits_headers = [ "printing_context_mojom_traits.h" ]
Expand Down
7 changes: 7 additions & 0 deletions printing/mojom/printing_context.mojom
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,10 @@ struct PageRange {
uint32 from;
uint32 to;
};

// Corresponds to `printing::PrintSettings::RequestedMedia` in
// printing/print_settings.h.
struct RequestedMedia {
gfx.mojom.Size size_microns;
string vendor_id;
};
9 changes: 9 additions & 0 deletions printing/mojom/printing_context_mojom_traits.cc
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,13 @@ bool StructTraits<printing::mojom::PageRangeDataView, printing::PageRange>::
return true;
}

// static
bool StructTraits<printing::mojom::RequestedMediaDataView,
printing::PrintSettings::RequestedMedia>::
Read(printing::mojom::RequestedMediaDataView data,
printing::PrintSettings::RequestedMedia* out) {
return data.ReadSizeMicrons(&out->size_microns) &&
data.ReadVendorId(&out->vendor_id);
}

} // namespace mojo
17 changes: 17 additions & 0 deletions printing/mojom/printing_context_mojom_traits.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "printing/mojom/printing_context.mojom-shared.h"
#include "printing/page_range.h"
#include "printing/page_setup.h"
#include "printing/print_settings.h"
#include "ui/gfx/geometry/size.h"

namespace mojo {
Expand Down Expand Up @@ -68,6 +69,22 @@ struct StructTraits<printing::mojom::PageRangeDataView, printing::PageRange> {
printing::PageRange* out);
};

template <>
struct StructTraits<printing::mojom::RequestedMediaDataView,
printing::PrintSettings::RequestedMedia> {
static const gfx::Size& size_microns(
const printing::PrintSettings::RequestedMedia& r) {
return r.size_microns;
}
static const std::string& vendor_id(
const printing::PrintSettings::RequestedMedia& r) {
return r.vendor_id;
}

static bool Read(printing::mojom::RequestedMediaDataView data,
printing::PrintSettings::RequestedMedia* out);
};

} // namespace mojo

#endif // PRINTING_MOJOM_PRINTING_CONTEXT_MOJOM_TRAITS_H_
38 changes: 38 additions & 0 deletions printing/mojom/printing_context_mojom_traits_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "printing/mojom/printing_context.mojom.h"
#include "printing/page_range.h"
#include "printing/page_setup.h"
#include "printing/print_settings.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/geometry/size.h"

Expand Down Expand Up @@ -45,6 +46,17 @@ const PageSetup kPageSetupForcedMargins(kPageSetupPhysicalSize,
/*forced_margins=*/true,
kPageSetupTextHeight);

constexpr gfx::Size kRequestedMediaSize =
gfx::Size(/*width=*/25, /*height=*/75);
const char kRequestedMediaVendorId[] = "iso-foo";

PrintSettings::RequestedMedia GenerateSampleRequestedMedia() {
PrintSettings::RequestedMedia media;
media.size_microns = kRequestedMediaSize;
media.vendor_id = kRequestedMediaVendorId;
return media;
}

} // namespace

TEST(PrintingContextMojomTraitsTest, TestSerializeAndDeserializePageMargins) {
Expand Down Expand Up @@ -208,4 +220,30 @@ TEST(PrintingContextMojomTraitsTest,
mojo::test::SerializeAndDeserialize<mojom::PageRange>(input, output));
}

TEST(PrintingContextMojomTraitsTest,
TestSerializeAndDeserializeRequestedMedia) {
PrintSettings::RequestedMedia input = GenerateSampleRequestedMedia();
PrintSettings::RequestedMedia output;

EXPECT_TRUE(mojo::test::SerializeAndDeserialize<mojom::RequestedMedia>(
input, output));

EXPECT_EQ(kRequestedMediaSize, output.size_microns);
EXPECT_EQ(kRequestedMediaVendorId, output.vendor_id);
}

TEST(PrintingContextMojomTraitsTest,
TestSerializeAndDeserializeRequestedMediaEmpty) {
PrintSettings::RequestedMedia input;
PrintSettings::RequestedMedia output;

// The default is empty.
EXPECT_TRUE(input.IsDefault());

EXPECT_TRUE(mojo::test::SerializeAndDeserialize<mojom::RequestedMedia>(
input, output));

EXPECT_TRUE(output.IsDefault());
}

} // namespace printing

0 comments on commit 87cafce

Please sign in to comment.