diff options
Diffstat (limited to 'src/core/printing/printing_message_filter_qt.cpp')
-rw-r--r-- | src/core/printing/printing_message_filter_qt.cpp | 98 |
1 files changed, 27 insertions, 71 deletions
diff --git a/src/core/printing/printing_message_filter_qt.cpp b/src/core/printing/printing_message_filter_qt.cpp index c95e334d8..8d6833dce 100644 --- a/src/core/printing/printing_message_filter_qt.cpp +++ b/src/core/printing/printing_message_filter_qt.cpp @@ -46,20 +46,14 @@ #include "web_engine_context.h" -#include <string> - #include "base/bind.h" #include "chrome/browser/printing/print_job_manager.h" #include "chrome/browser/printing/printer_query.h" #include "components/printing/browser/print_manager_utils.h" #include "components/printing/common/print_messages.h" #include "content/public/browser/browser_thread.h" -#include "content/public/browser/render_view_host.h" -#include "content/public/browser/web_contents.h" #include "content/public/common/child_process_host.h" -using content::BrowserThread; - namespace QtWebEngineCore { PrintingMessageFilterQt::PrintingMessageFilterQt(int render_process_id) @@ -72,15 +66,14 @@ PrintingMessageFilterQt::PrintingMessageFilterQt(int render_process_id) PrintingMessageFilterQt::~PrintingMessageFilterQt() { } -void PrintingMessageFilterQt::OverrideThreadForMessage( - const IPC::Message& message, BrowserThread::ID* thread) { +void PrintingMessageFilterQt::OnDestruct() const +{ + content::BrowserThread::DeleteOnUIThread::Destruct(this); } bool PrintingMessageFilterQt::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(PrintingMessageFilterQt, message) - IPC_MESSAGE_HANDLER_DELAY_REPLY(PrintHostMsg_GetDefaultPrintSettings, - OnGetDefaultPrintSettings) IPC_MESSAGE_HANDLER_DELAY_REPLY(PrintHostMsg_ScriptedPrint, OnScriptedPrint) IPC_MESSAGE_HANDLER_DELAY_REPLY(PrintHostMsg_UpdatePrintSettings, OnUpdatePrintSettings) @@ -90,54 +83,8 @@ bool PrintingMessageFilterQt::OnMessageReceived(const IPC::Message& message) { return handled; } -void PrintingMessageFilterQt::OnGetDefaultPrintSettings(IPC::Message* reply_msg) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - std::unique_ptr<printing::PrinterQuery> printer_query; - - printer_query = queue_->PopPrinterQuery(0); - if (!printer_query) { - printer_query = - queue_->CreatePrinterQuery(render_process_id_, reply_msg->routing_id()); - } - - // Loads default settings. This is asynchronous, only the IPC message sender - // will hang until the settings are retrieved. - printer_query->GetSettings( - printing::PrinterQuery::GetSettingsAskParam::DEFAULTS, - 0, - false, - printing::mojom::MarginType::kDefaultMargins, - false, - false, - base::BindOnce(&PrintingMessageFilterQt::OnGetDefaultPrintSettingsReply, - this, - std::move(printer_query), - reply_msg)); -} - -void PrintingMessageFilterQt::OnGetDefaultPrintSettingsReply(std::unique_ptr<printing::PrinterQuery> printer_query, - IPC::Message *reply_msg) -{ - printing::mojom::PrintParams params; - if (printer_query && printer_query->last_status() == printing::PrintingContext::OK) { - printing::RenderParamsFromPrintSettings(printer_query->settings(), ¶ms); - params.document_cookie = printer_query->cookie(); - } - PrintHostMsg_GetDefaultPrintSettings::WriteReplyParams(reply_msg, params); - Send(reply_msg); - // If printing was enabled. - if (printer_query) { - // If user hasn't cancelled. - if (printer_query->cookie() && printer_query->settings().dpi()) { - queue_->QueuePrinterQuery(std::move(printer_query)); - } else { - printer_query->StopWorker(); - } - } -} - void PrintingMessageFilterQt::OnScriptedPrint( - const PrintHostMsg_ScriptedPrint_Params& params, + const printing::mojom::ScriptedPrintParams& params, IPC::Message* reply_msg) { std::unique_ptr<printing::PrinterQuery> printer_query = queue_->PopPrinterQuery(params.cookie); @@ -161,19 +108,19 @@ void PrintingMessageFilterQt::OnScriptedPrint( void PrintingMessageFilterQt::OnScriptedPrintReply( std::unique_ptr<printing::PrinterQuery> printer_query, IPC::Message* reply_msg) { - PrintMsg_PrintPages_Params params; - + printing::mojom::PrintPagesParams params; + params.params = printing::mojom::PrintParams::New(); if (printer_query->last_status() != printing::PrintingContext::OK || !printer_query->settings().dpi()) { - params.Reset(); + params.params.reset(); } else { - RenderParamsFromPrintSettings(printer_query->settings(), ¶ms.params); - params.params.document_cookie = printer_query->cookie(); + RenderParamsFromPrintSettings(printer_query->settings(), params.params.get()); + params.params->document_cookie = printer_query->cookie(); params.pages = printing::PageRange::GetPages(printer_query->settings().ranges()); } PrintHostMsg_ScriptedPrint::WriteReplyParams(reply_msg, params); Send(reply_msg); - if (!params.params.dpi.IsEmpty() && params.params.document_cookie) { + if (!params.params->dpi.IsEmpty() && params.params->document_cookie) { queue_->QueuePrinterQuery(std::move(printer_query)); } else { printer_query->StopWorker(); @@ -183,13 +130,21 @@ void PrintingMessageFilterQt::OnScriptedPrintReply( void PrintingMessageFilterQt::OnUpdatePrintSettings(int document_cookie, base::Value job_settings, IPC::Message* reply_msg) { - std::unique_ptr<printing::PrinterQuery> printer_query; - printer_query = queue_->PopPrinterQuery(document_cookie); + if (!job_settings.is_dict() || + !job_settings.FindIntKey(printing::kSettingPrinterType)) { + // Reply with null query. + OnUpdatePrintSettingsReply(nullptr, reply_msg); + return; + } + + std::unique_ptr<printing::PrinterQuery> printer_query = + queue_->PopPrinterQuery(document_cookie); if (!printer_query.get()) { printer_query = queue_->CreatePrinterQuery( content::ChildProcessHost::kInvalidUniqueID, MSG_ROUTING_NONE); } - printer_query->SetSettings( + auto* printer_query_ptr = printer_query.get(); + printer_query_ptr->SetSettings( std::move(job_settings), base::BindOnce(&PrintingMessageFilterQt::OnUpdatePrintSettingsReply, this, std::move(printer_query), reply_msg)); @@ -197,13 +152,14 @@ void PrintingMessageFilterQt::OnUpdatePrintSettings(int document_cookie, void PrintingMessageFilterQt::OnUpdatePrintSettingsReply(std::unique_ptr<printing::PrinterQuery> printer_query, IPC::Message* reply_msg) { - PrintMsg_PrintPages_Params params; + printing::mojom::PrintPagesParams params; + params.params = printing::mojom::PrintParams::New(); if (!printer_query.get() || printer_query->last_status() != printing::PrintingContext::OK) { - params.Reset(); + params.params.reset(); } else { - RenderParamsFromPrintSettings(printer_query->settings(), ¶ms.params); - params.params.document_cookie = printer_query->cookie(); + RenderParamsFromPrintSettings(printer_query->settings(), params.params.get()); + params.params->document_cookie = printer_query->cookie(); params.pages = printing::PageRange::GetPages(printer_query->settings().ranges()); } @@ -223,7 +179,7 @@ void PrintingMessageFilterQt::OnUpdatePrintSettingsReply(std::unique_ptr<printin } } -void PrintingMessageFilterQt::OnCheckForCancel(const PrintHostMsg_PreviewIds& ids, +void PrintingMessageFilterQt::OnCheckForCancel(const printing::mojom::PreviewIds& ids, bool* cancel) { *cancel = false; } |