Browse Source

fix: bail early if no printers on the network (#22517)

Co-authored-by: Shelley Vohr <[email protected]>
trop[bot] 5 years ago
parent
commit
fbbe8afc3e
2 changed files with 9 additions and 1 deletions
  1. 1 1
      docs/api/web-contents.md
  2. 8 0
      shell/browser/api/atom_api_web_contents.cc

+ 1 - 1
docs/api/web-contents.md

@@ -1264,7 +1264,7 @@ Returns [`PrinterInfo[]`](structures/printer-info.md)
     * `vertical` Number (optional) - The vertical dpi.
 * `callback` Function (optional)
   * `success` Boolean - Indicates success of the print call.
-  * `failureReason` String - Called back if the print fails; can be `cancelled` or `failed`.
+  * `failureReason` String - Error description called back if the print fails.
 
 Prints window's web page. When `silent` is set to `true`, Electron will pick
 the system's default printer if `deviceName` is empty and the default settings for printing.

+ 8 - 0
shell/browser/api/atom_api_web_contents.cc

@@ -1679,6 +1679,14 @@ void WebContents::OnGetDefaultPrinter(
     base::string16 default_printer) {
   base::string16 printer_name =
       device_name.empty() ? default_printer : device_name;
+
+  // If there are no valid printers available on the network, we bail.
+  if (printer_name.empty() || !IsDeviceNameValid(printer_name)) {
+    if (print_callback)
+      std::move(print_callback).Run(false, "no valid printers available");
+    return;
+  }
+
   print_settings.SetStringKey(printing::kSettingDeviceName, printer_name);
 
   auto* print_view_manager =