1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "printing/print_settings_conversion.h" 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <algorithm> 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <cmath> 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <string> 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/time/time.h" 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/values.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "printing/page_size_margins.h" 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "printing/print_job_constants.h" 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "printing/print_settings.h" 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "printing/units.h" 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace printing { 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace { 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void GetCustomMarginsFromJobSettings(const base::DictionaryValue& settings, 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PageSizeMargins* page_size_margins) { 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const base::DictionaryValue* custom_margins; 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!settings.GetDictionary(kSettingMarginsCustom, &custom_margins) || 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !custom_margins->GetDouble(kSettingMarginTop, 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &page_size_margins->margin_top) || 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !custom_margins->GetDouble(kSettingMarginBottom, 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &page_size_margins->margin_bottom) || 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !custom_margins->GetDouble(kSettingMarginLeft, 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &page_size_margins->margin_left) || 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !custom_margins->GetDouble(kSettingMarginRight, 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &page_size_margins->margin_right)) { 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NOTREACHED(); 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void SetMarginsToJobSettings(const std::string& json_path, 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const PageMargins& margins, 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::DictionaryValue* job_settings) { 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue; 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->Set(json_path, dict); 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetInteger(kSettingMarginTop, margins.top); 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetInteger(kSettingMarginBottom, margins.bottom); 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetInteger(kSettingMarginLeft, margins.left); 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetInteger(kSettingMarginRight, margins.right); 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void SetSizeToJobSettings(const std::string& json_path, 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const gfx::Size& size, 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::DictionaryValue* job_settings) { 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue; 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->Set(json_path, dict); 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetInteger("width", size.width()); 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetInteger("height", size.height()); 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void SetRectToJobSettings(const std::string& json_path, 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const gfx::Rect& rect, 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::DictionaryValue* job_settings) { 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue; 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->Set(json_path, dict); 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetInteger("x", rect.x()); 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetInteger("y", rect.y()); 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetInteger("width", rect.width()); 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetInteger("height", rect.height()); 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool PrintSettingsFromJobSettings(const base::DictionaryValue& job_settings, 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PrintSettings* settings) { 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool display_header_footer = false; 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!job_settings.GetBoolean(kSettingHeaderFooterEnabled, 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &display_header_footer)) { 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->set_display_header_footer(display_header_footer); 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (settings->display_header_footer()) { 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::string16 title; 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::string16 url; 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!job_settings.GetString(kSettingHeaderFooterTitle, &title) || 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !job_settings.GetString(kSettingHeaderFooterURL, &url)) { 87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->set_title(title); 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->set_url(url); 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool backgrounds = false; 94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool selection_only = false; 95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!job_settings.GetBoolean(kSettingShouldPrintBackgrounds, &backgrounds) || 96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !job_settings.GetBoolean(kSettingShouldPrintSelectionOnly, 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &selection_only)) { 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->set_should_print_backgrounds(backgrounds); 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->set_selection_only(selection_only); 102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PrintSettings::RequestedMedia requested_media; 104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const base::DictionaryValue* media_size_value = NULL; 105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (job_settings.GetDictionary(kSettingMediaSize, &media_size_value)) { 106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int width_microns = 0; 107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int height_microns = 0; 108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (media_size_value->GetInteger(kSettingMediaSizeWidthMicrons, 109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &width_microns) && 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) media_size_value->GetInteger(kSettingMediaSizeHeightMicrons, 111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &height_microns)) { 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) requested_media.size_microns = gfx::Size(width_microns, height_microns); 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string vendor_id; 115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (media_size_value->GetString(kSettingMediaSizeVendorId, &vendor_id) && 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !vendor_id.empty()) { 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) requested_media.vendor_id = vendor_id; 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->set_requested_media(requested_media); 121f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 122f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int margin_type = DEFAULT_MARGINS; 123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!job_settings.GetInteger(kSettingMarginsType, &margin_type) || 124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) (margin_type != DEFAULT_MARGINS && 125f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) margin_type != NO_MARGINS && 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) margin_type != CUSTOM_MARGINS && 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) margin_type != PRINTABLE_AREA_MARGINS)) { 128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) margin_type = DEFAULT_MARGINS; 129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->set_margin_type(static_cast<MarginType>(margin_type)); 131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (margin_type == CUSTOM_MARGINS) { 133f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PageSizeMargins page_size_margins; 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetCustomMarginsFromJobSettings(job_settings, &page_size_margins); 135f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PageMargins margins_in_points; 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) margins_in_points.Clear(); 138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) margins_in_points.top = page_size_margins.margin_top; 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) margins_in_points.bottom = page_size_margins.margin_bottom; 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) margins_in_points.left = page_size_margins.margin_left; 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) margins_in_points.right = page_size_margins.margin_right; 142f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->SetCustomMargins(margins_in_points); 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PageRanges new_ranges; 147f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const base::ListValue* page_range_array = NULL; 148f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (job_settings.GetList(kSettingPageRange, &page_range_array)) { 149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (size_t index = 0; index < page_range_array->GetSize(); ++index) { 150f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const base::DictionaryValue* dict; 151f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!page_range_array->GetDictionary(index, &dict)) 152f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) continue; 153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PageRange range; 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!dict->GetInteger(kSettingPageRangeFrom, &range.from) || 156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !dict->GetInteger(kSettingPageRangeTo, &range.to)) { 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) continue; 158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 160f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Page numbers are 1-based in the dictionary. 161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Page numbers are 0-based for the printing context. 162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) range.from--; 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) range.to--; 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) new_ranges.push_back(range); 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->set_ranges(new_ranges); 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int color = 0; 170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool landscape = false; 171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int duplex_mode = 0; 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::string16 device_name; 173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool collate = false; 174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int copies = 1; 175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!job_settings.GetBoolean(kSettingCollate, &collate) || 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !job_settings.GetInteger(kSettingCopies, &copies) || 178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !job_settings.GetInteger(kSettingColor, &color) || 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !job_settings.GetInteger(kSettingDuplexMode, &duplex_mode) || 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !job_settings.GetBoolean(kSettingLandscape, &landscape) || 181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) !job_settings.GetString(kSettingDeviceName, &device_name)) { 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 184f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 185f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->set_collate(collate); 186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->set_copies(copies); 187f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->SetOrientation(landscape); 188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->set_device_name(device_name); 189f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->set_duplex_mode(static_cast<DuplexMode>(duplex_mode)); 190f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings->set_color(static_cast<ColorModel>(color)); 191f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 193f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 194f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 195f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void PrintSettingsToJobSettingsDebug(const PrintSettings& settings, 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::DictionaryValue* job_settings) { 197f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->SetBoolean(kSettingHeaderFooterEnabled, 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings.display_header_footer()); 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->SetString(kSettingHeaderFooterTitle, settings.title()); 200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->SetString(kSettingHeaderFooterURL, settings.url()); 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->SetBoolean(kSettingShouldPrintBackgrounds, 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings.should_print_backgrounds()); 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->SetBoolean(kSettingShouldPrintSelectionOnly, 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings.selection_only()); 205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->SetInteger(kSettingMarginsType, settings.margin_type()); 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!settings.ranges().empty()) { 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::ListValue* page_range_array = new base::ListValue; 208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->Set(kSettingPageRange, page_range_array); 209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (size_t i = 0; i < settings.ranges().size(); ++i) { 210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::DictionaryValue* dict = new base::DictionaryValue; 211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) page_range_array->Append(dict); 212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetInteger(kSettingPageRangeFrom, settings.ranges()[i].from + 1); 213f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) dict->SetInteger(kSettingPageRangeTo, settings.ranges()[i].to + 1); 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 215f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 216f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 217f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->SetBoolean(kSettingCollate, settings.collate()); 218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->SetInteger(kSettingCopies, settings.copies()); 219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->SetInteger(kSettingColor, settings.color()); 220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->SetInteger(kSettingDuplexMode, settings.duplex_mode()); 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->SetBoolean(kSettingLandscape, settings.landscape()); 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->SetString(kSettingDeviceName, settings.device_name()); 223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Following values are not read form JSON by InitSettings, so do not have 225f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // common public constants. So just serialize in "debug" section. 226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::DictionaryValue* debug = new base::DictionaryValue; 227f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) job_settings->Set("debug", debug); 228f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) debug->SetDouble("minShrink", settings.min_shrink()); 229f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) debug->SetDouble("maxShrink", settings.max_shrink()); 230f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) debug->SetInteger("desiredDpi", settings.desired_dpi()); 231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) debug->SetInteger("dpi", settings.dpi()); 232f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) debug->SetInteger("deviceUnitsPerInch", settings.device_units_per_inch()); 233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) debug->SetBoolean("support_alpha_blend", settings.should_print_backgrounds()); 234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) debug->SetString("media_vendor_od", settings.requested_media().vendor_id); 235f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetSizeToJobSettings( 236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "media_size", settings.requested_media().size_microns, debug); 237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetMarginsToJobSettings("requested_custom_margins_in_points", 238f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) settings.requested_custom_margins_in_points(), 239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) debug); 240f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const PageSetup& page_setup = settings.page_setup_device_units(); 241f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetMarginsToJobSettings( 242f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "effective_margins", page_setup.effective_margins(), debug); 243f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetSizeToJobSettings("physical_size", page_setup.physical_size(), debug); 244f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetRectToJobSettings("overlay_area", page_setup.overlay_area(), debug); 245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetRectToJobSettings("content_area", page_setup.content_area(), debug); 246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetRectToJobSettings("printable_area", page_setup.printable_area(), debug); 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 248f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 249f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace printing 250