summaryrefslogtreecommitdiffstats
path: root/src/core/printing/print_view_manager_base_qt.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-02-23 14:43:14 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2021-04-15 18:11:44 +0200
commit027e7e574e7a4488d47cd4133e98d518210b1e56 (patch)
treec45f05457509b7d99c39a3889119c04c4aee39e3 /src/core/printing/print_view_manager_base_qt.cpp
parent2dce0008ce53d27d281ad2dc00eb32d25ae5fc84 (diff)
Adaptations for Chromium 88
Change-Id: Ie66e95dbb9fbcafe961bb98d5c277f8c32d66b96 Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
Diffstat (limited to 'src/core/printing/print_view_manager_base_qt.cpp')
-rw-r--r--src/core/printing/print_view_manager_base_qt.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/core/printing/print_view_manager_base_qt.cpp b/src/core/printing/print_view_manager_base_qt.cpp
index ad35209f1..3e740726a 100644
--- a/src/core/printing/print_view_manager_base_qt.cpp
+++ b/src/core/printing/print_view_manager_base_qt.cpp
@@ -132,6 +132,66 @@ void GetDefaultPrintSettingsOnIO(printing::mojom::PrintManagerHost::GetDefaultPr
std::move(printer_query), std::move(callback)));
}
+// Runs |callback| with |params| to reply to
+// mojom::PrintManagerHost::UpdatePrintSettings.
+void UpdatePrintSettingsReply(printing::mojom::PrintManagerHost::UpdatePrintSettingsCallback callback,
+ printing::mojom::PrintPagesParamsPtr params, bool canceled)
+{
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ if (!params) {
+ // Fills |params| with initial values.
+ params = printing::mojom::PrintPagesParams::New();
+ params->params = printing::mojom::PrintParams::New();
+ }
+ std::move(callback).Run(std::move(params), canceled);
+}
+
+void UpdatePrintSettingsReplyOnIO(scoped_refptr<printing::PrintQueriesQueue> queue,
+ std::unique_ptr<printing::PrinterQuery> printer_query,
+ printing::mojom::PrintManagerHost::UpdatePrintSettingsCallback callback,
+ int process_id, int routing_id)
+{
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+ DCHECK(printer_query);
+ auto params = printing::mojom::PrintPagesParams::New();
+ params->params = printing::mojom::PrintParams::New();
+ if (printer_query->last_status() == printing::PrintingContext::OK) {
+ RenderParamsFromPrintSettings(printer_query->settings(), params->params.get());
+ params->params->document_cookie = printer_query->cookie();
+ params->pages = printing::PageRange::GetPages(printer_query->settings().ranges());
+ }
+ bool canceled = printer_query->last_status() == printing::PrintingContext::CANCEL;
+
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE,
+ base::BindOnce(&UpdatePrintSettingsReply, std::move(callback), std::move(params), canceled));
+
+ if (printer_query->cookie() && printer_query->settings().dpi()) {
+ queue->QueuePrinterQuery(std::move(printer_query));
+ } else {
+ printer_query->StopWorker();
+ }
+}
+
+void UpdatePrintSettingsOnIO(int32_t cookie,
+ printing::mojom::PrintManagerHost::UpdatePrintSettingsCallback callback,
+ scoped_refptr<printing::PrintQueriesQueue> queue,
+ base::Value job_settings,
+ int process_id, int routing_id)
+{
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+ std::unique_ptr<printing::PrinterQuery> printer_query = queue->PopPrinterQuery(cookie);
+ if (!printer_query)
+ printer_query = queue->CreatePrinterQuery(content::ChildProcessHost::kInvalidUniqueID, MSG_ROUTING_NONE);
+
+ auto *printer_query_ptr = printer_query.get();
+ printer_query_ptr->SetSettings(
+ std::move(job_settings),
+ base::BindOnce(&UpdatePrintSettingsReplyOnIO,
+ queue, std::move(printer_query), std::move(callback),
+ process_id, routing_id));
+}
+
} // namespace
PrintViewManagerBaseQt::PrintViewManagerBaseQt(content::WebContents *contents)
@@ -602,4 +662,25 @@ void PrintViewManagerBaseQt::SendPrintingEnabled(bool enabled, content::RenderFr
GetPrintRenderFrame(rfh)->SetPrintingEnabled(enabled);
}
+void PrintViewManagerBaseQt::UpdatePrintSettings(int32_t cookie, base::Value job_settings,
+ UpdatePrintSettingsCallback callback)
+{
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+ if (!job_settings.FindIntKey(printing::kSettingPrinterType)) {
+ UpdatePrintSettingsReply(std::move(callback), nullptr, false);
+ return;
+ }
+
+ content::RenderFrameHost *render_frame_host =
+ print_manager_host_receivers_.GetCurrentTargetFrame();
+
+ content::GetIOThreadTaskRunner({})->PostTask(
+ FROM_HERE,
+ base::BindOnce(&UpdatePrintSettingsOnIO, cookie, std::move(callback),
+ m_printerQueriesQueue, std::move(job_settings),
+ render_frame_host->GetProcess()->GetID(),
+ render_frame_host->GetRoutingID()));
+}
+
} // namespace QtWebEngineCore