Index: printing/printing_context_no_system_dialog.cc |
diff --git a/printing/printing_context_no_system_dialog.cc b/printing/printing_context_no_system_dialog.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dac11d40d970a6bdc4859d09608518dcd363d921 |
--- /dev/null |
+++ b/printing/printing_context_no_system_dialog.cc |
@@ -0,0 +1,158 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "printing/printing_context_no_system_dialog.h" |
+ |
+#include <unicode/ulocdata.h> |
+ |
+#include "base/logging.h" |
+#include "base/values.h" |
+#include "printing/metafile.h" |
+#include "printing/print_job_constants.h" |
+#include "printing/units.h" |
+ |
+namespace printing { |
+ |
+// static |
+PrintingContext* PrintingContext::Create(const std::string& app_locale) { |
+ return static_cast<PrintingContext*>( |
+ new PrintingContextNoSystemDialog(app_locale)); |
+} |
+ |
+PrintingContextNoSystemDialog::PrintingContextNoSystemDialog( |
+ const std::string& app_locale) : PrintingContext(app_locale) { |
+} |
+ |
+PrintingContextNoSystemDialog::~PrintingContextNoSystemDialog() { |
+ ReleaseContext(); |
+} |
+ |
+void PrintingContextNoSystemDialog::AskUserForSettings( |
+ gfx::NativeView parent_view, |
+ int max_pages, |
+ bool has_selection, |
+ PrintSettingsCallback* callback) { |
+ // We don't want to bring up a dialog here. Ever. Just signal the callback. |
+ callback->Run(OK); |
+} |
+ |
+PrintingContext::Result PrintingContextNoSystemDialog::UseDefaultSettings() { |
+ DCHECK(!in_print_job_); |
+ |
+ ResetSettings(); |
+ // TODO(abodenha): Fetch these settings from the OS where possible. See |
+ // bug 102583. |
+ // TODO(sanjeevr): We need a better feedback loop between the cloud print |
+ // dialog and this code. |
+ int dpi = 300; |
+ gfx::Size physical_size_device_units; |
+ gfx::Rect printable_area_device_units; |
+ int32_t width = 0; |
+ int32_t height = 0; |
+ UErrorCode error = U_ZERO_ERROR; |
+ ulocdata_getPaperSize(app_locale_.c_str(), &height, &width, &error); |
+ if (error != U_ZERO_ERROR) { |
+ // If the call failed, assume a paper size of 8.5 x 11 inches. |
+ LOG(WARNING) << "ulocdata_getPaperSize failed, using 8.5 x 11, error: " |
+ << error; |
+ width = static_cast<int>(8.5 * dpi); |
+ height = static_cast<int>(11 * dpi); |
+ } else { |
+ // ulocdata_getPaperSize returns the width and height in mm. |
+ // Convert this to pixels based on the dpi. |
+ width = static_cast<int>(ConvertUnitDouble(width, 25.4, 1.0) * dpi); |
+ height = static_cast<int>(ConvertUnitDouble(height, 25.4, 1.0) * dpi); |
+ } |
+ |
+ physical_size_device_units.SetSize(width, height); |
+ |
+ // Assume full page is printable for now. |
+ printable_area_device_units.SetRect(0, 0, width, height); |
+ |
+ settings_.set_dpi(dpi); |
+ settings_.SetPrinterPrintableArea(physical_size_device_units, |
+ printable_area_device_units, |
+ dpi); |
+ |
+ return OK; |
+} |
+ |
+PrintingContext::Result PrintingContextNoSystemDialog::UpdatePrinterSettings( |
+ const DictionaryValue& job_settings, const PageRanges& ranges) { |
+ bool landscape = false; |
+ |
+ if (!job_settings.GetBoolean(kSettingLandscape, &landscape)) |
+ return OnError(); |
+ |
+ if (settings_.dpi() == 0) |
+ UseDefaultSettings(); |
+ |
+ settings_.SetOrientation(landscape); |
+ settings_.ranges = ranges; |
+ |
+ return OK; |
+} |
+ |
+PrintingContext::Result PrintingContextNoSystemDialog::InitWithSettings( |
+ const PrintSettings& settings) { |
+ DCHECK(!in_print_job_); |
+ |
+ settings_ = settings; |
+ |
+ return OK; |
+} |
+ |
+PrintingContext::Result PrintingContextNoSystemDialog::NewDocument( |
+ const string16& document_name) { |
+ DCHECK(!in_print_job_); |
+ in_print_job_ = true; |
+ |
+ return OK; |
+} |
+ |
+PrintingContext::Result PrintingContextNoSystemDialog::NewPage() { |
+ if (abort_printing_) |
+ return CANCEL; |
+ DCHECK(in_print_job_); |
+ |
+ // Intentional No-op. |
+ |
+ return OK; |
+} |
+ |
+PrintingContext::Result PrintingContextNoSystemDialog::PageDone() { |
+ if (abort_printing_) |
+ return CANCEL; |
+ DCHECK(in_print_job_); |
+ |
+ // Intentional No-op. |
+ |
+ return OK; |
+} |
+ |
+PrintingContext::Result PrintingContextNoSystemDialog::DocumentDone() { |
+ if (abort_printing_) |
+ return CANCEL; |
+ DCHECK(in_print_job_); |
+ |
+ ResetSettings(); |
+ return OK; |
+} |
+ |
+void PrintingContextNoSystemDialog::Cancel() { |
+ abort_printing_ = true; |
+ in_print_job_ = false; |
+} |
+ |
+void PrintingContextNoSystemDialog::ReleaseContext() { |
+ // Intentional No-op. |
+} |
+ |
+gfx::NativeDrawingContext PrintingContextNoSystemDialog::context() const { |
+ // Intentional No-op. |
+ return NULL; |
+} |
+ |
+} // namespace printing |
+ |