diff --git a/patches/common/chromium/printing.patch b/patches/common/chromium/printing.patch index 000e773550ad1..498ebc629f712 100644 --- a/patches/common/chromium/printing.patch +++ b/patches/common/chromium/printing.patch @@ -9,7 +9,7 @@ majority of changes originally come from these PRs: * https://github.com/electron/electron/pull/8596 diff --git a/chrome/browser/printing/print_job_worker.cc b/chrome/browser/printing/print_job_worker.cc -index 961e1560aa914942c01372c354059d6d6b72c50f..5e364fa6637e8453b0be701637c7d5b96aa77b7b 100644 +index 961e1560aa914942c01372c354059d6d6b72c50f..aa51b2b2b0e1950f7a660d48bda5e61ecea8951c 100644 --- a/chrome/browser/printing/print_job_worker.cc +++ b/chrome/browser/printing/print_job_worker.cc @@ -21,12 +21,12 @@ @@ -26,28 +26,8 @@ index 961e1560aa914942c01372c354059d6d6b72c50f..5e364fa6637e8453b0be701637c7d5b9 #include "printing/print_job_constants.h" #include "printing/printed_document.h" #include "printing/printing_utils.h" -@@ -265,10 +265,18 @@ void PrintJobWorker::GetSettingsDone(PrintingContext::Result result) { - // We can't use OnFailure() here since query_ does not support notifications. - - DCHECK(query_); -- query_->PostTask(FROM_HERE, -+ if (result == PrintingContext::CANCEL) { -+ print_job_->PostTask( -+ FROM_HERE, -+ base::BindOnce(&NotificationCallback, base::RetainedRef(print_job_), -+ JobEventDetails::USER_INIT_CANCELED, 0, -+ base::RetainedRef(document_))); -+ } else { -+ query_->PostTask(FROM_HERE, - base::BindOnce(&PrinterQuery::GetSettingsDone, - base::WrapRefCounted(query_), - printing_context_->settings(), result)); -+ } - } - - void PrintJobWorker::GetSettingsWithUI( diff --git a/chrome/browser/printing/print_view_manager_base.cc b/chrome/browser/printing/print_view_manager_base.cc -index 007b003dd58d44acd6e1351c237fca6463d90602..da7c14d03a740e5d2ca2099a15c6105b74c101b4 100644 +index 007b003dd58d44acd6e1351c237fca6463d90602..4ddbf18e335609623aba42cc39a7c977fe8c5229 100644 --- a/chrome/browser/printing/print_view_manager_base.cc +++ b/chrome/browser/printing/print_view_manager_base.cc @@ -27,10 +27,7 @@ @@ -141,31 +121,6 @@ index 007b003dd58d44acd6e1351c237fca6463d90602..da7c14d03a740e5d2ca2099a15c6105b #endif ReleasePrinterQuery(); -@@ -436,9 +441,12 @@ void PrintViewManagerBase::OnNotifyPrintJobEvent( - content::NotificationService::NoDetails()); - break; - } -- case JobEventDetails::USER_INIT_DONE: -- case JobEventDetails::DEFAULT_INIT_DONE: - case JobEventDetails::USER_INIT_CANCELED: { -+ ReleasePrintJob(); -+ break; -+ } -+ case JobEventDetails::USER_INIT_DONE: -+ case JobEventDetails::DEFAULT_INIT_DONE: { - NOTREACHED(); - break; - } -@@ -532,9 +540,6 @@ bool PrintViewManagerBase::CreateNewPrintJob(PrinterQuery* query) { - DCHECK(!quit_inner_loop_); - DCHECK(query); - -- // Disconnect the current |print_job_|. -- DisconnectFromCurrentPrintJob(); -- - // We can't print if there is no renderer. - if (!web_contents()->GetRenderViewHost() || - !web_contents()->GetRenderViewHost()->IsRenderViewLive()) { @@ -594,6 +599,9 @@ void PrintViewManagerBase::ReleasePrintJob() { content::RenderFrameHost* rfh = printing_rfh_; printing_rfh_ = nullptr; @@ -176,26 +131,6 @@ index 007b003dd58d44acd6e1351c237fca6463d90602..da7c14d03a740e5d2ca2099a15c6105b if (!print_job_) return; -@@ -604,7 +612,7 @@ void PrintViewManagerBase::ReleasePrintJob() { - } - - registrar_.Remove(this, chrome::NOTIFICATION_PRINT_JOB_EVENT, -- content::Source(print_job_.get())); -+ content::NotificationService::AllSources()); - // Don't close the worker thread. - print_job_ = nullptr; - } -@@ -678,6 +686,10 @@ bool PrintViewManagerBase::PrintNowInternal( - // Don't print / print preview interstitials or crashed tabs. - if (web_contents()->ShowingInterstitialPage() || web_contents()->IsCrashed()) - return false; -+ -+ registrar_.Add(this, chrome::NOTIFICATION_PRINT_JOB_EVENT, -+ content::NotificationService::AllSources()); -+ - return rfh->Send(message.release()); - } - diff --git a/chrome/browser/printing/print_view_manager_base.h b/chrome/browser/printing/print_view_manager_base.h index a2569836d04ff968e690215f56f6de3b6d884874..6ddec22641b74d5484c2e0d4f62e5d71d8d783e9 100644 --- a/chrome/browser/printing/print_view_manager_base.h @@ -348,10 +283,18 @@ index 1802034a6e15a6ad8b0d9591cfb79ba5873dc982..a827091facdb4f6b1d74ce826c3492ce // Like PrintMsg_PrintPages, but using the print preview document's frame/node. IPC_MESSAGE_ROUTED0(PrintMsg_PrintForSystemDialog) diff --git a/components/printing/renderer/print_render_frame_helper.cc b/components/printing/renderer/print_render_frame_helper.cc -index d51abda693de7fc701928e29fe35154169f41651..051958321c9b95d5951f76ee822dd67a17d18324 100644 +index d51abda693de7fc701928e29fe35154169f41651..cd402f729a69a749e19255ce1a9d55a2c30eee11 100644 --- a/components/printing/renderer/print_render_frame_helper.cc +++ b/components/printing/renderer/print_render_frame_helper.cc -@@ -1109,7 +1109,9 @@ void PrintRenderFrameHelper::ScriptedPrint(bool user_initiated) { +@@ -36,6 +36,7 @@ + #include "net/base/registry_controlled_domains/registry_controlled_domain.h" + #include "printing/buildflags/buildflags.h" + #include "printing/metafile_skia.h" ++#include "printing/print_settings.h" + #include "printing/metafile_skia_wrapper.h" + #include "printing/units.h" + #include "third_party/blink/public/common/frame/frame_owner_element_type.h" +@@ -1109,7 +1110,9 @@ void PrintRenderFrameHelper::ScriptedPrint(bool user_initiated) { web_frame->DispatchBeforePrintEvent(); if (!weak_this) return; @@ -362,7 +305,7 @@ index d51abda693de7fc701928e29fe35154169f41651..051958321c9b95d5951f76ee822dd67a if (weak_this) web_frame->DispatchAfterPrintEvent(); } -@@ -1157,7 +1159,10 @@ void PrintRenderFrameHelper::OnDestruct() { +@@ -1157,7 +1160,10 @@ void PrintRenderFrameHelper::OnDestruct() { delete this; } @@ -374,7 +317,7 @@ index d51abda693de7fc701928e29fe35154169f41651..051958321c9b95d5951f76ee822dd67a if (ipc_nesting_level_ > 1) return; -@@ -1170,7 +1175,8 @@ void PrintRenderFrameHelper::OnPrintPages() { +@@ -1170,7 +1176,8 @@ void PrintRenderFrameHelper::OnPrintPages() { // If we are printing a PDF extension frame, find the plugin node and print // that instead. auto plugin = delegate_->GetPdfElement(frame); @@ -384,7 +327,7 @@ index d51abda693de7fc701928e29fe35154169f41651..051958321c9b95d5951f76ee822dd67a if (weak_this) frame->DispatchAfterPrintEvent(); // WARNING: |this| may be gone at this point. Do not do any more work here and -@@ -1187,7 +1193,7 @@ void PrintRenderFrameHelper::OnPrintForSystemDialog() { +@@ -1187,7 +1194,7 @@ void PrintRenderFrameHelper::OnPrintForSystemDialog() { } auto weak_this = weak_ptr_factory_.GetWeakPtr(); Print(frame, print_preview_context_.source_node(), @@ -393,7 +336,7 @@ index d51abda693de7fc701928e29fe35154169f41651..051958321c9b95d5951f76ee822dd67a if (weak_this) frame->DispatchAfterPrintEvent(); // WARNING: |this| may be gone at this point. Do not do any more work here and -@@ -1223,6 +1229,8 @@ void PrintRenderFrameHelper::OnPrintPreview( +@@ -1223,6 +1230,8 @@ void PrintRenderFrameHelper::OnPrintPreview( if (ipc_nesting_level_ > 1) return; @@ -402,7 +345,7 @@ index d51abda693de7fc701928e29fe35154169f41651..051958321c9b95d5951f76ee822dd67a print_preview_context_.OnPrintPreview(); UMA_HISTOGRAM_ENUMERATION("PrintPreview.PreviewEvent", -@@ -1616,7 +1624,10 @@ void PrintRenderFrameHelper::PrintNode(const blink::WebNode& node) { +@@ -1616,7 +1625,10 @@ void PrintRenderFrameHelper::PrintNode(const blink::WebNode& node) { auto self = weak_ptr_factory_.GetWeakPtr(); Print(duplicate_node.GetDocument().GetFrame(), duplicate_node, @@ -414,7 +357,7 @@ index d51abda693de7fc701928e29fe35154169f41651..051958321c9b95d5951f76ee822dd67a // Check if |this| is still valid. if (!self) return; -@@ -1627,7 +1638,10 @@ void PrintRenderFrameHelper::PrintNode(const blink::WebNode& node) { +@@ -1627,7 +1639,10 @@ void PrintRenderFrameHelper::PrintNode(const blink::WebNode& node) { void PrintRenderFrameHelper::Print(blink::WebLocalFrame* frame, const blink::WebNode& node, @@ -426,7 +369,7 @@ index d51abda693de7fc701928e29fe35154169f41651..051958321c9b95d5951f76ee822dd67a // If still not finished with earlier print request simply ignore. if (prep_frame_view_) return; -@@ -1635,7 +1649,7 @@ void PrintRenderFrameHelper::Print(blink::WebLocalFrame* frame, +@@ -1635,7 +1650,7 @@ void PrintRenderFrameHelper::Print(blink::WebLocalFrame* frame, FrameReference frame_ref(frame); int expected_page_count = 0; @@ -435,19 +378,21 @@ index d51abda693de7fc701928e29fe35154169f41651..051958321c9b95d5951f76ee822dd67a DidFinishPrinting(FAIL_PRINT_INIT); return; // Failed to init print page settings. } -@@ -1655,8 +1669,9 @@ void PrintRenderFrameHelper::Print(blink::WebLocalFrame* frame, +@@ -1655,8 +1670,11 @@ void PrintRenderFrameHelper::Print(blink::WebLocalFrame* frame, PrintMsg_PrintPages_Params print_settings; auto self = weak_ptr_factory_.GetWeakPtr(); - GetPrintSettingsFromUser(frame_ref.GetFrame(), node, expected_page_count, - print_request_type, &print_settings); -+ if (!silent) ++ if (silent) ++ print_settings = *print_pages_params_.get(); ++ else + GetPrintSettingsFromUser(frame_ref.GetFrame(), node, expected_page_count, + print_request_type, &print_settings); // Check if |this| is still valid. if (!self) return; -@@ -1666,6 +1681,7 @@ void PrintRenderFrameHelper::Print(blink::WebLocalFrame* frame, +@@ -1666,6 +1684,7 @@ void PrintRenderFrameHelper::Print(blink::WebLocalFrame* frame, ? blink::kWebPrintScalingOptionSourceSize : scaling_option; SetPrintPagesParams(print_settings); @@ -455,7 +400,7 @@ index d51abda693de7fc701928e29fe35154169f41651..051958321c9b95d5951f76ee822dd67a if (print_settings.params.dpi.IsEmpty() || !print_settings.params.document_cookie) { DidFinishPrinting(OK); // Release resources and fail silently on failure. -@@ -1854,10 +1870,24 @@ std::vector PrintRenderFrameHelper::GetPrintedPages( +@@ -1854,10 +1873,24 @@ std::vector PrintRenderFrameHelper::GetPrintedPages( return printed_pages; } @@ -483,7 +428,7 @@ index d51abda693de7fc701928e29fe35154169f41651..051958321c9b95d5951f76ee822dd67a // Check if the printer returned any settings, if the settings is empty, we // can safely assume there are no printer drivers configured. So we safely // terminate. -@@ -1877,12 +1907,14 @@ bool PrintRenderFrameHelper::InitPrintSettings(bool fit_to_paper_size) { +@@ -1877,12 +1910,14 @@ bool PrintRenderFrameHelper::InitPrintSettings(bool fit_to_paper_size) { return result; }