Skip to content

Commit 33a81b4

Browse files
fix: register PrintDialogLinuxFactory on Linux (#50486)
fix: register PrintDialogLinuxFactory on Linux Chromium 145 refactored Linux print dialog creation to use a factory pattern instead of directly calling LinuxUi::CreatePrintDialog(). Chrome registers this factory in ChromeBrowserMainExtraPartsViewsLinux::ToolkitInitialized(), but Electron did not, causing PrintingContextLinux::EnsurePrintDialog() to leave print_dialog_ null on every call. Without a dialog, UseDefaultSettings() and UpdatePrinterSettings() return success but with empty/unprocessed settings, causing PrintMsgPrintParamsIsValid() to fail. This broke both window.print() (no dialog appears) and webContents.print() (callback stuck until app close with "Invalid printer settings"). Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
1 parent eb49ed9 commit 33a81b4

2 files changed

Lines changed: 18 additions & 0 deletions

File tree

shell/browser/electron_browser_main_parts.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@
127127
#include "shell/common/plugin_info.h"
128128
#endif // BUILDFLAG(ENABLE_PLUGINS)
129129

130+
#if BUILDFLAG(ENABLE_PRINTING)
131+
#include "components/printing/common/print_dialog_linux_factory.h"
132+
#endif
133+
130134
namespace electron {
131135

132136
namespace {
@@ -415,6 +419,10 @@ void ElectronBrowserMainParts::ToolkitInitialized() {
415419

416420
ui::LinuxUi::SetInstance(linux_ui);
417421

422+
#if BUILDFLAG(ENABLE_PRINTING)
423+
print_dialog_factory_ = std::make_unique<printing::PrintDialogLinuxFactory>();
424+
#endif
425+
418426
// Cursor theme changes are tracked by LinuxUI (via a CursorThemeManager
419427
// implementation). Start observing them once it's initialized.
420428
ui::CursorFactory::GetInstance()->ObserveThemeChanges();

shell/browser/electron_browser_main_parts.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,13 @@
1414
#include "content/public/browser/browser_main_parts.h"
1515
#include "electron/buildflags/buildflags.h"
1616
#include "mojo/public/cpp/bindings/remote.h"
17+
#include "printing/buildflags/buildflags.h"
1718
#include "services/device/public/mojom/geolocation_control.mojom.h"
1819

20+
#if BUILDFLAG(ENABLE_PRINTING)
21+
#include "printing/printing_context_linux.h"
22+
#endif
23+
1924
class BrowserProcessImpl;
2025
class IconManager;
2126

@@ -179,6 +184,11 @@ class ElectronBrowserMainParts : public content::BrowserMainParts {
179184
std::unique_ptr<display::ScopedNativeScreen> screen_;
180185
#endif
181186

187+
#if BUILDFLAG(ENABLE_PRINTING)
188+
std::unique_ptr<printing::PrintingContextLinux::PrintDialogFactory>
189+
print_dialog_factory_;
190+
#endif
191+
182192
static ElectronBrowserMainParts* self_;
183193
};
184194

0 commit comments

Comments
 (0)