fix: check screen capture permissions in desktopCapturer (#43273)

fix: check screen capture permissions in desktopCapturer

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
This commit is contained in:
trop[bot]
2024-08-09 19:08:27 +02:00
committed by GitHub
parent 4401b62044
commit 9241ba7a05
2 changed files with 24 additions and 8 deletions

View File

@@ -41,6 +41,10 @@
#include "ui/gfx/x/randr.h"
#endif
#if BUILDFLAG(IS_MAC)
#include "ui/base/cocoa/permissions_utils.h"
#endif
#if BUILDFLAG(IS_LINUX)
// Private function in ui/base/x/x11_display_util.cc
std::map<x11::RandR::Output, int> GetMonitors(
@@ -294,6 +298,13 @@ void DesktopCapturer::StartHandling(bool capture_window,
capture_window_ = capture_window;
capture_screen_ = capture_screen;
#if BUILDFLAG(IS_MAC)
if (!ui::TryPromptUserForScreenCapture()) {
HandleFailure();
return;
}
#endif
{
// Initialize the source list.
// Apply the new thumbnail size and restart capture.
@@ -431,21 +442,25 @@ void DesktopCapturer::UpdateSourcesList(DesktopMediaList* list) {
std::back_inserter(captured_sources_));
}
if (!capture_window_ && !capture_screen_) {
v8::Isolate* isolate = JavascriptEnvironment::GetIsolate();
v8::HandleScope scope(isolate);
gin_helper::CallMethod(this, "_onfinished", captured_sources_);
if (!capture_window_ && !capture_screen_)
HandleSuccess();
}
screen_capturer_.reset();
window_capturer_.reset();
void DesktopCapturer::HandleSuccess() {
v8::Isolate* isolate = JavascriptEnvironment::GetIsolate();
v8::HandleScope scope(isolate);
gin_helper::CallMethod(this, "_onfinished", captured_sources_);
Unpin();
}
screen_capturer_.reset();
window_capturer_.reset();
Unpin();
}
void DesktopCapturer::HandleFailure() {
v8::Isolate* isolate = JavascriptEnvironment::GetIsolate();
v8::HandleScope scope(isolate);
gin_helper::CallMethod(this, "_onerror", "Failed to get sources.");
screen_capturer_.reset();

View File

@@ -90,6 +90,7 @@ class DesktopCapturer : public gin::Wrappable<DesktopCapturer>,
void UpdateSourcesList(DesktopMediaList* list);
void HandleFailure();
void HandleSuccess();
std::unique_ptr<DesktopListListener> window_listener_;
std::unique_ptr<DesktopListListener> screen_listener_;