1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <utility>
#include <vector>
#include "base/json/values_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/values.h"
#include "chromeos/crosapi/mojom/print_preview_cros.mojom.h"
#include "components/printing/common/print.mojom.h"
#include "printing/mojom/print.mojom.h"
#include "printing/print_job_constants.h"
#include "printing/print_settings_conversion_chromeos.h"
#include "url/gurl.h"
namespace chromeos {
base::Value::Dict SerializePrintSettings(
const crosapi::mojom::PrintSettingsPtr& settings) {
base::Value::Dict dict;
dict.Set(::printing::kPreviewRequestID,
static_cast<int>(settings->request_id));
dict.Set(::printing::kPreviewUIID, static_cast<int>(settings->preview_id));
dict.Set(::printing::kIsFirstRequest, settings->is_first_request);
dict.Set(::printing::kSettingPrinterType,
static_cast<int>(settings->printer_type));
dict.Set(::printing::kSettingMarginsType,
static_cast<int>(settings->margin_type));
dict.Set(::printing::kSettingScalingType,
static_cast<int>(settings->scaling_type));
dict.Set(::printing::kSettingCollate, settings->collate);
dict.Set(::printing::kSettingCopies, static_cast<int>(settings->copies));
dict.Set(::printing::kSettingColor, static_cast<int>(settings->color));
dict.Set(::printing::kSettingDuplexMode, static_cast<int>(settings->duplex));
dict.Set(::printing::kSettingLandscape, settings->landscape);
dict.Set(::printing::kSettingScaleFactor,
static_cast<int>(settings->scale_factor));
dict.Set(::printing::kSettingRasterizePdf, settings->rasterize_pdf);
dict.Set(::printing::kSettingPagesPerSheet,
static_cast<int>(settings->pages_per_sheet));
dict.Set(::printing::kSettingDpiHorizontal,
static_cast<int>(settings->dpi_horizontal));
dict.Set(::printing::kSettingDpiVertical,
static_cast<int>(settings->dpi_vertical));
dict.Set(::printing::kSettingHeaderFooterEnabled,
settings->header_footer_enabled);
dict.Set(::printing::kSettingShouldPrintBackgrounds,
settings->should_print_backgrounds);
dict.Set(::printing::kSettingShouldPrintSelectionOnly,
settings->should_print_selection_only);
if (settings->title) {
dict.Set(::printing::kSettingHeaderFooterTitle, *settings->title);
}
if (settings->url) {
dict.Set(::printing::kSettingHeaderFooterURL, (*settings->url).spec());
}
if (settings->device_name) {
dict.Set(::printing::kSettingDeviceName, *settings->device_name);
}
if (settings->rasterize_pdf_dpi) {
dict.Set(::printing::kSettingRasterizePdfDpi,
static_cast<int>(*settings->rasterize_pdf_dpi));
}
if (settings->borderless) {
dict.Set(::printing::kSettingBorderless, *settings->borderless);
}
if (settings->media_type) {
dict.Set(::printing::kSettingMediaType, *settings->media_type);
}
if (settings->preview_modifiable) {
dict.Set(::printing::kSettingPreviewModifiable,
*settings->preview_modifiable);
}
if (settings->send_user_info) {
dict.Set(::printing::kSettingSendUserInfo, *settings->send_user_info);
}
if (settings->user_name) {
dict.Set(::printing::kSettingUsername, *settings->user_name);
}
if (settings->chromeos_access_oauth_token) {
dict.Set(::printing::kSettingChromeOSAccessOAuthToken,
*settings->chromeos_access_oauth_token);
}
if (settings->pin_value) {
dict.Set(::printing::kSettingPinValue, *settings->pin_value);
}
if (settings->printer_manually_selected) {
dict.Set(::printing::kSettingPrinterManuallySelected,
*settings->printer_manually_selected);
}
if (settings->printer_status_reason) {
dict.Set(::printing::kSettingPrinterStatusReason,
static_cast<int>(*settings->printer_status_reason));
}
if (settings->capabilities) {
dict.Set(::printing::kSettingCapabilities, *settings->capabilities);
}
if (settings->open_pdf_in_preview) {
dict.Set(::printing::kSettingOpenPDFInPreview,
*settings->open_pdf_in_preview);
}
if (settings->dpi_default) {
dict.Set(::printing::kSettingDpiDefault, *settings->dpi_default);
}
if (settings->page_count) {
dict.Set(::printing::kSettingPreviewPageCount,
static_cast<int>(*settings->page_count));
}
if (settings->show_system_dialog) {
dict.Set(::printing::kSettingShowSystemDialog,
*settings->show_system_dialog);
}
if (settings->ipp_client_info) {
std::vector<::printing::mojom::IppClientInfo> client_info_list;
client_info_list.reserve((*settings->ipp_client_info).size());
for (const ::printing::mojom::IppClientInfoPtr& client_info :
*settings->ipp_client_info) {
client_info_list.emplace_back(std::move(*client_info));
}
dict.Set(::printing::kSettingIppClientInfo,
::printing::ConvertClientInfoToJobSetting(client_info_list));
}
if (settings->advanced_settings) {
base::Value::Dict advanced_settings;
for (auto& setting : *settings->advanced_settings) {
advanced_settings.Set(setting.first, setting.second.Clone());
}
dict.Set(::printing::kSettingAdvancedSettings,
std::move(advanced_settings));
}
if (settings->page_range.size() == 2) {
base::Value::Dict page_range;
page_range.Set(::printing::kSettingPageRangeFrom,
static_cast<int>(settings->page_range[0]));
page_range.Set(::printing::kSettingPageRangeTo,
static_cast<int>(settings->page_range[1]));
base::Value::List page_range_list;
page_range_list.Append(std::move(page_range));
dict.Set(::printing::kSettingPageRange, std::move(page_range_list));
}
base::Value::Dict margins_custom;
margins_custom.Set(::printing::kSettingMarginTop,
static_cast<int>(settings->margins_custom->margin_top));
margins_custom.Set(::printing::kSettingMarginRight,
static_cast<int>(settings->margins_custom->margin_right));
margins_custom.Set(::printing::kSettingMarginLeft,
static_cast<int>(settings->margins_custom->margin_left));
margins_custom.Set(::printing::kSettingMarginBottom,
static_cast<int>(settings->margins_custom->margin_bottom));
dict.Set(::printing::kSettingMarginsCustom, std::move(margins_custom));
base::Value::Dict media_size;
media_size.Set(::printing::kSettingMediaSizeHeightMicrons,
static_cast<int>(settings->media_size->height_microns));
media_size.Set(::printing::kSettingMediaSizeWidthMicrons,
static_cast<int>(settings->media_size->width_microns));
media_size.Set(
::printing::kSettingsImageableAreaLeftMicrons,
static_cast<int>(settings->media_size->imageable_area_left_microns));
media_size.Set(
::printing::kSettingsImageableAreaTopMicrons,
static_cast<int>(settings->media_size->imageable_area_top_microns));
media_size.Set(
::printing::kSettingsImageableAreaRightMicrons,
static_cast<int>(settings->media_size->imageable_area_right_microns));
media_size.Set(
::printing::kSettingsImageableAreaBottomMicrons,
static_cast<int>(settings->media_size->imageable_area_bottom_microns));
if (settings->media_size->vendor_id) {
media_size.Set(::printing::kSettingMediaSizeVendorId,
*settings->media_size->vendor_id);
}
if (settings->media_size->is_default) {
media_size.Set(::printing::kSettingMediaSizeIsDefault,
*settings->media_size->is_default);
}
dict.Set(::printing::kSettingMediaSize, std::move(media_size));
return dict;
}
} // namespace chromeos
|