From cfd64b5f8983a34723abbdddf82fb6aea6ceb773 Mon Sep 17 00:00:00 2001 From: John Beutner <31829097+cptpcrd@users.noreply.github.com> Date: Mon, 24 Mar 2025 15:09:11 -0400 Subject: [PATCH] fix: handle OnDelegatedSourceListDismissed asynchronously (#46112) This fixes a crash with the PipeWire capturer caused by a Chromium change introduced in https://chromium-review.googlesource.com/c/chromium/src/+/5783826. DesktopMediaListBase now calls Refresh(true) after dispatching DesktopMediaListObserver::OnDelegatedSourceListDismissed, so it's important not to call DesktopCapturer::HandleFailure (which deallocates the DesktopMediaList) synchronously from OnDelegatedSourceListDismissed. --- shell/browser/api/electron_api_desktop_capturer.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/shell/browser/api/electron_api_desktop_capturer.cc b/shell/browser/api/electron_api_desktop_capturer.cc index b7d7177bf47a..1fcb7fbaa54c 100644 --- a/shell/browser/api/electron_api_desktop_capturer.cc +++ b/shell/browser/api/electron_api_desktop_capturer.cc @@ -15,6 +15,7 @@ #include "chrome/browser/media/webrtc/desktop_media_list.h" #include "chrome/browser/media/webrtc/thumbnail_capturer_mac.h" #include "chrome/browser/media/webrtc/window_icon_util.h" +#include "content/public/browser/browser_thread.h" #include "content/public/browser/desktop_capture.h" #include "gin/handle.h" #include "gin/object_template_builder.h" @@ -252,7 +253,8 @@ void DesktopCapturer::DesktopListListener::OnSourceThumbnailChanged(int index) { } void DesktopCapturer::DesktopListListener::OnDelegatedSourceListDismissed() { - std::move(failure_callback_).Run(); + content::GetUIThreadTaskRunner({})->PostTask(FROM_HERE, + std::move(failure_callback_)); } void DesktopCapturer::StartHandling(bool capture_window,