diff options
Diffstat (limited to 'src/core/printing')
-rw-r--r-- | src/core/printing/print_view_manager_qt.cpp | 37 | ||||
-rw-r--r-- | src/core/printing/print_view_manager_qt.h | 11 |
2 files changed, 34 insertions, 14 deletions
diff --git a/src/core/printing/print_view_manager_qt.cpp b/src/core/printing/print_view_manager_qt.cpp index 4c82faee8..ebaad9a80 100644 --- a/src/core/printing/print_view_manager_qt.cpp +++ b/src/core/printing/print_view_manager_qt.cpp @@ -66,6 +66,7 @@ #include "printing/metafile_skia.h" #include "printing/print_job_constants.h" #include "printing/units.h" +#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" namespace { @@ -120,10 +121,7 @@ static base::DictionaryValue *createPrintSettings() printSettings->SetInteger(printing::kPreviewRequestID, internalRequestId); // The following are standard settings that Chromium expects to be set. - printSettings->SetBoolean(printing::kSettingPrintToPDF, true); - printSettings->SetBoolean(printing::kSettingCloudPrintDialog, false); - printSettings->SetBoolean(printing::kSettingPrintWithPrivet, false); - printSettings->SetBoolean(printing::kSettingPrintWithExtension, false); + printSettings->SetInteger(printing::kSettingPrinterType, printing::kPdfPrinter); printSettings->SetInteger(printing::kSettingDpiHorizontal, printing::kPointsPerInch); printSettings->SetInteger(printing::kSettingDpiVertical, printing::kPointsPerInch); @@ -272,15 +270,9 @@ bool PrintViewManagerQt::PrintToPDFInternal(const QPageLayout &pageLayout, return false; content::RenderFrameHost* rfh = web_contents()->GetMainFrame(); - auto message = std::make_unique<PrintMsg_InitiatePrintPreview>( - rfh->GetRoutingID(), false); + GetPrintRenderFrame(rfh)->InitiatePrintPreview(nullptr, false); DCHECK(!m_printPreviewRfh); - - if (!rfh->Send(message.release())) { - return false; - } - m_printPreviewRfh = rfh; return true; } @@ -324,6 +316,24 @@ void PrintViewManagerQt::RenderFrameDeleted(content::RenderFrameHost *render_fra if (render_frame_host == m_printPreviewRfh) PrintPreviewDone(); PrintViewManagerBaseQt::RenderFrameDeleted(render_frame_host); + m_printRenderFrames.erase(render_frame_host); +} + +const mojo::AssociatedRemote<printing::mojom::PrintRenderFrame> &PrintViewManagerQt::GetPrintRenderFrame(content::RenderFrameHost *rfh) +{ + auto it = m_printRenderFrames.find(rfh); + if (it == m_printRenderFrames.end()) { + mojo::AssociatedRemote<printing::mojom::PrintRenderFrame> remote; + rfh->GetRemoteAssociatedInterfaces()->GetInterface(&remote); + it = m_printRenderFrames.insert(std::make_pair(rfh, std::move(remote))).first; + } else if (it->second.is_bound() && !it->second.is_connected()) { + // When print preview is closed, the remote is disconnected from the + // receiver. Reset and bind the remote before using it again. + it->second.reset(); + rfh->GetRemoteAssociatedInterfaces()->GetInterface(&it->second); + } + + return it->second; } void PrintViewManagerQt::resetPdfState() @@ -419,7 +429,7 @@ void PrintViewManagerQt::OnSetupScriptedPrintPreview(content::RenderFrameHost* r return; // close preview - rfh->Send(new PrintMsg_ClosePrintPreviewDialog(rfh->GetRoutingID())); + GetPrintRenderFrame(rfh)->OnPrintPreviewDialogClosed(); client->printRequested(); } @@ -431,8 +441,7 @@ void PrintViewManagerQt::OnShowScriptedPrintPreview(content::RenderFrameHost* rf } void PrintViewManagerQt::PrintPreviewDone() { - m_printPreviewRfh->Send(new PrintMsg_ClosePrintPreviewDialog( - m_printPreviewRfh->GetRoutingID())); + GetPrintRenderFrame(m_printPreviewRfh)->OnPrintPreviewDialogClosed(); m_printPreviewRfh = nullptr; } diff --git a/src/core/printing/print_view_manager_qt.h b/src/core/printing/print_view_manager_qt.h index 14f2688dd..06c2f47ea 100644 --- a/src/core/printing/print_view_manager_qt.h +++ b/src/core/printing/print_view_manager_qt.h @@ -47,14 +47,17 @@ #include "print_view_manager_base_qt.h" #include "qtwebenginecoreglobal_p.h" + #include "base/memory/ref_counted.h" #include "base/strings/string16.h" #include "components/prefs/pref_member.h" #include "components/printing/browser/print_manager.h" +#include "components/printing/common/print.mojom.h" #include "components/printing/common/print_messages.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" #include "content/public/browser/web_contents_user_data.h" +#include "mojo/public/cpp/bindings/associated_remote.h" #include <QSharedPointer> @@ -132,6 +135,11 @@ protected: private: void resetPdfState(); + + // Helper method to fetch the PrintRenderFrame associated remote interface + // pointer. + const mojo::AssociatedRemote<printing::mojom::PrintRenderFrame> &GetPrintRenderFrame(content::RenderFrameHost *rfh); + // content::WebContentsObserver implementation. void DidStartLoading() override; void PrintPreviewDone(); @@ -143,6 +151,9 @@ private: PrintToPDFCallback m_pdfPrintCallback; PrintToPDFFileCallback m_pdfSaveCallback; std::unique_ptr<base::DictionaryValue> m_printSettings; + + std::map<content::RenderFrameHost*,mojo::AssociatedRemote<printing::mojom::PrintRenderFrame>> m_printRenderFrames; + friend class content::WebContentsUserData<PrintViewManagerQt>; DISALLOW_COPY_AND_ASSIGN(PrintViewManagerQt); struct FrameDispatchHelper; |