// Copyright (c) 2014 The Chromium Embedded Framework Authors. // Portions copyright (c) 2012 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. #ifndef LIBCEF_BROWSER_PRINTING_PRINT_DIALOG_LINUX_H_ #define LIBCEF_BROWSER_PRINTING_PRINT_DIALOG_LINUX_H_ #include "include/cef_print_handler.h" #include "base/compiler_specific.h" #include "base/files/file_path.h" #include "base/memory/ref_counted.h" #include "base/sequenced_task_runner_helpers.h" #include "content/public/browser/browser_thread.h" #include "printing/print_dialog_gtk_interface.h" #include "printing/printing_context_linux.h" namespace printing { class MetafilePlayer; class PrintSettings; } using printing::PrintingContextLinux; // Needs to be freed on the UI thread to clean up its member variables. class CefPrintDialogLinux : public printing::PrintDialogGtkInterface, public base::RefCountedThreadSafe< CefPrintDialogLinux, content::BrowserThread::DeleteOnUIThread> { public: // Creates and returns a print dialog. static printing::PrintDialogGtkInterface* CreatePrintDialog( PrintingContextLinux* context); // printing::CefPrintDialogLinuxInterface implementation. virtual void UseDefaultSettings() OVERRIDE; virtual bool UpdateSettings(printing::PrintSettings* settings) OVERRIDE; virtual void ShowDialog( gfx::NativeView parent_view, bool has_selection, const PrintingContextLinux::PrintSettingsCallback& callback) OVERRIDE; virtual void PrintDocument(const printing::MetafilePlayer& metafile, const base::string16& document_name) OVERRIDE; virtual void AddRefToDialog() OVERRIDE; virtual void ReleaseDialog() OVERRIDE; private: friend struct content::BrowserThread::DeleteOnThread< content::BrowserThread::UI>; friend class base::DeleteHelper; friend class CefPrintDialogCallbackImpl; friend class CefPrintJobCallbackImpl; explicit CefPrintDialogLinux(PrintingContextLinux* context); virtual ~CefPrintDialogLinux(); void SetHandler(); void ReleaseHandler(); bool UpdateSettings(printing::PrintSettings* settings, bool get_defaults); // Prints document named |document_name|. void SendDocumentToPrinter(const base::string16& document_name); // Handles print dialog response. void OnPrintContinue(CefRefPtr settings); void OnPrintCancel(); // Handles print job response. void OnJobCompleted(); CefRefPtr handler_; // Printing dialog callback. PrintingContextLinux::PrintSettingsCallback callback_; PrintingContextLinux* context_; base::FilePath path_to_pdf_; DISALLOW_COPY_AND_ASSIGN(CefPrintDialogLinux); }; #endif // LIBCEF_BROWSER_PRINTING_PRINT_DIALOG_LINUX_H_