diff --git a/chrome/browser/printing/print_browsertest.cc b/chrome/browser/printing/print_browsertest.cc index bd79158ed02ca..09397255b0006 100644 --- a/chrome/browser/printing/print_browsertest.cc +++ b/chrome/browser/printing/print_browsertest.cc @@ -142,6 +142,20 @@ namespace { constexpr int kTestPrinterCapabilitiesMaxCopies = 99; constexpr int kDefaultDocumentCookie = 1234; +#if !BUILDFLAG(IS_CHROMEOS) +constexpr gfx::Size kPhysicalSize = gfx::Size(612, 792); +constexpr gfx::Rect kPrintableArea = gfx::Rect(0, 0, 612, 792); + +// The default margins are set to 1.0cm in //printing/print_settings.cc, which +// is about 28 printer units. The resulting content size is 556 x 736. +constexpr gfx::Size kExpectedContentSize = gfx::Size(556, 736); +#endif // !BUILDFLAG(IS_CHROMEOS) + +const PrinterSemanticCapsAndDefaults::Paper kTestPaper{ + /*display_name=*/"Letter", /*vendor_id=*/"45", + /*size_um=*/gfx::Size(215900, 279400), + /*printable_area_um=*/gfx::Rect(0, 0, 215900, 279400)}; + #if BUILDFLAG(ENABLE_PRINT_CONTENT_ANALYSIS) constexpr char kFakeDmToken[] = "fake-dm-token"; #endif // BUILDFLAG(ENABLE_PRINT_CONTENT_ANALYSIS) @@ -759,6 +773,7 @@ class PrintBrowserTest : public InProcessBrowserTest { default_caps->copies_max = kTestPrinterCapabilitiesMaxCopies; default_caps->dpis = kTestPrinterCapabilitiesDefaultDpis; default_caps->default_dpi = kTestPrinterCapabilitiesDpi; + default_caps->papers.push_back(kTestPaper); test_print_backend_->AddValidPrinter( printer_name, std::move(default_caps), std::make_unique(printer_info)); @@ -2834,26 +2849,15 @@ IN_PROC_BROWSER_TEST_P(SystemAccessProcessPrintBrowserTest, PrintAndWaitUntilPreviewIsReady(); - EXPECT_EQ(rendered_page_count(), 3u); + EXPECT_EQ(3u, rendered_page_count()); - ASSERT_TRUE(print_view_manager.snooped_settings()); - EXPECT_EQ(print_view_manager.snooped_settings()->copies(), - kTestPrintSettingsCopies); -#if BUILDFLAG(IS_LINUX) && BUILDFLAG(USE_CUPS) - // Collect just the keys to compare the info options vs. advanced settings. - std::vector advanced_setting_keys; - std::vector print_info_options_keys; - const PrintSettings::AdvancedSettings& advanced_settings = - print_view_manager.snooped_settings()->advanced_settings(); - for (const auto& advanced_setting : advanced_settings) { - advanced_setting_keys.push_back(advanced_setting.first); - } - for (const auto& option : kTestDummyPrintInfoOptions) { - print_info_options_keys.push_back(option.first); - } - EXPECT_THAT(advanced_setting_keys, - testing::UnorderedElementsAreArray(print_info_options_keys)); -#endif // BUILDFLAG(IS_LINUX) && BUILDFLAG(USE_CUPS) + const mojom::PrintPagesParamsPtr& snooped_params = + print_view_manager.snooped_params(); + ASSERT_TRUE(snooped_params); + EXPECT_EQ(kTestPrinterCapabilitiesDpi, snooped_params->params->dpi); + EXPECT_EQ(kPhysicalSize, snooped_params->params->page_size); + EXPECT_EQ(kPrintableArea, snooped_params->params->printable_area); + EXPECT_EQ(kExpectedContentSize, snooped_params->params->content_size); } #if BUILDFLAG(ENABLE_OOP_PRINTING) @@ -2893,6 +2897,24 @@ IN_PROC_BROWSER_TEST_P(SystemAccessProcessServicePrintBrowserTest, EXPECT_EQ(document_done_result(), mojom::ResultCode::kSuccess); EXPECT_EQ(error_dialog_shown_count(), 0u); EXPECT_EQ(print_job_destruction_count(), 1); + +#if BUILDFLAG(IS_LINUX) && BUILDFLAG(USE_CUPS) + absl::optional settings = document_print_settings(); + ASSERT_TRUE(settings); + // Collect just the keys to compare the info options vs. advanced settings. + std::vector advanced_setting_keys; + std::vector print_info_options_keys; + const PrintSettings::AdvancedSettings& advanced_settings = + settings->advanced_settings(); + for (const auto& advanced_setting : advanced_settings) { + advanced_setting_keys.push_back(advanced_setting.first); + } + for (const auto& option : kTestDummyPrintInfoOptions) { + print_info_options_keys.push_back(option.first); + } + EXPECT_THAT(advanced_setting_keys, + testing::UnorderedElementsAreArray(print_info_options_keys)); +#endif // BUILDFLAG(IS_LINUX) && BUILDFLAG(USE_CUPS) } IN_PROC_BROWSER_TEST_P(SystemAccessProcessServicePrintBrowserTest, diff --git a/chrome/browser/printing/print_view_manager_base.cc b/chrome/browser/printing/print_view_manager_base.cc index 138d3e393154b..e578b0c3815d1 100644 --- a/chrome/browser/printing/print_view_manager_base.cc +++ b/chrome/browser/printing/print_view_manager_base.cc @@ -59,6 +59,8 @@ #if BUILDFLAG(ENABLE_PRINT_PREVIEW) #include "chrome/browser/printing/print_view_manager.h" +#include "printing/print_settings.h" +#include "printing/print_settings_conversion.h" #endif #if BUILDFLAG(ENABLE_OOP_PRINTING) @@ -114,42 +116,6 @@ mojom::PrintPagesParamsPtr CreateEmptyPrintPagesParamsPtr() { return params; } -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) -#if BUILDFLAG(IS_WIN) -void NotifySystemDialogCancelled(base::WeakPtr manager) { - if (manager) - manager->SystemDialogCancelled(); -} -#endif // BUILDFLAG(IS_WIN) - -void OnDidUpdatePrintSettings( - scoped_refptr queue, - std::unique_ptr printer_query, - mojom::PrintManagerHost::UpdatePrintSettingsCallback callback, - base::WeakPtr manager) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - DCHECK(printer_query); - mojom::PrintPagesParamsPtr params = CreateEmptyPrintPagesParamsPtr(); - if (printer_query->last_status() == mojom::ResultCode::kSuccess) { - RenderParamsFromPrintSettings(printer_query->settings(), - params->params.get()); - params->params->document_cookie = printer_query->cookie(); - params->pages = printer_query->settings().ranges(); - } - bool canceled = printer_query->last_status() == mojom::ResultCode::kCanceled; -#if BUILDFLAG(IS_WIN) - if (canceled) - NotifySystemDialogCancelled(std::move(manager)); -#endif - - std::move(callback).Run(std::move(params), canceled); - - if (printer_query->cookie() && printer_query->settings().dpi()) { - queue->QueuePrinterQuery(std::move(printer_query)); - } -} -#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) - void OnDidScriptedPrint( scoped_refptr queue, std::unique_ptr printer_query, @@ -355,16 +321,6 @@ void PrintViewManagerBase::StartLocalPrintJob( settings.page_setup_device_units().printable_area().origin()); std::move(callback).Run(base::Value()); } - -void PrintViewManagerBase::UpdatePrintSettingsReply( - mojom::PrintManagerHost::UpdatePrintSettingsCallback callback, - mojom::PrintPagesParamsPtr params, - bool canceled) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - set_cookie(params->params->document_cookie); - std::move(callback).Run(std::move(params), canceled); -} - #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) void PrintViewManagerBase::GetDefaultPrintSettingsReply( @@ -603,17 +559,29 @@ void PrintViewManagerBase::UpdatePrintSettings( UpdatePrintSettingsCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (!printing_enabled_.GetValue()) { - UpdatePrintSettingsReply(std::move(callback), - CreateEmptyPrintPagesParamsPtr(), false); + std::move(callback).Run(CreateEmptyPrintPagesParamsPtr()); + return; + } + + absl::optional printer_type_value = + job_settings.FindInt(kSettingPrinterType); + if (!printer_type_value) { + std::move(callback).Run(CreateEmptyPrintPagesParamsPtr()); return; } - if (!job_settings.FindInt(kSettingPrinterType)) { - UpdatePrintSettingsReply(std::move(callback), - CreateEmptyPrintPagesParamsPtr(), false); + mojom::PrinterType printer_type = + static_cast(*printer_type_value); + if (printer_type != mojom::PrinterType::kExtension && + printer_type != mojom::PrinterType::kPdf && + printer_type != mojom::PrinterType::kLocal) { + std::move(callback).Run(CreateEmptyPrintPagesParamsPtr()); return; } + // `job_settings` does not yet contain the rasterized PDF dpi, so if the user + // has the print preference set, fetch it for use in + // `PrintSettingsFromJobSettings()`. content::BrowserContext* context = web_contents() ? web_contents()->GetBrowserContext() : nullptr; PrefService* prefs = @@ -624,17 +592,21 @@ void PrintViewManagerBase::UpdatePrintSettings( job_settings.Set(kSettingRasterizePdfDpi, value); } - auto callback_wrapper = - base::BindOnce(&PrintViewManagerBase::UpdatePrintSettingsReply, - weak_ptr_factory_.GetWeakPtr(), std::move(callback)); - std::unique_ptr printer_query = - queue_->CreatePrinterQuery(content::GlobalRenderFrameHostId()); - auto* printer_query_ptr = printer_query.get(); - printer_query_ptr->SetSettings( - std::move(job_settings), - base::BindOnce(&OnDidUpdatePrintSettings, queue_, - std::move(printer_query), std::move(callback_wrapper), - weak_ptr_factory_.GetWeakPtr())); + std::unique_ptr print_settings = + PrintSettingsFromJobSettings(job_settings); + if (!print_settings) { + std::move(callback).Run(CreateEmptyPrintPagesParamsPtr()); + return; + } + + mojom::PrintPagesParamsPtr settings = mojom::PrintPagesParams::New(); + settings->pages = GetPageRangesFromJobSettings(job_settings); + settings->params = mojom::PrintParams::New(); + RenderParamsFromPrintSettings(*print_settings, settings->params.get()); + settings->params->document_cookie = PrintSettings::NewCookie(); + set_cookie(settings->params->document_cookie); + + std::move(callback).Run(std::move(settings)); } #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) diff --git a/chrome/browser/printing/test_print_view_manager.cc b/chrome/browser/printing/test_print_view_manager.cc index 25219ae3a42b6..708970be07b2c 100644 --- a/chrome/browser/printing/test_print_view_manager.cc +++ b/chrome/browser/printing/test_print_view_manager.cc @@ -27,29 +27,20 @@ namespace printing { namespace { void OnDidUpdatePrintSettings( - std::unique_ptr& snooped_settings, - scoped_refptr queue, - std::unique_ptr printer_query, - mojom::PrintManagerHost::UpdatePrintSettingsCallback callback) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - DCHECK(printer_query); - auto params = mojom::PrintPagesParams::New(); - params->params = mojom::PrintParams::New(); - if (printer_query->last_status() == mojom::ResultCode::kSuccess) { - RenderParamsFromPrintSettings(printer_query->settings(), - params->params.get()); - params->params->document_cookie = printer_query->cookie(); - params->pages = printer_query->settings().ranges(); - snooped_settings = - std::make_unique(printer_query->settings()); - } - bool canceled = printer_query->last_status() == mojom::ResultCode::kCanceled; - - std::move(callback).Run(std::move(params), canceled); - - if (printer_query->cookie() && printer_query->settings().dpi()) { - queue->QueuePrinterQuery(std::move(printer_query)); - } + mojom::PrintPagesParamsPtr& snooped_params, + mojom::PrintManagerHost::UpdatePrintSettingsCallback callback, + mojom::PrintPagesParamsPtr settings) { + snooped_params = mojom::PrintPagesParams::New(); + auto params = mojom::PrintParams::New(); + + // Copy over any relevant fields that we want to snoop. + params->dpi = settings->params->dpi; + params->page_size = settings->params->page_size; + params->content_size = settings->params->content_size; + params->printable_area = settings->params->printable_area; + snooped_params->params = std::move(params); + + std::move(callback).Run(std::move(settings)); } } // namespace @@ -119,14 +110,10 @@ void TestPrintViewManager::PrintPreviewAllowedForTesting() { void TestPrintViewManager::UpdatePrintSettings( base::Value::Dict job_settings, UpdatePrintSettingsCallback callback) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - std::unique_ptr printer_query = - queue_->CreatePrinterQuery(content::GlobalRenderFrameHostId()); - auto* printer_query_ptr = printer_query.get(); - printer_query_ptr->SetSettings( + PrintViewManagerBase::UpdatePrintSettings( std::move(job_settings), - base::BindOnce(&OnDidUpdatePrintSettings, std::ref(snooped_settings_), - queue_, std::move(printer_query), std::move(callback))); + base::BindOnce(&OnDidUpdatePrintSettings, std::ref(snooped_params_), + std::move(callback))); } } // namespace printing diff --git a/chrome/browser/printing/test_print_view_manager.h b/chrome/browser/printing/test_print_view_manager.h index 2711c95b58270..f03f4fcf5b839 100644 --- a/chrome/browser/printing/test_print_view_manager.h +++ b/chrome/browser/printing/test_print_view_manager.h @@ -34,7 +34,9 @@ class TestPrintViewManager : public PrintViewManager { void WaitUntilPreviewIsShownOrCancelled(); - PrintSettings* snooped_settings() { return snooped_settings_.get(); } + const mojom::PrintPagesParamsPtr& snooped_params() const { + return snooped_params_; + } const absl::optional& print_now_result() const { return print_now_result_; @@ -59,7 +61,7 @@ class TestPrintViewManager : public PrintViewManager { void UpdatePrintSettings(base::Value::Dict job_settings, UpdatePrintSettingsCallback callback) override; - std::unique_ptr snooped_settings_; + mojom::PrintPagesParamsPtr snooped_params_; absl::optional print_now_result_; OnDidCreatePrintJobCallback on_did_create_print_job_; }; diff --git a/components/BUILD.gn b/components/BUILD.gn index 7816b4bebad43..ec83863929894 100644 --- a/components/BUILD.gn +++ b/components/BUILD.gn @@ -949,6 +949,7 @@ if (!is_ios) { sources += [ "printing/test/print_render_frame_helper_browsertest.cc" ] deps += [ "//build:chromeos_buildflags", + "//components/printing/browser", "//components/printing/common:mojo_interfaces", "//components/printing/test:test_support", ] diff --git a/components/printing/common/print.mojom b/components/printing/common/print.mojom index 8c6b0aee39647..1e7437c54852b 100644 --- a/components/printing/common/print.mojom +++ b/components/printing/common/print.mojom @@ -391,7 +391,7 @@ interface PrintManagerHost { [EnableIf=enable_print_preview, Sync] UpdatePrintSettings( mojo_base.mojom.DictionaryValue job_settings) - => (PrintPagesParams current_settings, bool canceled); + => (PrintPagesParams current_settings); // Tells the browser to set up the print preview requested by the script. It // runs a nested run loop in the renderer until print preview for diff --git a/components/printing/renderer/print_render_frame_helper.cc b/components/printing/renderer/print_render_frame_helper.cc index 37ee29375fae6..c4a5aee420767 100644 --- a/components/printing/renderer/print_render_frame_helper.cc +++ b/components/printing/renderer/print_render_frame_helper.cc @@ -2499,22 +2499,12 @@ bool PrintRenderFrameHelper::UpdatePrintSettings( } mojom::PrintPagesParamsPtr settings; - bool canceled = false; - GetPrintManagerHost()->UpdatePrintSettings(job_settings->Clone(), &settings, - &canceled); - - // If mojom::PrintManagerHost is disconnected in the browser after calling - // UpdatePrintSettings(), |settings| could be null. + GetPrintManagerHost()->UpdatePrintSettings(job_settings->Clone(), &settings); if (!settings) { print_preview_context_.set_error(PREVIEW_ERROR_EMPTY_PRINTER_SETTINGS); return false; } - if (canceled) { - notify_browser_of_print_failure_ = false; - return false; - } - settings->params->preview_ui_id = job_settings->FindInt(kPreviewUIID).value(); // Validate expected print preview settings. diff --git a/components/printing/test/mock_printer.cc b/components/printing/test/mock_printer.cc index 28273ff7f8b6f..d8c643bfb23f7 100644 --- a/components/printing/test/mock_printer.cc +++ b/components/printing/test/mock_printer.cc @@ -131,20 +131,6 @@ void MockPrinter::SetDefaultPrintSettings( url_ = params.url; } -void MockPrinter::UseInvalidSettings() { - use_invalid_settings_ = true; - printing::mojom::PrintParams empty_param; - SetDefaultPrintSettings(empty_param); -} - -void MockPrinter::UseInvalidPageSize() { - page_size_.SetSize(0, 0); -} - -void MockPrinter::UseInvalidContentSize() { - content_size_.SetSize(0, 0); -} - void MockPrinter::ScriptedPrint(int cookie, uint32_t expected_pages_count, bool has_selection, diff --git a/components/printing/test/mock_printer.h b/components/printing/test/mock_printer.h index 72044b5b8710e..18b4d1abb8469 100644 --- a/components/printing/test/mock_printer.h +++ b/components/printing/test/mock_printer.h @@ -69,9 +69,6 @@ class MockPrinter { // Functions that changes settings of a pseudo printer. void ResetPrinter(); void SetDefaultPrintSettings(const printing::mojom::PrintParams& params); - void UseInvalidSettings(); - void UseInvalidPageSize(); - void UseInvalidContentSize(); // Functions that handle mojo messages. printing::mojom::PrintParamsPtr GetDefaultPrintSettings(); diff --git a/components/printing/test/print_render_frame_helper_browsertest.cc b/components/printing/test/print_render_frame_helper_browsertest.cc index 4096e5aadd9be..c4b47669ed13b 100644 --- a/components/printing/test/print_render_frame_helper_browsertest.cc +++ b/components/printing/test/print_render_frame_helper_browsertest.cc @@ -39,6 +39,12 @@ #include "third_party/blink/public/web/web_range.h" #include "third_party/blink/public/web/web_view.h" +#if BUILDFLAG(ENABLE_PRINT_PREVIEW) +#include "components/printing/browser/print_manager_utils.h" +#include "printing/print_settings.h" +#include "printing/print_settings_conversion.h" +#endif + #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_APPLE) #include "base/files/file_util.h" #include "printing/image.h" @@ -337,12 +343,10 @@ class TestPrintManagerHost #if BUILDFLAG(ENABLE_PRINT_PREVIEW) void UpdatePrintSettings(base::Value::Dict job_settings, UpdatePrintSettingsCallback callback) override { - auto params = printing::mojom::PrintPagesParams::New(); - params->params = printing::mojom::PrintParams::New(); - bool canceled = false; + mojom::PrintPagesParamsPtr settings = mojom::PrintPagesParams::New(); + settings->params = mojom::PrintParams::New(); // Check and make sure the required settings are all there. - // We don't actually care about the values. absl::optional margins_type = job_settings.FindInt(kSettingMarginsType); if (!margins_type.has_value() || @@ -356,66 +360,22 @@ class TestPrintManagerHost !job_settings.FindInt(kSettingCopies) || !job_settings.FindInt(kPreviewUIID) || !job_settings.FindInt(kPreviewRequestID)) { - std::move(callback).Run(std::move(params), canceled); + std::move(callback).Run(std::move(settings)); return; } - // Just return the default settings. - const base::Value::List* page_range = - job_settings.FindList(kSettingPageRange); - PageRanges new_ranges; - if (page_range) { - for (const base::Value& value : *page_range) { - if (!value.is_dict()) - continue; - - const auto& dict = value.GetDict(); - absl::optional range_from = dict.FindInt(kSettingPageRangeFrom); - absl::optional range_to = dict.FindInt(kSettingPageRangeTo); - if (!range_from || !range_to) - continue; - - // Page numbers are 1-based in the dictionary. - // Page numbers are 0-based for the printing context. - PageRange range; - range.from = range_from.value() - 1; - range.to = range_to.value() - 1; - new_ranges.push_back(range); - } + std::unique_ptr print_settings = + PrintSettingsFromJobSettings(job_settings); + if (!print_settings) { + std::move(callback).Run(std::move(settings)); + return; } - // Get media size - const base::Value::Dict* media_size_value = - job_settings.FindDict(kSettingMediaSize); - gfx::Size page_size; - if (media_size_value) { - absl::optional width_microns = - media_size_value->FindInt(kSettingMediaSizeWidthMicrons); - absl::optional height_microns = - media_size_value->FindInt(kSettingMediaSizeHeightMicrons); - - if (width_microns && height_microns) { - float device_microns_per_unit = - static_cast(kMicronsPerInch) / kDefaultPdfDpi; - page_size = gfx::Size(width_microns.value() / device_microns_per_unit, - height_microns.value() / device_microns_per_unit); - } - } + settings->pages = GetPageRangesFromJobSettings(job_settings); + RenderParamsFromPrintSettings(*print_settings, settings->params.get()); + settings->params->document_cookie = PrintSettings::NewCookie(); - // Get scaling - absl::optional setting_scale_factor = - job_settings.FindInt(kSettingScaleFactor); - int scale_factor = setting_scale_factor.value_or(100); - - printer_->UpdateSettings(params.get(), new_ranges, margins_type.value(), - page_size, scale_factor); - absl::optional selection_only = - job_settings.FindBool(kSettingShouldPrintSelectionOnly); - absl::optional should_print_backgrounds = - job_settings.FindBool(kSettingShouldPrintBackgrounds); - params->params->selection_only = selection_only.value(); - params->params->should_print_backgrounds = should_print_backgrounds.value(); - std::move(callback).Run(std::move(params), canceled); + std::move(callback).Run(std::move(settings)); } void SetupScriptedPrintPreview( SetupScriptedPrintPreviewCallback callback) override { @@ -1116,13 +1076,6 @@ class PrintRenderFrameHelperPreviewTest preview_ui()->has_custom_page_size_style()); } - void SetLetterMediaSize() { - base::Value::Dict media_size; - media_size.Set(kSettingMediaSizeWidthMicrons, 215900); - media_size.Set(kSettingMediaSizeHeightMicrons, 279400); - print_settings().Set(kSettingMediaSize, std::move(media_size)); - } - base::Value::Dict& print_settings() { return print_settings_; } private: @@ -1138,16 +1091,31 @@ class PrintRenderFrameHelperPreviewTest static_cast(mojom::DuplexMode::kSimplex)); print_settings_.Set(kSettingCopies, 1); print_settings_.Set(kSettingDeviceName, "dummy"); + print_settings_.Set(kSettingDpiHorizontal, 72); + print_settings_.Set(kSettingDpiVertical, 72); print_settings_.Set(kPreviewUIID, 4); + print_settings_.Set(kSettingRasterizePdf, false); print_settings_.Set(kPreviewRequestID, 12345); + print_settings_.Set(kSettingScaleFactor, 100); print_settings_.Set(kIsFirstRequest, true); print_settings_.Set(kSettingMarginsType, static_cast(mojom::MarginType::kDefaultMargins)); + print_settings_.Set(kSettingPagesPerSheet, 1); print_settings_.Set(kSettingPreviewModifiable, true); print_settings_.Set(kSettingPreviewIsFromArc, false); print_settings_.Set(kSettingHeaderFooterEnabled, false); print_settings_.Set(kSettingShouldPrintBackgrounds, false); print_settings_.Set(kSettingShouldPrintSelectionOnly, false); + + // Using a media size with realistic dimensions for a Letter paper. + base::Value::Dict media_size; + media_size.Set(kSettingMediaSizeWidthMicrons, 215900); + media_size.Set(kSettingMediaSizeHeightMicrons, 279400); + media_size.Set(kSettingsImageableAreaLeftMicrons, 12700); + media_size.Set(kSettingsImageableAreaBottomMicrons, 0); + media_size.Set(kSettingsImageableAreaRightMicrons, 209550); + media_size.Set(kSettingsImageableAreaTopMicrons, 254000); + print_settings_.Set(kSettingMediaSize, std::move(media_size)); } base::Value::Dict print_settings_; @@ -1189,7 +1157,7 @@ TEST_F(PrintRenderFrameHelperPreviewTest, OnPrintPreview) { EXPECT_EQ(0u, preview_ui()->print_preview_pages_remaining()); VerifyDidPreviewPage(true, 0); VerifyPreviewPageCount(1); - VerifyDefaultPageLayout(540, 720, 36, 36, 36, 36, false); + VerifyDefaultPageLayout(548, 692, 72, 28, 36, 28, false); VerifyPrintPreviewCancelled(false); VerifyPrintPreviewFailed(false); VerifyPrintPreviewGenerated(true); @@ -1265,7 +1233,7 @@ TEST_F(PrintRenderFrameHelperPreviewTest, PrintToPDFSelectedHonorPrintCss) { EXPECT_EQ(0u, preview_ui()->print_preview_pages_remaining()); // Since PRINT_TO_PDF is selected, pdf page size is equal to print media page // size. - VerifyDefaultPageLayout(252, 252, 18, 18, 18, 18, true); + VerifyDefaultPageLayout(234, 216, 72, 0, 36, 18, true); VerifyDidPreviewPage(true, 0); VerifyPreviewPageCount(1); VerifyPrintPreviewCancelled(false); @@ -1441,7 +1409,7 @@ TEST_F(PrintRenderFrameHelperPreviewTest, PrintPreviewCenterToFitPage) { OnPrintPreview(); EXPECT_EQ(0u, preview_ui()->print_preview_pages_remaining()); - VerifyDefaultPageLayout(216, 216, 288, 288, 198, 198, true); + VerifyDefaultPageLayout(224, 188, 324, 280, 198, 190, true); VerifyDidPreviewPage(true, 0); VerifyPreviewPageCount(1); VerifyPrintPreviewCancelled(false); @@ -1473,7 +1441,7 @@ TEST_F(PrintRenderFrameHelperPreviewTest, PrintPreviewShrinkToFitPage) { OnPrintPreview(); EXPECT_EQ(0u, preview_ui()->print_preview_pages_remaining()); - VerifyDefaultPageLayout(571, 653, 69, 70, 20, 21, true); + VerifyDefaultPageLayout(576, 637, 89, 66, 20, 16, true); VerifyDidPreviewPage(true, 0); VerifyPreviewPageCount(1); VerifyPrintPreviewCancelled(false); @@ -1513,8 +1481,15 @@ TEST_F(PrintRenderFrameHelperPreviewTest, PrintToPDFSelectedHonorOrientationCss) { LoadHTML(kHTMLWithLandscapePageCss); + base::Value::Dict custom_margins; + custom_margins.Set(kSettingMarginTop, 21); + custom_margins.Set(kSettingMarginBottom, 23); + custom_margins.Set(kSettingMarginLeft, 21); + custom_margins.Set(kSettingMarginRight, 23); + print_settings().Set(kSettingMarginsType, static_cast(mojom::MarginType::kCustomMargins)); + print_settings().Set(kSettingMarginsCustom, std::move(custom_margins)); OnPrintPreview(); EXPECT_EQ(0u, preview_ui()->print_preview_pages_remaining()); @@ -1649,8 +1624,6 @@ TEST_F(PrintRenderFrameHelperPreviewTest, PrintPreviewForSelectedText2) { TEST_F(PrintRenderFrameHelperPreviewTest, PrintPreviewForManyLinesOfText) { LoadHTML(kHTMLWithManyLinesOfText); - SetLetterMediaSize(); - OnPrintPreview(); EXPECT_EQ(0u, preview_ui()->print_preview_pages_remaining()); @@ -1668,7 +1641,6 @@ TEST_F(PrintRenderFrameHelperPreviewTest, PrintPreviewForManyLinesOfTextWithScaling) { LoadHTML(kHTMLWithManyLinesOfText); - SetLetterMediaSize(); print_settings().Set(kSettingScaleFactor, 200); OnPrintPreview(); @@ -1691,7 +1663,6 @@ TEST_F(PrintRenderFrameHelperPreviewTest, LoadHTML(kHTMLWithManyLinesOfText); GetMainFrame()->ExecuteCommand("SelectAll"); - SetLetterMediaSize(); print_settings().Set(kSettingShouldPrintSelectionOnly, true); OnPrintPreview(); @@ -1712,7 +1683,6 @@ TEST_F(PrintRenderFrameHelperPreviewTest, LoadHTML(kHTMLWithManyLinesOfText); GetMainFrame()->ExecuteCommand("SelectAll"); - SetLetterMediaSize(); print_settings().Set(kSettingShouldPrintSelectionOnly, true); print_settings().Set(kSettingScaleFactor, 200); @@ -1756,7 +1726,8 @@ TEST_F(PrintRenderFrameHelperPreviewTest, LoadHTML(kPrintPreviewHTML); // Set mock printer to provide invalid settings. - printer()->UseInvalidSettings(); + // A missing color entry is invalid. + print_settings().Remove(kSettingColor); OnPrintPreview(); @@ -1771,32 +1742,12 @@ TEST_F(PrintRenderFrameHelperPreviewTest, OnClosePrintPreviewDialog(); } -// Tests that when the selected printer has invalid page settings, print preview +// Tests that when the selected printer has an invalid media size, print preview // receives error message. -TEST_F(PrintRenderFrameHelperPreviewTest, OnPrintPreviewUsingInvalidPageSize) { - LoadHTML(kPrintPreviewHTML); - - printer()->UseInvalidPageSize(); - - OnPrintPreview(); - - VerifyPrintPreviewInvalidPrinterSettings(true); - EXPECT_EQ(0u, preview_ui()->print_preview_pages_remaining()); - - // It should receive the invalid printer settings message only. - VerifyPrintPreviewFailed(false); - VerifyPrintPreviewGenerated(false); - - OnClosePrintPreviewDialog(); -} - -// Tests that when the selected printer has invalid content settings, print -// preview receives error message. -TEST_F(PrintRenderFrameHelperPreviewTest, - OnPrintPreviewUsingInvalidContentSize) { +TEST_F(PrintRenderFrameHelperPreviewTest, OnPrintPreviewUsingInvalidMediaSize) { LoadHTML(kPrintPreviewHTML); - printer()->UseInvalidContentSize(); + print_settings().Set(kSettingMediaSize, base::Value::Dict()); OnPrintPreview(); @@ -1819,7 +1770,7 @@ TEST_F(PrintRenderFrameHelperPreviewTest, BasicBeforePrintAfterPrint) { EXPECT_EQ(0u, preview_ui()->print_preview_pages_remaining()); VerifyDidPreviewPage(true, 0); VerifyPreviewPageCount(1); - VerifyDefaultPageLayout(540, 720, 36, 36, 36, 36, false); + VerifyDefaultPageLayout(548, 692, 72, 28, 36, 28, false); VerifyPrintPreviewCancelled(false); VerifyPrintPreviewFailed(false); VerifyPrintPreviewGenerated(true); @@ -1876,7 +1827,7 @@ TEST_P(PrintRenderFrameHelperTaggedPreviewTest, EXPECT_EQ(0u, preview_ui()->print_preview_pages_remaining()); VerifyDidPreviewPage(true, 0); VerifyPreviewPageCount(1); - VerifyDefaultPageLayout(540, 720, 36, 36, 36, 36, false); + VerifyDefaultPageLayout(548, 692, 72, 28, 36, 28, false); VerifyPrintPreviewCancelled(false); VerifyPrintPreviewFailed(false); VerifyPrintPreviewGenerated(true); @@ -1894,7 +1845,7 @@ TEST_P(PrintRenderFrameHelperTaggedPreviewTest, EXPECT_EQ(0u, preview_ui()->print_preview_pages_remaining()); VerifyDidPreviewPage(true, 0); VerifyPreviewPageCount(1); - VerifyDefaultPageLayout(540, 720, 36, 36, 36, 36, false); + VerifyDefaultPageLayout(548, 692, 72, 28, 36, 28, false); VerifyPrintPreviewCancelled(false); VerifyPrintPreviewFailed(false); VerifyPrintPreviewGenerated(true);