| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the QtWebEngine module of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:LGPL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU Lesser General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Lesser |
| ** General Public License version 3 as published by the Free Software |
| ** Foundation and appearing in the file LICENSE.LGPL3 included in the |
| ** packaging of this file. Please review the following information to |
| ** ensure the GNU Lesser General Public License version 3 requirements |
| ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU |
| ** General Public License version 2.0 or (at your option) the GNU General |
| ** Public license version 3 or any later version approved by the KDE Free |
| ** Qt Foundation. The licenses are as published by the Free Software |
| ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 |
| ** included in the packaging of this file. Please review the following |
| ** information to ensure the GNU General Public License requirements will |
| ** be met: https://www.gnu.org/licenses/gpl-2.0.html and |
| ** https://www.gnu.org/licenses/gpl-3.0.html. |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| // Copyright 2013 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.Chromium file. |
| |
| #ifndef PRINT_VIEW_MANAGER_BASE_QT_H |
| #define PRINT_VIEW_MANAGER_BASE_QT_H |
| |
| #include "base/memory/ref_counted_memory.h" |
| #include "base/strings/string16.h" |
| #include "components/prefs/pref_member.h" |
| #include "components/printing/browser/print_manager.h" |
| #include "content/public/browser/notification_observer.h" |
| #include "content/public/browser/notification_registrar.h" |
| |
| struct PrintHostMsg_DidPrintDocument_Params; |
| |
| namespace base { |
| class RefCountedBytes; |
| } |
| |
| namespace content { |
| class RenderFrameHost; |
| class RenderViewHost; |
| } |
| |
| namespace printing { |
| class JobEventDetails; |
| class MetafilePlayer; |
| class PrintJob; |
| class PrintJobWorkerOwner; |
| class PrintQueriesQueue; |
| class PrintedDocument; |
| class PrinterQuery; |
| } |
| |
| namespace QtWebEngineCore { |
| class PrintViewManagerBaseQt : public content::NotificationObserver |
| , public printing::PrintManager |
| { |
| public: |
| ~PrintViewManagerBaseQt() override; |
| |
| // Whether printing is enabled or not. |
| void UpdatePrintingEnabled(); |
| |
| virtual base::string16 RenderSourceName(); |
| |
| protected: |
| explicit PrintViewManagerBaseQt(content::WebContents*); |
| |
| void SetPrintingRFH(content::RenderFrameHost* rfh); |
| |
| // content::WebContentsObserver implementation. |
| // Cancels the print job. |
| void NavigationStopped() override; |
| |
| // content::WebContentsObserver implementation. |
| void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override; |
| bool OnMessageReceived(const IPC::Message& message, |
| content::RenderFrameHost* render_frame_host) override; |
| |
| // IPC Message handlers. |
| void OnDidPrintDocument(content::RenderFrameHost* render_frame_host, |
| const PrintHostMsg_DidPrintDocument_Params& params); |
| void OnShowInvalidPrinterSettingsError(); |
| |
| // Processes a NOTIFY_PRINT_JOB_EVENT notification. |
| void OnNotifyPrintJobEvent(const printing::JobEventDetails& event_details); |
| |
| // content::NotificationObserver implementation. |
| void Observe(int, |
| const content::NotificationSource&, |
| const content::NotificationDetails&) override; |
| void StopWorker(int document_cookie); |
| |
| // In the case of Scripted Printing, where the renderer is controlling the |
| // control flow, print_job_ is initialized whenever possible. No-op is |
| // print_job_ is initialized. |
| bool OpportunisticallyCreatePrintJob(int cookie); |
| |
| // Requests the RenderView to render all the missing pages for the print job. |
| // No-op if no print job is pending. Returns true if at least one page has |
| // been requested to the renderer. |
| bool RenderAllMissingPagesNow(); |
| |
| // Checks that synchronization is correct and a print query exists for |
| // |cookie|. If so, returns the document associated with the cookie. |
| printing::PrintedDocument* GetDocument(int cookie); |
| |
| // Starts printing a document with data given in |print_data|. |print_data| |
| // must successfully initialize a metafile. |document| is the printed |
| // document associated with the print job. Returns true if successful. |
| void PrintDocument(printing::PrintedDocument *document, |
| const scoped_refptr<base::RefCountedMemory> &print_data, |
| const gfx::Size &page_size, |
| const gfx::Rect &content_area, |
| const gfx::Point &offsets); |
| |
| // Quits the current message loop if these conditions hold true: a document is |
| // loaded and is complete and waiting_for_pages_to_be_rendered_ is true. This |
| // function is called in DidPrintDocument() or on ALL_PAGES_REQUESTED |
| // notification. The inner message loop is created was created by |
| // RenderAllMissingPagesNow(). |
| void ShouldQuitFromInnerMessageLoop(); |
| |
| bool RunInnerMessageLoop(); |
| |
| void TerminatePrintJob(bool cancel); |
| void DisconnectFromCurrentPrintJob(); |
| |
| bool CreateNewPrintJob(std::unique_ptr<printing::PrinterQuery> query); |
| void ReleasePrintJob(); |
| void ReleasePrinterQuery(); |
| |
| private: |
| // Helper method for UpdatePrintingEnabled(). |
| void SendPrintingEnabled(bool enabled, content::RenderFrameHost* rfh); |
| // content::WebContentsObserver implementation. |
| void DidStartLoading() override; |
| |
| private: |
| content::NotificationRegistrar m_registrar; |
| scoped_refptr<printing::PrintJob> m_printJob; |
| bool m_isInsideInnerMessageLoop; |
| bool m_didPrintingSucceed; |
| scoped_refptr<printing::PrintQueriesQueue> m_printerQueriesQueue; |
| // The current RFH that is printing with a system printing dialog. |
| content::RenderFrameHost *m_printingRFH; |
| DISALLOW_COPY_AND_ASSIGN(PrintViewManagerBaseQt); |
| }; |
| |
| } // namespace QtWebEngineCore |
| #endif // PRINT_VIEW_MANAGER_BASE_QT_H |
| |