Commit e6d47283 authored by Lei Zhang's avatar Lei Zhang Committed by Commit Bot

Set the duplex and tumble bits in the PWG header.

BUG=928411

Change-Id: I147411ea096b2c49b3c81cde29f946dc1f1a4dfa
Reviewed-on: https://chromium-review.googlesource.com/c/1454087
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: default avatarSean Kau <skau@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#629863}
parent 3b211f1c
...@@ -752,6 +752,8 @@ TEST_P(PrivetLocalPrintTest, SuccessfulPWGLocalPrint) { ...@@ -752,6 +752,8 @@ TEST_P(PrivetLocalPrintTest, SuccessfulPWGLocalPrint) {
EXPECT_TRUE(SuccessfulResponse(kSubmitDocURL, kSampleLocalPrintResponse)); EXPECT_TRUE(SuccessfulResponse(kSubmitDocURL, kSampleLocalPrintResponse));
EXPECT_EQ("foobar", GetUploadData(kSubmitDocURL)); EXPECT_EQ("foobar", GetUploadData(kSubmitDocURL));
EXPECT_EQ(printing::DuplexMode::SIMPLEX,
pwg_converter_->bitmap_settings().duplex_mode);
EXPECT_EQ(printing::TRANSFORM_NORMAL, EXPECT_EQ(printing::TRANSFORM_NORMAL,
pwg_converter_->bitmap_settings().odd_page_transform); pwg_converter_->bitmap_settings().odd_page_transform);
EXPECT_FALSE(pwg_converter_->bitmap_settings().rotate_all_pages); EXPECT_FALSE(pwg_converter_->bitmap_settings().rotate_all_pages);
...@@ -788,6 +790,8 @@ TEST_P(PrivetLocalPrintTest, SuccessfulPWGLocalPrintDuplex) { ...@@ -788,6 +790,8 @@ TEST_P(PrivetLocalPrintTest, SuccessfulPWGLocalPrintDuplex) {
SuccessfulResponse(kSubmitDocWithJobIDURL, kSampleLocalPrintResponse)); SuccessfulResponse(kSubmitDocWithJobIDURL, kSampleLocalPrintResponse));
EXPECT_EQ("foobar", GetUploadData(kSubmitDocWithJobIDURL)); EXPECT_EQ("foobar", GetUploadData(kSubmitDocWithJobIDURL));
EXPECT_EQ(printing::DuplexMode::SHORT_EDGE,
pwg_converter_->bitmap_settings().duplex_mode);
EXPECT_EQ(printing::TRANSFORM_ROTATE_180, EXPECT_EQ(printing::TRANSFORM_ROTATE_180,
pwg_converter_->bitmap_settings().odd_page_transform); pwg_converter_->bitmap_settings().odd_page_transform);
EXPECT_FALSE(pwg_converter_->bitmap_settings().rotate_all_pages); EXPECT_FALSE(pwg_converter_->bitmap_settings().rotate_all_pages);
......
...@@ -245,17 +245,20 @@ PwgRasterSettings PwgRasterConverter::GetBitmapSettings( ...@@ -245,17 +245,20 @@ PwgRasterSettings PwgRasterConverter::GetBitmapSettings(
raster_capability.value().document_sheet_back; raster_capability.value().document_sheet_back;
PwgRasterSettings result; PwgRasterSettings result;
result.odd_page_transform = TRANSFORM_NORMAL;
switch (duplex_value) { switch (duplex_value) {
case cloud_devices::printer::NO_DUPLEX: case cloud_devices::printer::NO_DUPLEX:
result.duplex_mode = DuplexMode::SIMPLEX;
result.odd_page_transform = TRANSFORM_NORMAL;
break; break;
case cloud_devices::printer::LONG_EDGE: case cloud_devices::printer::LONG_EDGE:
result.duplex_mode = DuplexMode::LONG_EDGE;
if (document_sheet_back == cloud_devices::printer::ROTATED) if (document_sheet_back == cloud_devices::printer::ROTATED)
result.odd_page_transform = TRANSFORM_ROTATE_180; result.odd_page_transform = TRANSFORM_ROTATE_180;
else if (document_sheet_back == cloud_devices::printer::FLIPPED) else if (document_sheet_back == cloud_devices::printer::FLIPPED)
result.odd_page_transform = TRANSFORM_FLIP_VERTICAL; result.odd_page_transform = TRANSFORM_FLIP_VERTICAL;
break; break;
case cloud_devices::printer::SHORT_EDGE: case cloud_devices::printer::SHORT_EDGE:
result.duplex_mode = DuplexMode::SHORT_EDGE;
if (document_sheet_back == cloud_devices::printer::MANUAL_TUMBLE) if (document_sheet_back == cloud_devices::printer::MANUAL_TUMBLE)
result.odd_page_transform = TRANSFORM_ROTATE_180; result.odd_page_transform = TRANSFORM_ROTATE_180;
else if (document_sheet_back == cloud_devices::printer::FLIPPED) else if (document_sheet_back == cloud_devices::printer::FLIPPED)
......
...@@ -28,10 +28,14 @@ namespace { ...@@ -28,10 +28,14 @@ namespace {
constexpr char kPdfToPwgRasterColorTestFile[] = "pdf_to_pwg_raster_test_32.pwg"; constexpr char kPdfToPwgRasterColorTestFile[] = "pdf_to_pwg_raster_test_32.pwg";
constexpr char kPdfToPwgRasterMonoTestFile[] = constexpr char kPdfToPwgRasterMonoTestFile[] =
"pdf_to_pwg_raster_mono_test_32.pwg"; "pdf_to_pwg_raster_mono_test_32.pwg";
constexpr char kPdfToPwgRasterLongEdgeTestFile[] =
"pdf_to_pwg_raster_long_edge_test_32.pwg";
#else #else
constexpr char kPdfToPwgRasterColorTestFile[] = "pdf_to_pwg_raster_test.pwg"; constexpr char kPdfToPwgRasterColorTestFile[] = "pdf_to_pwg_raster_test.pwg";
constexpr char kPdfToPwgRasterMonoTestFile[] = constexpr char kPdfToPwgRasterMonoTestFile[] =
"pdf_to_pwg_raster_mono_test.pwg"; "pdf_to_pwg_raster_mono_test.pwg";
constexpr char kPdfToPwgRasterLongEdgeTestFile[] =
"pdf_to_pwg_raster_long_edge_test.pwg";
#endif #endif
void ResultCallbackImpl(bool* called, void ResultCallbackImpl(bool* called,
...@@ -123,6 +127,7 @@ IN_PROC_BROWSER_TEST_F(PdfToPwgRasterBrowserTest, TestSuccessColor) { ...@@ -123,6 +127,7 @@ IN_PROC_BROWSER_TEST_F(PdfToPwgRasterBrowserTest, TestSuccessColor) {
/*use_color=*/true, /*use_color=*/true,
PdfRenderSettings::Mode::NORMAL); PdfRenderSettings::Mode::NORMAL);
PwgRasterSettings pwg_settings; PwgRasterSettings pwg_settings;
pwg_settings.duplex_mode = DuplexMode::SIMPLEX;
pwg_settings.odd_page_transform = PwgRasterTransformType::TRANSFORM_NORMAL; pwg_settings.odd_page_transform = PwgRasterTransformType::TRANSFORM_NORMAL;
pwg_settings.rotate_all_pages = false; pwg_settings.rotate_all_pages = false;
pwg_settings.reverse_page_order = false; pwg_settings.reverse_page_order = false;
...@@ -150,6 +155,7 @@ IN_PROC_BROWSER_TEST_F(PdfToPwgRasterBrowserTest, TestSuccessMono) { ...@@ -150,6 +155,7 @@ IN_PROC_BROWSER_TEST_F(PdfToPwgRasterBrowserTest, TestSuccessMono) {
/*use_color=*/false, /*use_color=*/false,
PdfRenderSettings::Mode::NORMAL); PdfRenderSettings::Mode::NORMAL);
PwgRasterSettings pwg_settings; PwgRasterSettings pwg_settings;
pwg_settings.duplex_mode = DuplexMode::SIMPLEX;
pwg_settings.odd_page_transform = PwgRasterTransformType::TRANSFORM_NORMAL; pwg_settings.odd_page_transform = PwgRasterTransformType::TRANSFORM_NORMAL;
pwg_settings.rotate_all_pages = false; pwg_settings.rotate_all_pages = false;
pwg_settings.reverse_page_order = false; pwg_settings.reverse_page_order = false;
...@@ -164,4 +170,32 @@ IN_PROC_BROWSER_TEST_F(PdfToPwgRasterBrowserTest, TestSuccessMono) { ...@@ -164,4 +170,32 @@ IN_PROC_BROWSER_TEST_F(PdfToPwgRasterBrowserTest, TestSuccessMono) {
ComparePwgOutput(expected_pwg_file, std::move(pwg_region)); ComparePwgOutput(expected_pwg_file, std::move(pwg_region));
} }
IN_PROC_BROWSER_TEST_F(PdfToPwgRasterBrowserTest, TestSuccessLongDuplex) {
base::ScopedAllowBlockingForTesting allow_blocking;
base::FilePath test_data_dir;
scoped_refptr<base::RefCountedString> pdf_data;
GetPdfData("pdf_to_pwg_raster_test.pdf", &test_data_dir, &pdf_data);
PdfRenderSettings pdf_settings(gfx::Rect(0, 0, 500, 500), gfx::Point(0, 0),
/*dpi=*/gfx::Size(1000, 1000),
/*autorotate=*/false,
/*use_color=*/false,
PdfRenderSettings::Mode::NORMAL);
PwgRasterSettings pwg_settings;
pwg_settings.duplex_mode = DuplexMode::LONG_EDGE;
pwg_settings.odd_page_transform = PwgRasterTransformType::TRANSFORM_NORMAL;
pwg_settings.rotate_all_pages = false;
pwg_settings.reverse_page_order = false;
pwg_settings.use_color = false;
base::ReadOnlySharedMemoryRegion pwg_region;
Convert(pdf_data.get(), pdf_settings, pwg_settings,
/*expect_success=*/true, &pwg_region);
base::FilePath expected_pwg_file =
test_data_dir.AppendASCII(kPdfToPwgRasterLongEdgeTestFile);
ComparePwgOutput(expected_pwg_file, std::move(pwg_region));
}
} // namespace printing } // namespace printing
...@@ -68,6 +68,22 @@ base::ReadOnlySharedMemoryRegion RenderPdfPagesToPwgRaster( ...@@ -68,6 +68,22 @@ base::ReadOnlySharedMemoryRegion RenderPdfPagesToPwgRaster(
? pwg_encoder::PwgHeaderInfo::SRGB ? pwg_encoder::PwgHeaderInfo::SRGB
: pwg_encoder::PwgHeaderInfo::SGRAY; : pwg_encoder::PwgHeaderInfo::SGRAY;
switch (bitmap_settings.duplex_mode) {
case DuplexMode::UNKNOWN_DUPLEX_MODE:
NOTREACHED();
break;
case DuplexMode::SIMPLEX:
// Already defaults to false/false.
break;
case DuplexMode::LONG_EDGE:
header_info.duplex = true;
break;
case DuplexMode::SHORT_EDGE:
header_info.duplex = true;
header_info.tumble = true;
break;
}
// Transform odd pages. // Transform odd pages.
if (page_number % 2) { if (page_number % 2) {
switch (bitmap_settings.odd_page_transform) { switch (bitmap_settings.odd_page_transform) {
......
...@@ -15,6 +15,14 @@ struct PwgRasterSettings { ...@@ -15,6 +15,14 @@ struct PwgRasterSettings {
TRANSFORM_FLIP_VERTICAL TRANSFORM_FLIP_VERTICAL
}; };
enum DuplexMode {
SIMPLEX,
LONG_EDGE,
SHORT_EDGE,
};
DuplexMode duplex_mode;
// How to transform odd-numbered pages. // How to transform odd-numbered pages.
TransformType odd_page_transform; TransformType odd_page_transform;
......
...@@ -14,7 +14,8 @@ bool StructTraits<printing::mojom::PwgRasterSettingsDataView, ...@@ -14,7 +14,8 @@ bool StructTraits<printing::mojom::PwgRasterSettingsDataView,
out->rotate_all_pages = data.rotate_all_pages(); out->rotate_all_pages = data.rotate_all_pages();
out->reverse_page_order = data.reverse_page_order(); out->reverse_page_order = data.reverse_page_order();
out->use_color = data.use_color(); out->use_color = data.use_color();
return data.ReadOddPageTransform(&out->odd_page_transform); return data.ReadOddPageTransform(&out->odd_page_transform) &&
data.ReadDuplexMode(&out->duplex_mode);
} }
} // namespace mojo } // namespace mojo
...@@ -59,6 +59,43 @@ struct EnumTraits<printing::mojom::PwgRasterSettings::TransformType, ...@@ -59,6 +59,43 @@ struct EnumTraits<printing::mojom::PwgRasterSettings::TransformType,
} }
}; };
template <>
struct EnumTraits<printing::mojom::PwgRasterSettings::DuplexMode,
printing::DuplexMode> {
static printing::mojom::PwgRasterSettings::DuplexMode ToMojom(
printing::DuplexMode duplex_mode) {
switch (duplex_mode) {
case printing::DuplexMode::UNKNOWN_DUPLEX_MODE:
break;
case printing::DuplexMode::SIMPLEX:
return printing::mojom::PwgRasterSettings::DuplexMode::SIMPLEX;
case printing::DuplexMode::LONG_EDGE:
return printing::mojom::PwgRasterSettings::DuplexMode::LONG_EDGE;
case printing::DuplexMode::SHORT_EDGE:
return printing::mojom::PwgRasterSettings::DuplexMode::SHORT_EDGE;
}
NOTREACHED() << "Unknown duplex mode " << static_cast<int>(duplex_mode);
return printing::mojom::PwgRasterSettings::DuplexMode::SIMPLEX;
}
static bool FromMojom(printing::mojom::PwgRasterSettings::DuplexMode input,
printing::DuplexMode* output) {
switch (input) {
case printing::mojom::PwgRasterSettings::DuplexMode::SIMPLEX:
*output = printing::DuplexMode::SIMPLEX;
return true;
case printing::mojom::PwgRasterSettings::DuplexMode::LONG_EDGE:
*output = printing::DuplexMode::LONG_EDGE;
return true;
case printing::mojom::PwgRasterSettings::DuplexMode::SHORT_EDGE:
*output = printing::DuplexMode::SHORT_EDGE;
return true;
}
NOTREACHED() << "Unknown duplex mode " << static_cast<int>(input);
return false;
}
};
template <> template <>
class StructTraits<printing::mojom::PwgRasterSettingsDataView, class StructTraits<printing::mojom::PwgRasterSettingsDataView,
printing::PwgRasterSettings> { printing::PwgRasterSettings> {
...@@ -76,6 +113,10 @@ class StructTraits<printing::mojom::PwgRasterSettingsDataView, ...@@ -76,6 +113,10 @@ class StructTraits<printing::mojom::PwgRasterSettingsDataView,
const printing::PwgRasterSettings& settings) { const printing::PwgRasterSettings& settings) {
return settings.odd_page_transform; return settings.odd_page_transform;
} }
static printing::DuplexMode duplex_mode(
const printing::PwgRasterSettings& settings) {
return settings.duplex_mode;
}
static bool Read(printing::mojom::PwgRasterSettingsDataView data, static bool Read(printing::mojom::PwgRasterSettingsDataView data,
printing::PwgRasterSettings* out_settings); printing::PwgRasterSettings* out_settings);
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#ifndef PRINTING_PWG_RASTER_SETTINGS_H_ #ifndef PRINTING_PWG_RASTER_SETTINGS_H_
#define PRINTING_PWG_RASTER_SETTINGS_H_ #define PRINTING_PWG_RASTER_SETTINGS_H_
#include "printing/print_job_constants.h"
namespace printing { namespace printing {
enum PwgRasterTransformType { enum PwgRasterTransformType {
...@@ -16,6 +18,7 @@ enum PwgRasterTransformType { ...@@ -16,6 +18,7 @@ enum PwgRasterTransformType {
}; };
struct PwgRasterSettings { struct PwgRasterSettings {
DuplexMode duplex_mode;
// How to transform odd-numbered pages. // How to transform odd-numbered pages.
PwgRasterTransformType odd_page_transform; PwgRasterTransformType odd_page_transform;
// Rotate all pages (on top of odd-numbered page transform). // Rotate all pages (on top of odd-numbered page transform).
......
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