From 8b8fae028c8a8143d7353fe8839500dbdb7f030e Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Wed, 16 Sep 2020 20:28:42 -0600 Subject: [PATCH] fix: check printer list when no default printers --- shell/browser/api/electron_api_web_contents.cc | 16 +++++++++++++--- shell/browser/api/electron_api_web_contents.h | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/shell/browser/api/electron_api_web_contents.cc b/shell/browser/api/electron_api_web_contents.cc index c7d4276f20b24..e27d3aac5c9ce 100644 --- a/shell/browser/api/electron_api_web_contents.cc +++ b/shell/browser/api/electron_api_web_contents.cc @@ -381,10 +381,20 @@ base::string16 GetDefaultPrinterAsync() { base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, base::BlockingType::MAY_BLOCK); - scoped_refptr backend = + scoped_refptr print_backend = printing::PrintBackend::CreateInstance( nullptr, g_browser_process->GetApplicationLocale()); std::string printer_name = backend->GetDefaultPrinterName(); + + // Some devices won't have a default printer, so we should + // also check for existing printers and pick the first + // one should it exist. + if (printer_name.empty()) { + printing::PrinterList printers; + print_backend->EnumeratePrinters(&printers); + if (printers.size() > 0) + printer_name = printers.front().printer_name; + } return base::UTF8ToUTF16(printer_name); } #endif @@ -2139,8 +2149,8 @@ void WebContents::Print(gin_helper::Arguments* args) { std::move(callback), device_name, silent)); } -std::vector WebContents::GetPrinterList() { - std::vector printers; +printing::PrinterList WebContents::GetPrinterList() { + printing::PrinterList printers; auto print_backend = printing::PrintBackend::CreateInstance( nullptr, g_browser_process->GetApplicationLocale()); { diff --git a/shell/browser/api/electron_api_web_contents.h b/shell/browser/api/electron_api_web_contents.h index 9255b92b11cae..b156a3f72d182 100644 --- a/shell/browser/api/electron_api_web_contents.h +++ b/shell/browser/api/electron_api_web_contents.h @@ -246,7 +246,7 @@ class WebContents : public gin_helper::TrackableObject, bool silent, base::string16 default_printer); void Print(gin_helper::Arguments* args); - std::vector GetPrinterList(); + printing::PrinterList GetPrinterList(); // Print current page as PDF. v8::Local PrintToPDF(base::DictionaryValue settings); #endif