1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "printing/printing_context.h" 6 7 #include "base/logging.h" 8 #include "base/values.h" 9 #include "printing/page_setup.h" 10 #include "printing/page_size_margins.h" 11 #include "printing/print_settings_initializer.h" 12 13 namespace printing { 14 15 PrintingContext::PrintingContext(const std::string& app_locale) 16 : dialog_box_dismissed_(false), 17 in_print_job_(false), 18 abort_printing_(false), 19 app_locale_(app_locale) { 20 } 21 22 PrintingContext::~PrintingContext() { 23 } 24 25 void PrintingContext::set_margin_type(MarginType type) { 26 DCHECK(type != CUSTOM_MARGINS); 27 settings_.margin_type = type; 28 } 29 30 void PrintingContext::ResetSettings() { 31 ReleaseContext(); 32 33 settings_.Clear(); 34 35 in_print_job_ = false; 36 dialog_box_dismissed_ = false; 37 abort_printing_ = false; 38 } 39 40 PrintingContext::Result PrintingContext::OnError() { 41 ResetSettings(); 42 return abort_printing_ ? CANCEL : FAILED; 43 } 44 45 PrintingContext::Result PrintingContext::UpdatePrintSettings( 46 const base::DictionaryValue& job_settings, 47 const PageRanges& ranges) { 48 ResetSettings(); 49 50 job_settings.GetBoolean(kSettingHeaderFooterEnabled, 51 &settings_.display_header_footer); 52 53 int margin_type = DEFAULT_MARGINS; 54 if (!job_settings.GetInteger(kSettingMarginsType, &margin_type) || 55 (margin_type != DEFAULT_MARGINS && 56 margin_type != NO_MARGINS && 57 margin_type != CUSTOM_MARGINS && 58 margin_type != PRINTABLE_AREA_MARGINS)) { 59 margin_type = DEFAULT_MARGINS; 60 } 61 settings_.margin_type = static_cast<MarginType>(margin_type); 62 63 if (margin_type == CUSTOM_MARGINS) { 64 printing::PageSizeMargins page_size_margins; 65 GetCustomMarginsFromJobSettings(job_settings, &page_size_margins); 66 67 PageMargins margins_in_points; 68 margins_in_points.Clear(); 69 margins_in_points.top = page_size_margins.margin_top; 70 margins_in_points.bottom = page_size_margins.margin_bottom; 71 margins_in_points.left = page_size_margins.margin_left; 72 margins_in_points.right = page_size_margins.margin_right; 73 74 settings_.SetCustomMargins(margins_in_points); 75 } 76 77 PrintingContext::Result result = UpdatePrinterSettings(job_settings, ranges); 78 PrintSettingsInitializer::InitHeaderFooterStrings(job_settings, &settings_); 79 80 job_settings.GetBoolean(kSettingShouldPrintBackgrounds, 81 &settings_.should_print_backgrounds); 82 job_settings.GetBoolean(kSettingShouldPrintSelectionOnly, 83 &settings_.selection_only); 84 return result; 85 } 86 87 } // namespace printing 88