- add sources.
[platform/framework/web/crosswalk.git] / src / printing / printing_context_no_system_dialog.cc
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_no_system_dialog.h"
6
7 #include <unicode/ulocdata.h>
8
9 #include "base/logging.h"
10 #include "base/values.h"
11 #include "printing/metafile.h"
12 #include "printing/print_job_constants.h"
13 #include "printing/units.h"
14
15 namespace printing {
16
17 // static
18 PrintingContext* PrintingContext::Create(const std::string& app_locale) {
19   return static_cast<PrintingContext*>(
20       new PrintingContextNoSystemDialog(app_locale));
21 }
22
23 PrintingContextNoSystemDialog::PrintingContextNoSystemDialog(
24     const std::string& app_locale) : PrintingContext(app_locale) {
25 }
26
27 PrintingContextNoSystemDialog::~PrintingContextNoSystemDialog() {
28   ReleaseContext();
29 }
30
31 void PrintingContextNoSystemDialog::AskUserForSettings(
32     gfx::NativeView parent_view,
33     int max_pages,
34     bool has_selection,
35     const PrintSettingsCallback& callback) {
36   // We don't want to bring up a dialog here.  Ever.  Just signal the callback.
37   callback.Run(OK);
38 }
39
40 PrintingContext::Result PrintingContextNoSystemDialog::UseDefaultSettings() {
41   DCHECK(!in_print_job_);
42
43   ResetSettings();
44   settings_.set_dpi(kDefaultPdfDpi);
45   gfx::Size physical_size = GetPdfPaperSizeDeviceUnits();
46   // Assume full page is printable for now.
47   gfx::Rect printable_area(0, 0, physical_size.width(), physical_size.height());
48   DCHECK_EQ(settings_.device_units_per_inch(), kDefaultPdfDpi);
49   settings_.SetPrinterPrintableArea(physical_size, printable_area, true);
50   return OK;
51 }
52
53 gfx::Size PrintingContextNoSystemDialog::GetPdfPaperSizeDeviceUnits() {
54   int32_t width = 0;
55   int32_t height = 0;
56   UErrorCode error = U_ZERO_ERROR;
57   ulocdata_getPaperSize(app_locale_.c_str(), &height, &width, &error);
58   if (error > U_ZERO_ERROR) {
59     // If the call failed, assume a paper size of 8.5 x 11 inches.
60     LOG(WARNING) << "ulocdata_getPaperSize failed, using 8.5 x 11, error: "
61                  << error;
62     width = static_cast<int>(
63         kLetterWidthInch * settings_.device_units_per_inch());
64     height = static_cast<int>(
65         kLetterHeightInch  * settings_.device_units_per_inch());
66   } else {
67     // ulocdata_getPaperSize returns the width and height in mm.
68     // Convert this to pixels based on the dpi.
69     float multiplier = 100 * settings_.device_units_per_inch();
70     multiplier /= kHundrethsMMPerInch;
71     width *= multiplier;
72     height *= multiplier;
73   }
74   return gfx::Size(width, height);
75 }
76
77 PrintingContext::Result PrintingContextNoSystemDialog::UpdatePrinterSettings(
78     bool external_preview) {
79
80   if (settings_.dpi() == 0)
81     UseDefaultSettings();
82
83   return OK;
84 }
85
86 PrintingContext::Result PrintingContextNoSystemDialog::InitWithSettings(
87     const PrintSettings& settings) {
88   DCHECK(!in_print_job_);
89
90   settings_ = settings;
91
92   return OK;
93 }
94
95 PrintingContext::Result PrintingContextNoSystemDialog::NewDocument(
96     const base::string16& document_name) {
97   DCHECK(!in_print_job_);
98   in_print_job_ = true;
99
100   return OK;
101 }
102
103 PrintingContext::Result PrintingContextNoSystemDialog::NewPage() {
104   if (abort_printing_)
105     return CANCEL;
106   DCHECK(in_print_job_);
107
108   // Intentional No-op.
109
110   return OK;
111 }
112
113 PrintingContext::Result PrintingContextNoSystemDialog::PageDone() {
114   if (abort_printing_)
115     return CANCEL;
116   DCHECK(in_print_job_);
117
118   // Intentional No-op.
119
120   return OK;
121 }
122
123 PrintingContext::Result PrintingContextNoSystemDialog::DocumentDone() {
124   if (abort_printing_)
125     return CANCEL;
126   DCHECK(in_print_job_);
127
128   ResetSettings();
129   return OK;
130 }
131
132 void PrintingContextNoSystemDialog::Cancel() {
133   abort_printing_ = true;
134   in_print_job_ = false;
135 }
136
137 void PrintingContextNoSystemDialog::ReleaseContext() {
138   // Intentional No-op.
139 }
140
141 gfx::NativeDrawingContext PrintingContextNoSystemDialog::context() const {
142   // Intentional No-op.
143   return NULL;
144 }
145
146 }  // namespace printing
147