# HG changeset patch # User stransky # Date 1604562416 0 # Node ID 1c126b520042591194e88618ae11a6adc1da9a08 # Parent 6e2e4f0e4a95b0cae777dda9369a9e9bf49a51b1 Bug 1672987 Use PipeWire when Wayland display is actually used, r=dminor Right now PipeWire is enabled when Wayland session is used regardless of an active Gtk backend (X11/Wayland). Let's use PipeWire only when Wayland Gtk backend is used and disable it for X11 one to avoid possible regressions. Differential Revision: https://phabricator.services.mozilla.com/D94588 diff --git a/third_party/libwebrtc/webrtc/modules/desktop_capture/desktop_capturer.cc b/third_party/libwebrtc/webrtc/modules/desktop_capture/desktop_capturer.cc --- a/third_party/libwebrtc/webrtc/modules/desktop_capture/desktop_capturer.cc +++ b/third_party/libwebrtc/webrtc/modules/desktop_capture/desktop_capturer.cc @@ -8,16 +8,21 @@ * be found in the AUTHORS file in the root of the source tree. */ #include "modules/desktop_capture/desktop_capturer.h" #include "modules/desktop_capture/desktop_capture_options.h" #include "modules/desktop_capture/desktop_capturer_differ_wrapper.h" +#if defined(WEBRTC_USE_PIPEWIRE) || defined(USE_X11) +#include +#include +#endif + namespace webrtc { DesktopCapturer::~DesktopCapturer() = default; void DesktopCapturer::SetSharedMemoryFactory( std::unique_ptr shared_memory_factory) {} void DesktopCapturer::SetExcludedWindow(WindowId window) {} @@ -67,21 +72,37 @@ std::unique_ptr Desktop if (capturer && options.detect_updated_region()) { capturer.reset(new DesktopCapturerDifferWrapper(std::move(capturer))); } return capturer; } #if defined(WEBRTC_USE_PIPEWIRE) || defined(USE_X11) -bool DesktopCapturer::IsRunningUnderWayland() { +// Return true if Firefox is actually running with Wayland backend. +static bool IsWaylandDisplayUsed() { + const auto display = gdk_display_get_default(); + if (display == nullptr) { + // We're running in headless mode. + return false; + } + return !GDK_IS_X11_DISPLAY(display); +} + +// Return true if Firefox is actually running on Wayland enabled session. +// It means some screensharing capabilities may be limited. +static bool IsWaylandSessionUsed() { const char* xdg_session_type = getenv("XDG_SESSION_TYPE"); if (!xdg_session_type || strncmp(xdg_session_type, "wayland", 7) != 0) return false; if (!(getenv("WAYLAND_DISPLAY"))) return false; return true; } + +bool DesktopCapturer::IsRunningUnderWayland() { + return IsWaylandSessionUsed() ? IsWaylandDisplayUsed() : false; +} #endif // defined(WEBRTC_USE_PIPEWIRE) || defined(USE_X11) } // namespace webrtc