X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=printing%2Fprinting_context.h;h=c753f04d8b73a51cb7e05dcdb86afc0e981e7a71;hb=9cac7d9c6f748f72a6979f904aacc72d1dc5821a;hp=6a5a7c90ef5ba82837095c7bb934881b108797f7;hpb=c32dc2689dccb948ad9c26d78f47d18b8a433ecb;p=platform%2Fframework%2Fweb%2Fchromium-efl.git diff --git a/printing/printing_context.h b/printing/printing_context.h index 6a5a7c9..c753f04 100644 --- a/printing/printing_context.h +++ b/printing/printing_context.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright 2011 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -8,22 +8,31 @@ #include #include -#include "base/callback.h" -#include "base/macros.h" -#include "base/strings/string16.h" +#include "base/functional/callback.h" +#include "base/memory/raw_ptr.h" #include "base/values.h" #include "build/build_config.h" +#include "printing/buildflags/buildflags.h" +#include "printing/mojom/print.mojom.h" #include "printing/native_drawing_context.h" #include "printing/print_settings.h" #include "ui/gfx/native_widget_types.h" namespace printing { +class MetafilePlayer; +class PrintingContextFactoryForTest; + +#if BUILDFLAG(IS_WIN) +class PageSetup; +class PrintedPage; +#endif + // An abstraction of a printer context, implemented by objects that describe the // user selected printing context. This includes the OS-dependent UI to ask the // user about the print settings. Concrete implementations directly talk to the // printer and manage the document and page breaks. -class PRINTING_EXPORT PrintingContext { +class COMPONENT_EXPORT(PRINTING) PrintingContext { public: // Printing context delegate. class Delegate { @@ -38,24 +47,36 @@ class PRINTING_EXPORT PrintingContext { virtual std::string GetAppLocale() = 0; }; - // Tri-state result for user behavior-dependent functions. - enum Result { - OK, - CANCEL, - FAILED, + struct PrinterSettings { +#if BUILDFLAG(IS_MAC) + // True if the to-be-printed PDF is going to be opened in external + // preview. Used by macOS only to open Preview.app. + bool external_preview; +#endif + + // Whether to show the system dialog. + bool show_system_dialog; + +#if BUILDFLAG(IS_WIN) + // If showing the system dialog, the number of pages in the to-be-printed + // PDF. Only used on Windows. + int page_count; +#endif }; + PrintingContext(const PrintingContext&) = delete; + PrintingContext& operator=(const PrintingContext&) = delete; virtual ~PrintingContext(); // Callback of AskUserForSettings, used to notify the PrintJobWorker when // print settings are available. - using PrintSettingsCallback = base::OnceCallback; + using PrintSettingsCallback = base::OnceCallback; // Asks the user what printer and format should be used to print. Updates the // context with the select device settings. The result of the call is returned // in the callback. This is necessary for Linux, which only has an // asynchronous printing API. - // On Android, when |is_scripted| is true, calling it initiates a full + // On Android, when `is_scripted` is true, calling it initiates a full // printing flow from the framework's PrintManager. // (see https://codereview.chromium.org/740983002/) virtual void AskUserForSettings(int max_pages, @@ -65,48 +86,59 @@ class PRINTING_EXPORT PrintingContext { // Selects the user's default printer and format. Updates the context with the // default device settings. - virtual Result UseDefaultSettings() = 0; + virtual mojom::ResultCode UseDefaultSettings() = 0; - // Updates the context with PDF printer settings. - Result UsePdfSettings(); + // Updates the context with PDF printer settings. The PDF settings are + // guaranteed to be valid. + void UsePdfSettings(); // Returns paper size to be used for PDF or Cloud Print in device units. virtual gfx::Size GetPdfPaperSizeDeviceUnits() = 0; // Updates printer settings. - // |external_preview| is true if pdf is going to be opened in external - // preview. Used by MacOS only now to open Preview.app. - virtual Result UpdatePrinterSettings(bool external_preview, - bool show_system_dialog, - int page_count) = 0; + virtual mojom::ResultCode UpdatePrinterSettings( + const PrinterSettings& printer_settings) = 0; - // Updates Print Settings. |job_settings| contains all print job - // settings information. - Result UpdatePrintSettings(base::Value job_settings); + // Updates Print Settings. `job_settings` contains all print job settings + // information. + mojom::ResultCode UpdatePrintSettings(base::Value::Dict job_settings); -#if defined(OS_CHROMEOS) +#if BUILDFLAG(IS_CHROMEOS) // Updates Print Settings. - Result UpdatePrintSettingsFromPOD( + mojom::ResultCode UpdatePrintSettingsFromPOD( std::unique_ptr job_settings); #endif + // Sets the print settings to `settings`. + void SetPrintSettings(const PrintSettings& settings); + + // Set the printable area in print settings to be the default printable area. + // Intended to be used only for virtual printers. + void SetDefaultPrintableAreaForVirtualPrinters(); + // Does platform specific setup of the printer before the printing. Signal the // printer that a document is about to be spooled. // Warning: This function enters a message loop. That may cause side effects // like IPC message processing! Some printers have side-effects on this call // like virtual printers that ask the user for the path of the saved document; // for example a PDF printer. - virtual Result NewDocument(const base::string16& document_name) = 0; + virtual mojom::ResultCode NewDocument( + const std::u16string& document_name) = 0; - // Starts a new page. - virtual Result NewPage() = 0; +#if BUILDFLAG(IS_WIN) + // Renders a page. + virtual mojom::ResultCode RenderPage(const PrintedPage& page, + const PageSetup& page_setup) = 0; +#endif - // Closes the printed page. - virtual Result PageDone() = 0; + // Prints the document contained in `metafile`. + virtual mojom::ResultCode PrintDocument(const MetafilePlayer& metafile, + const PrintSettings& settings, + uint32_t num_pages) = 0; // Closes the printing job. After this call the object is ready to start a new // document. - virtual Result DocumentDone() = 0; + virtual mojom::ResultCode DocumentDone() = 0; // Cancels printing. Can be used in a multi-threaded context. Takes effect // immediately. @@ -118,33 +150,66 @@ class PRINTING_EXPORT PrintingContext { // Returns the native context used to print. virtual printing::NativeDrawingContext context() const = 0; - // Creates an instance of this object. Implementers of this interface should - // implement this method to create an object of their implementation. - static std::unique_ptr Create(Delegate* delegate); +#if BUILDFLAG(IS_WIN) + // Initializes with predefined settings. + virtual mojom::ResultCode InitWithSettingsForTest( + std::unique_ptr settings) = 0; +#endif + + // Creates an instance of this object. + static std::unique_ptr Create(Delegate* delegate, + bool skip_system_calls); + + // Test method for generating printing contexts for testing. This overrides + // the platform-specific implementations of CreateImpl(). + static void SetPrintingContextFactoryForTest( + PrintingContextFactoryForTest* factory); - void set_margin_type(MarginType type); + void set_margin_type(mojom::MarginType type); void set_is_modifiable(bool is_modifiable); const PrintSettings& settings() const; std::unique_ptr TakeAndResetSettings(); + bool PrintingAborted() const { return abort_printing_; } + int job_id() const { return job_id_; } protected: explicit PrintingContext(Delegate* delegate); + // Creates an instance of this object. Implementers of this interface should + // implement this method to create an object of their implementation. + static std::unique_ptr CreateImpl(Delegate* delegate, + bool skip_system_calls); + // Reinitializes the settings for object reuse. void ResetSettings(); + // Determine if system calls should be skipped by this instance. + bool skip_system_calls() const { +#if BUILDFLAG(ENABLE_OOP_PRINTING) + return skip_system_calls_; +#else + return false; +#endif + } + +#if BUILDFLAG(ENABLE_OOP_PRINTING) + // Make the one-way adjustment to have all system calls skipped by this + // `PrintingContext` instance. + void set_skip_system_calls() { skip_system_calls_ = true; } +#endif + // Does bookkeeping when an error occurs. - PrintingContext::Result OnError(); + virtual mojom::ResultCode OnError(); // Complete print context settings. std::unique_ptr settings_; // Printing context delegate. - Delegate* const delegate_; + const raw_ptr delegate_; // Is a print job being done. volatile bool in_print_job_; @@ -156,7 +221,11 @@ class PRINTING_EXPORT PrintingContext { int job_id_; private: - DISALLOW_COPY_AND_ASSIGN(PrintingContext); +#if BUILDFLAG(ENABLE_OOP_PRINTING) + // If this instance of PrintingContext should skip making any system calls + // to the operating system. + bool skip_system_calls_ = false; +#endif }; } // namespace printing