Commit 636e2044 authored by Pranav Batra's avatar Pranav Batra Committed by Commit Bot

Refactor PrintSettingsFromJobSettings

Refactor PrintSettingsFromJobSettings to return a unique pointer.
Also add unit tests for the print settings conversion functions.

Test: ./printing_unittests
Change-Id: I4afd3e7ff466948cea9a372293dbff93ca2a12bf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2337953
Auto-Submit: Pranav Batra <batrapranav@chromium.org>
Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Reviewed-by: default avatarDaniel Hosseinian <dhoss@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/master@{#804008}
parent a7ea291c
...@@ -52,11 +52,13 @@ void TestPrinterQuery::SetSettings(base::Value new_settings, ...@@ -52,11 +52,13 @@ void TestPrinterQuery::SetSettings(base::Value new_settings,
#if defined(OS_WIN) #if defined(OS_WIN)
DCHECK(printer_type_); DCHECK(printer_type_);
#endif #endif
auto settings = std::make_unique<PrintSettings>(); std::unique_ptr<PrintSettings> settings =
PrintingContext::Result result = PrintSettingsFromJobSettings(new_settings);
PrintSettingsFromJobSettings(new_settings, settings.get()) PrintingContext::Result result = PrintingContext::OK;
? PrintingContext::OK if (!settings) {
: PrintingContext::FAILED; settings = std::make_unique<PrintSettings>();
result = PrintingContext::FAILED;
}
float device_microns_per_device_unit = float device_microns_per_device_unit =
static_cast<float>(kMicronsPerInch) / settings->device_units_per_inch(); static_cast<float>(kMicronsPerInch) / settings->device_units_per_inch();
......
...@@ -96,12 +96,13 @@ PageRanges GetPageRangesFromJobSettings(const base::Value& job_settings) { ...@@ -96,12 +96,13 @@ PageRanges GetPageRangesFromJobSettings(const base::Value& job_settings) {
return page_ranges; return page_ranges;
} }
bool PrintSettingsFromJobSettings(const base::Value& job_settings, std::unique_ptr<PrintSettings> PrintSettingsFromJobSettings(
PrintSettings* settings) { const base::Value& job_settings) {
auto settings = std::make_unique<PrintSettings>();
base::Optional<bool> display_header_footer = base::Optional<bool> display_header_footer =
job_settings.FindBoolKey(kSettingHeaderFooterEnabled); job_settings.FindBoolKey(kSettingHeaderFooterEnabled);
if (!display_header_footer.has_value()) if (!display_header_footer.has_value())
return false; return nullptr;
settings->set_display_header_footer(display_header_footer.value()); settings->set_display_header_footer(display_header_footer.value());
if (settings->display_header_footer()) { if (settings->display_header_footer()) {
...@@ -110,7 +111,7 @@ bool PrintSettingsFromJobSettings(const base::Value& job_settings, ...@@ -110,7 +111,7 @@ bool PrintSettingsFromJobSettings(const base::Value& job_settings,
const std::string* url = const std::string* url =
job_settings.FindStringKey(kSettingHeaderFooterURL); job_settings.FindStringKey(kSettingHeaderFooterURL);
if (!title || !url) if (!title || !url)
return false; return nullptr;
settings->set_title(base::UTF8ToUTF16(*title)); settings->set_title(base::UTF8ToUTF16(*title));
settings->set_url(base::UTF8ToUTF16(*url)); settings->set_url(base::UTF8ToUTF16(*url));
...@@ -121,7 +122,7 @@ bool PrintSettingsFromJobSettings(const base::Value& job_settings, ...@@ -121,7 +122,7 @@ bool PrintSettingsFromJobSettings(const base::Value& job_settings,
base::Optional<bool> selection_only = base::Optional<bool> selection_only =
job_settings.FindBoolKey(kSettingShouldPrintSelectionOnly); job_settings.FindBoolKey(kSettingShouldPrintSelectionOnly);
if (!backgrounds.has_value() || !selection_only.has_value()) if (!backgrounds.has_value() || !selection_only.has_value())
return false; return nullptr;
settings->set_should_print_backgrounds(backgrounds.value()); settings->set_should_print_backgrounds(backgrounds.value());
settings->set_selection_only(selection_only.value()); settings->set_selection_only(selection_only.value());
...@@ -178,16 +179,16 @@ bool PrintSettingsFromJobSettings(const base::Value& job_settings, ...@@ -178,16 +179,16 @@ bool PrintSettingsFromJobSettings(const base::Value& job_settings,
!duplex_mode.has_value() || !landscape.has_value() || !duplex_mode.has_value() || !landscape.has_value() ||
!scale_factor.has_value() || !rasterize_pdf.has_value() || !scale_factor.has_value() || !rasterize_pdf.has_value() ||
!pages_per_sheet.has_value()) { !pages_per_sheet.has_value()) {
return false; return nullptr;
} }
#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
base::Optional<int> dpi_horizontal = base::Optional<int> dpi_horizontal =
job_settings.FindIntKey(kSettingDpiHorizontal); job_settings.FindIntKey(kSettingDpiHorizontal);
base::Optional<int> dpi_vertical = base::Optional<int> dpi_vertical =
job_settings.FindIntKey(kSettingDpiVertical); job_settings.FindIntKey(kSettingDpiVertical);
if (!dpi_horizontal.has_value() || !dpi_vertical.has_value()) if (!dpi_horizontal.has_value() || !dpi_vertical.has_value())
return false; return nullptr;
settings->set_dpi_xy(dpi_horizontal.value(), dpi_vertical.value()); settings->set_dpi_xy(dpi_horizontal.value(), dpi_vertical.value());
#endif #endif
...@@ -235,7 +236,7 @@ bool PrintSettingsFromJobSettings(const base::Value& job_settings, ...@@ -235,7 +236,7 @@ bool PrintSettingsFromJobSettings(const base::Value& job_settings,
settings->set_pin_value(*pin_value); settings->set_pin_value(*pin_value);
#endif #endif
return true; return settings;
} }
void PrintSettingsToJobSettingsDebug(const PrintSettings& settings, void PrintSettingsToJobSettingsDebug(const PrintSettings& settings,
......
...@@ -20,9 +20,9 @@ class PrintSettings; ...@@ -20,9 +20,9 @@ class PrintSettings;
PRINTING_EXPORT PageRanges PRINTING_EXPORT PageRanges
GetPageRangesFromJobSettings(const base::Value& job_settings); GetPageRangesFromJobSettings(const base::Value& job_settings);
PRINTING_EXPORT bool PrintSettingsFromJobSettings( // Returns nullptr on failure.
const base::Value& job_settings, PRINTING_EXPORT std::unique_ptr<PrintSettings> PrintSettingsFromJobSettings(
PrintSettings* print_settings); const base::Value& job_settings);
// Use for debug only, because output is not completely consistent with format // Use for debug only, because output is not completely consistent with format
// of |PrintSettingsFromJobSettings| input. // of |PrintSettingsFromJobSettings| input.
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "base/json/json_reader.h" #include "base/json/json_reader.h"
#include "base/values.h" #include "base/values.h"
#include "build/build_config.h"
#include "printing/print_settings.h" #include "printing/print_settings.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -47,16 +48,34 @@ const char kPrinterSettings[] = R"({ ...@@ -47,16 +48,34 @@ const char kPrinterSettings[] = R"({
} // namespace } // namespace
TEST(PrintSettingsConversionTest, ConversionTest_InvalidSettings) {
base::Optional<base::Value> value = base::JSONReader::Read("{}");
ASSERT_TRUE(value.has_value());
EXPECT_FALSE(PrintSettingsFromJobSettings(value.value()));
}
TEST(PrintSettingsConversionTest, ConversionTest) { TEST(PrintSettingsConversionTest, ConversionTest) {
base::Optional<base::Value> value = base::JSONReader::Read(kPrinterSettings); base::Optional<base::Value> value = base::JSONReader::Read(kPrinterSettings);
ASSERT_TRUE(value.has_value()); ASSERT_TRUE(value.has_value());
PrintSettings settings; std::unique_ptr<PrintSettings> settings =
bool success = PrintSettingsFromJobSettings(value.value(), &settings); PrintSettingsFromJobSettings(value.value());
ASSERT_TRUE(success); ASSERT_TRUE(settings);
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
EXPECT_TRUE(settings.send_user_info()); EXPECT_TRUE(settings->send_user_info());
EXPECT_EQ("username@domain.net", settings.username()); EXPECT_EQ("username@domain.net", settings->username());
EXPECT_EQ("0000", settings.pin_value()); EXPECT_EQ("0000", settings->pin_value());
#endif
#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
EXPECT_EQ(settings->dpi_horizontal(), 300);
EXPECT_EQ(settings->dpi_vertical(), 300);
value->SetIntKey("dpiVertical", 600);
settings = PrintSettingsFromJobSettings(value.value());
ASSERT_TRUE(settings);
EXPECT_EQ(settings->dpi_horizontal(), 300);
EXPECT_EQ(settings->dpi_vertical(), 600);
EXPECT_TRUE(value->RemoveKey("dpiVertical"));
settings = PrintSettingsFromJobSettings(value.value());
EXPECT_FALSE(settings);
#endif #endif
} }
...@@ -65,11 +84,11 @@ TEST(PrintSettingsConversionTest, ConversionTest_DontSendUsername) { ...@@ -65,11 +84,11 @@ TEST(PrintSettingsConversionTest, ConversionTest_DontSendUsername) {
base::Optional<base::Value> value = base::JSONReader::Read(kPrinterSettings); base::Optional<base::Value> value = base::JSONReader::Read(kPrinterSettings);
ASSERT_TRUE(value.has_value()); ASSERT_TRUE(value.has_value());
value->SetKey(kSettingSendUserInfo, base::Value(false)); value->SetKey(kSettingSendUserInfo, base::Value(false));
PrintSettings settings; std::unique_ptr<PrintSettings> settings =
bool success = PrintSettingsFromJobSettings(value.value(), &settings); PrintSettingsFromJobSettings(value.value());
ASSERT_TRUE(success); ASSERT_TRUE(settings);
EXPECT_FALSE(settings.send_user_info()); EXPECT_FALSE(settings->send_user_info());
EXPECT_EQ("", settings.username()); EXPECT_EQ("", settings->username());
} }
#endif #endif
......
...@@ -96,10 +96,14 @@ PrintingContext::Result PrintingContext::UsePdfSettings() { ...@@ -96,10 +96,14 @@ PrintingContext::Result PrintingContext::UsePdfSettings() {
PrintingContext::Result PrintingContext::UpdatePrintSettings( PrintingContext::Result PrintingContext::UpdatePrintSettings(
base::Value job_settings) { base::Value job_settings) {
ResetSettings(); ResetSettings();
{
if (!PrintSettingsFromJobSettings(job_settings, settings_.get())) { std::unique_ptr<PrintSettings> settings =
NOTREACHED(); PrintSettingsFromJobSettings(job_settings);
return OnError(); if (!settings) {
NOTREACHED();
return OnError();
}
settings_ = std::move(settings);
} }
PrinterType printer_type = static_cast<PrinterType>( PrinterType printer_type = static_cast<PrinterType>(
......
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