printing_context.cc revision 0f1bc08d4cfcc34181b0b5cbf065c40f687bf740
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#include "printing/units.h" 13 14namespace printing { 15 16namespace { 17const float kCloudPrintMarginInch = 0.25; 18} 19 20PrintingContext::PrintingContext(const std::string& app_locale) 21 : dialog_box_dismissed_(false), 22 in_print_job_(false), 23 abort_printing_(false), 24 app_locale_(app_locale) { 25} 26 27PrintingContext::~PrintingContext() { 28} 29 30void PrintingContext::set_margin_type(MarginType type) { 31 DCHECK(type != CUSTOM_MARGINS); 32 settings_.set_margin_type(type); 33} 34 35void PrintingContext::ResetSettings() { 36 ReleaseContext(); 37 38 settings_.Clear(); 39 40 in_print_job_ = false; 41 dialog_box_dismissed_ = false; 42 abort_printing_ = false; 43} 44 45PrintingContext::Result PrintingContext::OnError() { 46 ResetSettings(); 47 return abort_printing_ ? CANCEL : FAILED; 48} 49 50PrintingContext::Result PrintingContext::UpdatePrintSettings( 51 const base::DictionaryValue& job_settings, 52 const PageRanges& ranges) { 53 ResetSettings(); 54 55 if (!PrintSettingsInitializer::InitSettings(job_settings, ranges, 56 &settings_)) { 57 NOTREACHED(); 58 return OnError(); 59 } 60 61 bool print_to_pdf = false; 62 bool is_cloud_dialog = false; 63 64 if (!job_settings.GetBoolean(kSettingPrintToPDF, &print_to_pdf) || 65 !job_settings.GetBoolean(kSettingCloudPrintDialog, &is_cloud_dialog)) { 66 NOTREACHED(); 67 return OnError(); 68 } 69 70 bool print_to_cloud = job_settings.HasKey(kSettingCloudPrintId); 71 bool open_in_external_preview = 72 job_settings.HasKey(kSettingOpenPDFInPreview); 73 74 if (!open_in_external_preview && 75 (print_to_pdf || print_to_cloud || is_cloud_dialog)) { 76 settings_.set_dpi(kDefaultPdfDpi); 77 // Cloud print should get size and rect from capabilities received from 78 // server. 79 gfx::Size paper_size(GetPdfPaperSizeDeviceUnits()); 80 gfx::Rect paper_rect(0, 0, paper_size.width(), paper_size.height()); 81 if (print_to_cloud) { 82 paper_rect.Inset( 83 kCloudPrintMarginInch * settings_.device_units_per_inch(), 84 kCloudPrintMarginInch * settings_.device_units_per_inch()); 85 } 86 DCHECK_EQ(settings_.device_units_per_inch(), kDefaultPdfDpi); 87 settings_.SetPrinterPrintableArea(paper_size, paper_rect, true); 88 return OK; 89 } 90 91 return UpdatePrinterSettings(open_in_external_preview); 92} 93 94} // namespace printing 95