chore: add logging for print_backend failures (#29884)
This commit is contained in:
parent
d7a7c120d1
commit
d2508a6941
3 changed files with 30 additions and 12 deletions
|
@ -47,7 +47,10 @@ printing::PrinterList GetPrinterList() {
|
||||||
// TODO(deepak1556): Deprecate this api in favor of an
|
// TODO(deepak1556): Deprecate this api in favor of an
|
||||||
// async version and post a non blocing task call.
|
// async version and post a non blocing task call.
|
||||||
base::ThreadRestrictions::ScopedAllowIO allow_io;
|
base::ThreadRestrictions::ScopedAllowIO allow_io;
|
||||||
|
printing::mojom::ResultCode code =
|
||||||
print_backend->EnumeratePrinters(&printers);
|
print_backend->EnumeratePrinters(&printers);
|
||||||
|
if (code != printing::mojom::ResultCode::kSuccess)
|
||||||
|
LOG(INFO) << "Failed to enumerate printers";
|
||||||
}
|
}
|
||||||
return printers;
|
return printers;
|
||||||
}
|
}
|
||||||
|
|
|
@ -424,7 +424,7 @@ bool IsDeviceNameValid(const std::u16string& device_name) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
std::u16string GetDefaultPrinterAsync() {
|
std::pair<std::string, std::u16string> GetDefaultPrinterAsync() {
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
// Blocking is needed here because Windows printer drivers are oftentimes
|
// Blocking is needed here because Windows printer drivers are oftentimes
|
||||||
// not thread-safe and have to be accessed on the UI thread.
|
// not thread-safe and have to be accessed on the UI thread.
|
||||||
|
@ -435,18 +435,25 @@ std::u16string GetDefaultPrinterAsync() {
|
||||||
printing::PrintBackend::CreateInstance(
|
printing::PrintBackend::CreateInstance(
|
||||||
g_browser_process->GetApplicationLocale());
|
g_browser_process->GetApplicationLocale());
|
||||||
std::string printer_name;
|
std::string printer_name;
|
||||||
|
printing::mojom::ResultCode code =
|
||||||
print_backend->GetDefaultPrinterName(printer_name);
|
print_backend->GetDefaultPrinterName(printer_name);
|
||||||
|
|
||||||
// Some devices won't have a default printer, so we should
|
// We don't want to return if this fails since some devices won't have a
|
||||||
// also check for existing printers and pick the first
|
// default printer.
|
||||||
// one should it exist.
|
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()) {
|
if (printer_name.empty()) {
|
||||||
printing::PrinterList printers;
|
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())
|
if (!printers.empty())
|
||||||
printer_name = printers.front().printer_name;
|
printer_name = printers.front().printer_name;
|
||||||
}
|
}
|
||||||
return base::UTF8ToUTF16(printer_name);
|
|
||||||
|
return std::make_pair(std::string(), base::UTF8ToUTF16(printer_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copied from
|
// Copied from
|
||||||
|
@ -2435,7 +2442,8 @@ void WebContents::OnGetDefaultPrinter(
|
||||||
printing::CompletionCallback print_callback,
|
printing::CompletionCallback print_callback,
|
||||||
std::u16string device_name,
|
std::u16string device_name,
|
||||||
bool silent,
|
bool silent,
|
||||||
std::u16string default_printer) {
|
// <error, default_printer>
|
||||||
|
std::pair<std::string, std::u16string> info) {
|
||||||
// The content::WebContents might be already deleted at this point, and the
|
// The content::WebContents might be already deleted at this point, and the
|
||||||
// PrintViewManagerElectron class does not do null check.
|
// PrintViewManagerElectron class does not do null check.
|
||||||
if (!web_contents()) {
|
if (!web_contents()) {
|
||||||
|
@ -2444,8 +2452,14 @@ void WebContents::OnGetDefaultPrinter(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::u16string printer_name =
|
if (!info.first.empty()) {
|
||||||
device_name.empty() ? default_printer : device_name;
|
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 there are no valid printers available on the network, we bail.
|
||||||
if (printer_name.empty() || !IsDeviceNameValid(printer_name)) {
|
if (printer_name.empty() || !IsDeviceNameValid(printer_name)) {
|
||||||
|
|
|
@ -221,7 +221,8 @@ class WebContents : public gin::Wrappable<WebContents>,
|
||||||
printing::CompletionCallback print_callback,
|
printing::CompletionCallback print_callback,
|
||||||
std::u16string device_name,
|
std::u16string device_name,
|
||||||
bool silent,
|
bool silent,
|
||||||
std::u16string default_printer);
|
// <error, default_printer_name>
|
||||||
|
std::pair<std::string, std::u16string> info);
|
||||||
void Print(gin::Arguments* args);
|
void Print(gin::Arguments* args);
|
||||||
// Print current page as PDF.
|
// Print current page as PDF.
|
||||||
v8::Local<v8::Promise> PrintToPDF(base::DictionaryValue settings);
|
v8::Local<v8::Promise> PrintToPDF(base::DictionaryValue settings);
|
||||||
|
|
Loading…
Reference in a new issue