From 8e0cc29e72e5b1cfd34521ff2182d41e3d8004ba Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Fri, 14 Jun 2019 12:11:15 -0700 Subject: [PATCH] fix: callback values for printing cancellation and success --- patches/common/chromium/printing.patch | 69 +++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/patches/common/chromium/printing.patch b/patches/common/chromium/printing.patch index 16371b545b874..000e773550ad1 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..aa51b2b2b0e1950f7a660d48bda5e61ecea8951c 100644 +index 961e1560aa914942c01372c354059d6d6b72c50f..5e364fa6637e8453b0be701637c7d5b96aa77b7b 100644 --- a/chrome/browser/printing/print_job_worker.cc +++ b/chrome/browser/printing/print_job_worker.cc @@ -21,12 +21,12 @@ @@ -26,8 +26,28 @@ index 961e1560aa914942c01372c354059d6d6b72c50f..aa51b2b2b0e1950f7a660d48bda5e61e #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..4ddbf18e335609623aba42cc39a7c977fe8c5229 100644 +index 007b003dd58d44acd6e1351c237fca6463d90602..da7c14d03a740e5d2ca2099a15c6105b74c101b4 100644 --- a/chrome/browser/printing/print_view_manager_base.cc +++ b/chrome/browser/printing/print_view_manager_base.cc @@ -27,10 +27,7 @@ @@ -121,6 +141,31 @@ index 007b003dd58d44acd6e1351c237fca6463d90602..4ddbf18e335609623aba42cc39a7c977 #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; @@ -131,6 +176,26 @@ index 007b003dd58d44acd6e1351c237fca6463d90602..4ddbf18e335609623aba42cc39a7c977 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