Chromium Code Reviews| Index: printing/printing_context.cc |
| diff --git a/printing/printing_context.cc b/printing/printing_context.cc |
| index 4e9d03a8469418ead6a83561434bfcb1a3e8db11..9f40f02e536f36c55c273bda24a7e085ebc5fc9c 100644 |
| --- a/printing/printing_context.cc |
| +++ b/printing/printing_context.cc |
| @@ -5,6 +5,7 @@ |
| #include "printing/printing_context.h" |
| #include "base/values.h" |
| +#include "printing/page_setup.h" |
| #include "printing/print_settings_initializer.h" |
| namespace printing { |
| @@ -19,6 +20,11 @@ PrintingContext::PrintingContext(const std::string& app_locale) |
| PrintingContext::~PrintingContext() { |
| } |
| +void PrintingContext::set_margin_type(MarginType type) { |
| + DCHECK(type != CUSTOM_MARGINS); |
| + settings_.margin_type = type; |
| +} |
| + |
| void PrintingContext::ResetSettings() { |
| ReleaseContext(); |
| @@ -37,6 +43,51 @@ PrintingContext::Result PrintingContext::OnError() { |
| PrintingContext::Result PrintingContext::UpdatePrintSettings( |
| const base::DictionaryValue& job_settings, |
| const PageRanges& ranges) { |
| + ResetSettings(); |
| + |
| + if (!job_settings.GetBoolean(printing::kSettingHeaderFooterEnabled, |
| + &settings_.display_header_footer)) { |
| + NOTREACHED(); |
| + } |
| + |
| + int margin_type = DEFAULT_MARGINS; |
| + if (!job_settings.GetInteger(printing::kSettingMarginsType, &margin_type) || |
| + (margin_type != DEFAULT_MARGINS && |
|
Lei Zhang
2011/10/15 03:42:19
Maybe in printing/print_job_constants.h make sure
|
| + margin_type != NO_MARGINS && |
| + margin_type != CUSTOM_MARGINS && |
| + margin_type != PRINTABLE_AREA_MARGINS)) { |
| + NOTREACHED(); |
| + } |
| + settings_.margin_type = static_cast<MarginType>(margin_type); |
| + |
| + if (margin_type == CUSTOM_MARGINS) { |
| + double top_margin_in_points = 0; |
| + double bottom_margin_in_points = 0; |
| + double left_margin_in_points = 0; |
| + double right_margin_in_points = 0; |
| + DictionaryValue* custom_margins; |
| + if (!job_settings.GetDictionary(printing::kSettingMarginsCustom, |
| + &custom_margins) || |
| + !custom_margins->GetDouble(printing::kSettingMarginTop, |
| + &top_margin_in_points) || |
| + !custom_margins->GetDouble(printing::kSettingMarginBottom, |
| + &bottom_margin_in_points) || |
| + !custom_margins->GetDouble(printing::kSettingMarginLeft, |
| + &left_margin_in_points) || |
| + !custom_margins->GetDouble(printing::kSettingMarginRight, |
| + &right_margin_in_points)) { |
| + NOTREACHED(); |
| + } |
| + PageMargins margins_in_points; |
| + margins_in_points.Clear(); |
| + margins_in_points.top = top_margin_in_points; |
| + margins_in_points.bottom = bottom_margin_in_points; |
| + margins_in_points.left = left_margin_in_points; |
| + margins_in_points.right = right_margin_in_points; |
| + |
| + settings_.SetCustomMargins(margins_in_points); |
| + } |
| + |
| PrintingContext::Result result = UpdatePrinterSettings(job_settings, ranges); |
| printing::PrintSettingsInitializer::InitHeaderFooterStrings(job_settings, |
| &settings_); |