cef/patch/patches/linux_printing_context.patch

176 lines
5.9 KiB
Diff

diff --git printing/printing_context_linux.cc printing/printing_context_linux.cc
index c8673eaee484b..d7026cd38df11 100644
--- printing/printing_context_linux.cc
+++ printing/printing_context_linux.cc
@@ -25,6 +25,12 @@
namespace printing {
+namespace {
+
+static PrintingContextLinuxDelegate* g_delegate = nullptr;
+
+} // namespace
+
// static
std::unique_ptr<PrintingContext> PrintingContext::CreateImpl(
Delegate* delegate,
@@ -47,6 +53,14 @@ PrintingContextLinux::~PrintingContextLinux() {
print_dialog_->ReleaseDialog();
}
+// static
+PrintingContextLinuxDelegate* PrintingContextLinuxDelegate::SetInstance(
+ PrintingContextLinuxDelegate* delegate) {
+ auto old_delegate = g_delegate;
+ g_delegate = delegate;
+ return old_delegate;
+}
+
void PrintingContextLinux::AskUserForSettings(int max_pages,
bool has_selection,
bool is_scripted,
@@ -68,23 +82,19 @@ mojom::ResultCode PrintingContextLinux::UseDefaultSettings() {
ResetSettings();
-#if BUILDFLAG(IS_LINUX)
- if (!ui::LinuxUi::instance())
+ if (!g_delegate)
return mojom::ResultCode::kSuccess;
if (!print_dialog_)
- print_dialog_ = ui::LinuxUi::instance()->CreatePrintDialog(this);
+ print_dialog_ = g_delegate->CreatePrintDialog(this);
print_dialog_->UseDefaultSettings();
-#endif
return mojom::ResultCode::kSuccess;
}
gfx::Size PrintingContextLinux::GetPdfPaperSizeDeviceUnits() {
-#if BUILDFLAG(IS_LINUX)
- if (ui::LinuxUi::instance())
- return ui::LinuxUi::instance()->GetPdfPaperSize(this);
-#endif
+ if (g_delegate)
+ return g_delegate->GetPdfPaperSize(this);
return gfx::Size();
}
@@ -94,18 +104,16 @@ mojom::ResultCode PrintingContextLinux::UpdatePrinterSettings(
DCHECK(!printer_settings.show_system_dialog);
DCHECK(!in_print_job_);
-#if BUILDFLAG(IS_LINUX)
- if (!ui::LinuxUi::instance())
+ if (!g_delegate)
return mojom::ResultCode::kSuccess;
if (!print_dialog_)
- print_dialog_ = ui::LinuxUi::instance()->CreatePrintDialog(this);
+ print_dialog_ = g_delegate->CreatePrintDialog(this);
// PrintDialogGtk::UpdateSettings() calls InitWithSettings() so settings_ will
// remain non-null after this line.
print_dialog_->UpdateSettings(std::move(settings_));
DCHECK(settings_);
-#endif
return mojom::ResultCode::kSuccess;
}
diff --git printing/printing_context_linux.h printing/printing_context_linux.h
index 0e2f451ac050f..3faa2a3dff79d 100644
--- printing/printing_context_linux.h
+++ printing/printing_context_linux.h
@@ -16,6 +16,20 @@ namespace printing {
class MetafilePlayer;
class PrintDialogLinuxInterface;
+class PrintingContextLinux;
+
+class COMPONENT_EXPORT(PRINTING) PrintingContextLinuxDelegate {
+ public:
+ virtual ~PrintingContextLinuxDelegate() = default;
+
+ virtual PrintDialogLinuxInterface* CreatePrintDialog(
+ PrintingContextLinux* context) = 0;
+
+ virtual gfx::Size GetPdfPaperSize(PrintingContextLinux* context) = 0;
+
+ static PrintingContextLinuxDelegate* SetInstance(
+ PrintingContextLinuxDelegate* delegate);
+};
// PrintingContext with optional native UI for print dialog and pdf_paper_size.
class COMPONENT_EXPORT(PRINTING) PrintingContextLinux : public PrintingContext {
diff --git tools/v8_context_snapshot/BUILD.gn tools/v8_context_snapshot/BUILD.gn
index a06eae4ab3217..43851307c531f 100644
--- tools/v8_context_snapshot/BUILD.gn
+++ tools/v8_context_snapshot/BUILD.gn
@@ -106,6 +106,7 @@ if (use_v8_context_snapshot) {
deps = [
"//gin:gin",
"//mojo/core/embedder",
+ "//printing",
"//services/service_manager/public/cpp",
"//third_party/blink/public:blink",
"//v8",
diff --git ui/linux/linux_ui.cc ui/linux/linux_ui.cc
index bae51eec69a8d..8675048b9117f 100644
--- ui/linux/linux_ui.cc
+++ ui/linux/linux_ui.cc
@@ -29,6 +29,9 @@ namespace ui {
std::unique_ptr<LinuxUi> LinuxUi::SetInstance(
std::unique_ptr<LinuxUi> instance) {
gfx::AnimationSettingsProviderLinux::SetInstance(instance.get());
+#if BUILDFLAG(IS_LINUX) && BUILDFLAG(ENABLE_PRINTING)
+ printing::PrintingContextLinuxDelegate::SetInstance(instance.get());
+#endif
return std::exchange(GetLinuxUiInstance(), std::move(instance));
}
diff --git ui/linux/linux_ui.h ui/linux/linux_ui.h
index e8be3f2e60182..8c7bddd4a3d2d 100644
--- ui/linux/linux_ui.h
+++ ui/linux/linux_ui.h
@@ -20,6 +20,10 @@
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/animation/animation_settings_provider_linux.h"
+#if BUILDFLAG(ENABLE_PRINTING)
+#include "printing/printing_context_linux.h" // nogncheck
+#endif
+
// The main entrypoint into Linux toolkit specific code. GTK/QT code should only
// be executed behind this interface.
@@ -60,7 +64,11 @@ class WindowFrameProvider;
// Adapter class with targets to render like different toolkits. Set by any
// project that wants to do linux desktop native rendering.
class COMPONENT_EXPORT(LINUX_UI) LinuxUi
- : public gfx::AnimationSettingsProviderLinux {
+ : public gfx::AnimationSettingsProviderLinux
+#if BUILDFLAG(ENABLE_PRINTING)
+ , public printing::PrintingContextLinuxDelegate
+#endif
+{
public:
using UseSystemThemeCallback =
base::RepeatingCallback<bool(aura::Window* window)>;
@@ -181,14 +189,6 @@ class COMPONENT_EXPORT(LINUX_UI) LinuxUi
// Returns a map of KeyboardEvent code to KeyboardEvent key values.
virtual base::flat_map<std::string, std::string> GetKeyboardLayoutMap() = 0;
-#if BUILDFLAG(ENABLE_PRINTING)
- virtual printing::PrintDialogLinuxInterface* CreatePrintDialog(
- printing::PrintingContextLinux* context) = 0;
-
- virtual gfx::Size GetPdfPaperSize(
- printing::PrintingContextLinux* context) = 0;
-#endif
-
// Returns a native file selection dialog. `listener` is of type
// SelectFileDialog::Listener. TODO(thomasanderson): Move
// SelectFileDialog::Listener to SelectFileDialogListener so that it can be