Enable chrome with aura for tizen
[platform/framework/web/chromium-efl.git] / printing / printing_context_linux.cc
1 // Copyright 2014 The Chromium Authors
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_linux.h"
6
7 #include <memory>
8 #include <utility>
9
10 #include "base/check.h"
11 #include "base/notreached.h"
12 #include "base/values.h"
13 #include "build/buildflag.h"
14 #include "printing/buildflags/buildflags.h"
15 #include "printing/metafile.h"
16 #include "printing/mojom/print.mojom.h"
17 #include "printing/print_dialog_linux_interface.h"
18 #include "printing/print_job_constants.h"
19 #include "printing/units.h"
20
21 // Avoid using LinuxUi on Fuchsia.
22 #if BUILDFLAG(IS_LINUX)
23 #include "ui/linux/linux_ui.h"
24 #endif
25
26 namespace printing {
27
28 // static
29 std::unique_ptr<PrintingContext> PrintingContext::CreateImpl(
30     Delegate* delegate,
31     bool skip_system_calls) {
32   auto context = std::make_unique<PrintingContextLinux>(delegate);
33 #if BUILDFLAG(ENABLE_OOP_PRINTING)
34   if (skip_system_calls)
35     context->set_skip_system_calls();
36 #endif
37   return context;
38 }
39
40 PrintingContextLinux::PrintingContextLinux(Delegate* delegate)
41     : PrintingContext(delegate), print_dialog_(nullptr) {}
42
43 PrintingContextLinux::~PrintingContextLinux() {
44   ReleaseContext();
45
46   if (print_dialog_)
47     print_dialog_->ReleaseDialog();
48 }
49
50 void PrintingContextLinux::AskUserForSettings(int max_pages,
51                                               bool has_selection,
52                                               bool is_scripted,
53                                               PrintSettingsCallback callback) {
54   if (!print_dialog_) {
55     // Can only get here if the renderer is sending bad messages.
56     // http://crbug.com/341777
57     NOTREACHED();
58     std::move(callback).Run(mojom::ResultCode::kFailed);
59     return;
60   }
61
62   print_dialog_->ShowDialog(delegate_->GetParentView(), has_selection,
63                             std::move(callback));
64 }
65
66 mojom::ResultCode PrintingContextLinux::UseDefaultSettings() {
67   DCHECK(!in_print_job_);
68
69   ResetSettings();
70
71 #if BUILDFLAG(IS_LINUX)
72   if (!ui::LinuxUi::instance())
73     return mojom::ResultCode::kSuccess;
74
75   if (!print_dialog_)
76     print_dialog_ = ui::LinuxUi::instance()->CreatePrintDialog(this);
77   print_dialog_->UseDefaultSettings();
78 #endif
79
80   return mojom::ResultCode::kSuccess;
81 }
82
83 gfx::Size PrintingContextLinux::GetPdfPaperSizeDeviceUnits() {
84 #if BUILDFLAG(IS_LINUX)
85   if (ui::LinuxUi::instance())
86     return ui::LinuxUi::instance()->GetPdfPaperSize(this);
87 #endif
88
89   return gfx::Size();
90 }
91
92 mojom::ResultCode PrintingContextLinux::UpdatePrinterSettings(
93     const PrinterSettings& printer_settings) {
94   DCHECK(!printer_settings.show_system_dialog);
95   DCHECK(!in_print_job_);
96
97 #if BUILDFLAG(IS_LINUX)
98   if (!ui::LinuxUi::instance())
99     return mojom::ResultCode::kSuccess;
100
101   if (!print_dialog_)
102     print_dialog_ = ui::LinuxUi::instance()->CreatePrintDialog(this);
103
104   // PrintDialogGtk::UpdateSettings() calls InitWithSettings() so settings_ will
105   // remain non-null after this line.
106   print_dialog_->UpdateSettings(std::move(settings_));
107   DCHECK(settings_);
108 #endif
109
110   return mojom::ResultCode::kSuccess;
111 }
112
113 void PrintingContextLinux::InitWithSettings(
114     std::unique_ptr<PrintSettings> settings) {
115   DCHECK(!in_print_job_);
116
117   settings_ = std::move(settings);
118 }
119
120 mojom::ResultCode PrintingContextLinux::NewDocument(
121     const std::u16string& document_name) {
122   DCHECK(!in_print_job_);
123   in_print_job_ = true;
124
125   // If this implementation is expanded to include system calls then such calls
126   // should be gated upon `skip_system_calls()`.
127
128   document_name_ = document_name;
129
130   return mojom::ResultCode::kSuccess;
131 }
132
133 mojom::ResultCode PrintingContextLinux::PrintDocument(
134     const MetafilePlayer& metafile,
135     const PrintSettings& settings,
136     uint32_t num_pages) {
137   if (abort_printing_)
138     return mojom::ResultCode::kCanceled;
139   DCHECK(in_print_job_);
140   DCHECK(print_dialog_);
141   // TODO(crbug.com/1252685)  Plumb error code back from
142   // `PrintDialogLinuxInterface`.
143   print_dialog_->PrintDocument(metafile, document_name_);
144   return mojom::ResultCode::kSuccess;
145 }
146
147 mojom::ResultCode PrintingContextLinux::DocumentDone() {
148   if (abort_printing_)
149     return mojom::ResultCode::kCanceled;
150   DCHECK(in_print_job_);
151
152   ResetSettings();
153   return mojom::ResultCode::kSuccess;
154 }
155
156 void PrintingContextLinux::Cancel() {
157   abort_printing_ = true;
158   in_print_job_ = false;
159 }
160
161 void PrintingContextLinux::ReleaseContext() {
162   // Intentional No-op.
163 }
164
165 printing::NativeDrawingContext PrintingContextLinux::context() const {
166   // Intentional No-op.
167   return nullptr;
168 }
169
170 }  // namespace printing