From 89ccf99b90880385f66affb44b76ccd4adba8f0c Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Thu, 16 Jul 2020 15:34:33 -0700 Subject: [PATCH] browser(firefox): screencast for Mac headful (#2985) --- browser_patches/firefox/BUILD_NUMBER | 4 +-- .../firefox/juggler/protocol/PageHandler.js | 3 +- .../screencast/nsScreencastService.cpp | 28 ++++--------------- 3 files changed, 10 insertions(+), 25 deletions(-) diff --git a/browser_patches/firefox/BUILD_NUMBER b/browser_patches/firefox/BUILD_NUMBER index 243bc3c3a5..aaea94d989 100644 --- a/browser_patches/firefox/BUILD_NUMBER +++ b/browser_patches/firefox/BUILD_NUMBER @@ -1,2 +1,2 @@ -1129 -Changed: yurys@chromium.org Wed Jul 15 23:55:13 GMTST 2020 +1130 +Changed: yurys@chromium.org Thu Jul 16 15:31:21 PDT 2020 diff --git a/browser_patches/firefox/juggler/protocol/PageHandler.js b/browser_patches/firefox/juggler/protocol/PageHandler.js index 96e6ad06ac..0ca7fa6f11 100644 --- a/browser_patches/firefox/juggler/protocol/PageHandler.js +++ b/browser_patches/firefox/juggler/protocol/PageHandler.js @@ -296,7 +296,8 @@ class PageHandler { const docShell = this._pageTarget._gBrowser.ownerGlobal.docShell; // Exclude address bar and navigation control from the video. const rect = this._pageTarget.linkedBrowser().getBoundingClientRect(); - this._videoSessionId = screencast.startVideoRecording(docShell, file, width, height, scale || 0, rect.top); + const devicePixelRatio = this._pageTarget._window.devicePixelRatio; + this._videoSessionId = screencast.startVideoRecording(docShell, file, width, height, scale || 0, devicePixelRatio * rect.top); } stopVideoRecording() { diff --git a/browser_patches/firefox/juggler/screencast/nsScreencastService.cpp b/browser_patches/firefox/juggler/screencast/nsScreencastService.cpp index 94afa75997..eb3b9d0153 100644 --- a/browser_patches/firefox/juggler/screencast/nsScreencastService.cpp +++ b/browser_patches/firefox/juggler/screencast/nsScreencastService.cpp @@ -37,30 +37,14 @@ rtc::scoped_refptr CreateWindowCapturer(nsIWidget* w HeadlessWidget* headlessWidget = static_cast(widget); return HeadlessWindowCapturer::Create(headlessWidget); } -#ifdef MOZ_WIDGET_GTK - mozilla::widget::CompositorWidgetInitData initData; - widget->GetCompositorWidgetInitData(&initData); - const mozilla::widget::GtkCompositorWidgetInitData& gtkInitData = initData.get_GtkCompositorWidgetInitData(); + uintptr_t rawWindowId = reinterpret_cast(widget->GetNativeData(NS_NATIVE_WINDOW_WEBRTC_DEVICE_ID)); + if (!rawWindowId) { + fprintf(stderr, "Failed to get native window id\n"); + return nullptr; + } nsCString windowId; -# ifdef MOZ_X11 - windowId.AppendPrintf("%lu", gtkInitData.XWindow()); + windowId.AppendPrintf("%" PRIuPTR, rawWindowId); return webrtc::DesktopCaptureImpl::Create(sessionId, windowId.get(), webrtc::CaptureDeviceType::Window); -# else - // TODO: support in wayland - fprintf(stderr, "Video capture for Wayland is not implemented\n"); - return nullptr; -# endif -#elif defined(_WIN32) - mozilla::widget::CompositorWidgetInitData initData; - widget->GetCompositorWidgetInitData(&initData); - const mozilla::widget::WinCompositorWidgetInitData& winInitData = initData.get_WinCompositorWidgetInitData(); - nsCString windowId; - windowId.AppendPrintf("%lu", winInitData.hWnd()); - return webrtc::DesktopCaptureImpl::Create(sessionId, windowId.get(), webrtc::CaptureDeviceType::Window); -#else - fprintf(stderr, "Video capture is not implemented on this platform\n"); - return nullptr; -#endif } }