| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/printing/browser/print_manager_utils.h" |
| |
| #include "base/command_line.h" |
| #include "components/printing/browser/print_composite_client.h" |
| #include "components/printing/common/print_messages.h" |
| #include "content/public/common/content_features.h" |
| #include "content/public/common/content_switches.h" |
| #include "printing/print_settings.h" |
| |
| namespace printing { |
| |
| // A temporary flag which makes supporting both paths for OOPIF and non-OOPIF |
| // printing easier. |
| static bool g_oopif_enabled = false; |
| |
| void SetOopifEnabled() { |
| g_oopif_enabled = true; |
| } |
| |
| bool IsOopifEnabled() { |
| return g_oopif_enabled; |
| } |
| |
| void CreateCompositeClientIfNeeded(content::WebContents* web_contents, |
| bool for_preview) { |
| if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kSitePerProcess) || |
| base::FeatureList::IsEnabled(features::kTopDocumentIsolation)) { |
| // For cases need to support OOPIFs. |
| PrintCompositeClient::CreateForWebContents(web_contents); |
| if (for_preview) { |
| PrintCompositeClient::FromWebContents(web_contents) |
| ->set_for_preview(true); |
| } |
| SetOopifEnabled(); |
| } |
| } |
| |
| void RenderParamsFromPrintSettings(const PrintSettings& settings, |
| PrintMsg_Print_Params* params) { |
| params->page_size = settings.page_setup_device_units().physical_size(); |
| params->content_size.SetSize( |
| settings.page_setup_device_units().content_area().width(), |
| settings.page_setup_device_units().content_area().height()); |
| params->printable_area.SetRect( |
| settings.page_setup_device_units().printable_area().x(), |
| settings.page_setup_device_units().printable_area().y(), |
| settings.page_setup_device_units().printable_area().width(), |
| settings.page_setup_device_units().printable_area().height()); |
| params->margin_top = settings.page_setup_device_units().content_area().y(); |
| params->margin_left = settings.page_setup_device_units().content_area().x(); |
| params->dpi = settings.dpi(); |
| params->scale_factor = settings.scale_factor(); |
| params->rasterize_pdf = settings.rasterize_pdf(); |
| // Always use an invalid cookie. |
| params->document_cookie = 0; |
| params->selection_only = settings.selection_only(); |
| params->supports_alpha_blend = settings.supports_alpha_blend(); |
| params->should_print_backgrounds = settings.should_print_backgrounds(); |
| params->display_header_footer = settings.display_header_footer(); |
| params->title = settings.title(); |
| params->url = settings.url(); |
| params->printed_doc_type = |
| IsOopifEnabled() ? SkiaDocumentType::MSKP : SkiaDocumentType::PDF; |
| } |
| |
| } // namespace printing |