From 259f27070c48b127dd0acb8d7bda189a8aa0b4a1 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Wed, 6 Oct 2021 16:55:17 +0200 Subject: [PATCH] chore: add logging for print_backend failures (#31286) Co-authored-by: Shelley Vohr --- shell/browser/api/electron_api_printing.cc | 5 ++- .../browser/api/electron_api_web_contents.cc | 34 +++++++++++++------ shell/browser/api/electron_api_web_contents.h | 3 +- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/shell/browser/api/electron_api_printing.cc b/shell/browser/api/electron_api_printing.cc index a73005f735793..6841aec62b3a6 100644 --- a/shell/browser/api/electron_api_printing.cc +++ b/shell/browser/api/electron_api_printing.cc @@ -47,7 +47,10 @@ printing::PrinterList GetPrinterList() { // TODO(deepak1556): Deprecate this api in favor of an // async version and post a non blocing task call. base::ThreadRestrictions::ScopedAllowIO allow_io; - print_backend->EnumeratePrinters(&printers); + printing::mojom::ResultCode code = + print_backend->EnumeratePrinters(&printers); + if (code != printing::mojom::ResultCode::kSuccess) + LOG(INFO) << "Failed to enumerate printers"; } return printers; } diff --git a/shell/browser/api/electron_api_web_contents.cc b/shell/browser/api/electron_api_web_contents.cc index e9fbea43116e2..21841cc96d012 100644 --- a/shell/browser/api/electron_api_web_contents.cc +++ b/shell/browser/api/electron_api_web_contents.cc @@ -423,7 +423,7 @@ bool IsDeviceNameValid(const std::u16string& device_name) { return true; } -std::u16string GetDefaultPrinterAsync() { +std::pair GetDefaultPrinterAsync() { #if defined(OS_WIN) // Blocking is needed here because Windows printer drivers are oftentimes // not thread-safe and have to be accessed on the UI thread. @@ -434,18 +434,25 @@ std::u16string GetDefaultPrinterAsync() { printing::PrintBackend::CreateInstance( g_browser_process->GetApplicationLocale()); std::string printer_name; - print_backend->GetDefaultPrinterName(printer_name); + printing::mojom::ResultCode code = + print_backend->GetDefaultPrinterName(printer_name); - // Some devices won't have a default printer, so we should - // also check for existing printers and pick the first - // one should it exist. + // We don't want to return if this fails since some devices won't have a + // default printer. + if (code != printing::mojom::ResultCode::kSuccess) + LOG(ERROR) << "Failed to get default printer name"; + + // Check for existing printers and pick the first one should it exist. if (printer_name.empty()) { printing::PrinterList printers; - print_backend->EnumeratePrinters(&printers); + if (print_backend->EnumeratePrinters(&printers) != + printing::mojom::ResultCode::kSuccess) + return std::make_pair("Failed to enumerate printers", std::u16string()); if (!printers.empty()) printer_name = printers.front().printer_name; } - return base::UTF8ToUTF16(printer_name); + + return std::make_pair(std::string(), base::UTF8ToUTF16(printer_name)); } // Copied from @@ -2457,7 +2464,8 @@ void WebContents::OnGetDefaultPrinter( printing::CompletionCallback print_callback, std::u16string device_name, bool silent, - std::u16string default_printer) { + // + std::pair info) { // The content::WebContents might be already deleted at this point, and the // PrintViewManagerElectron class does not do null check. if (!web_contents()) { @@ -2466,8 +2474,14 @@ void WebContents::OnGetDefaultPrinter( return; } - std::u16string printer_name = - device_name.empty() ? default_printer : device_name; + if (!info.first.empty()) { + if (print_callback) + std::move(print_callback).Run(false, info.first); + return; + } + + // If the user has passed a deviceName use it, otherwise use default printer. + std::u16string printer_name = device_name.empty() ? info.second : device_name; // If there are no valid printers available on the network, we bail. if (printer_name.empty() || !IsDeviceNameValid(printer_name)) { diff --git a/shell/browser/api/electron_api_web_contents.h b/shell/browser/api/electron_api_web_contents.h index fdf90f7551d50..cf8c7b33db076 100644 --- a/shell/browser/api/electron_api_web_contents.h +++ b/shell/browser/api/electron_api_web_contents.h @@ -222,7 +222,8 @@ class WebContents : public gin::Wrappable, printing::CompletionCallback print_callback, std::u16string device_name, bool silent, - std::u16string default_printer); + // + std::pair info); void Print(gin::Arguments* args); // Print current page as PDF. v8::Local PrintToPDF(base::DictionaryValue settings);