Repository: electron/electron
Pull request: fix: potential draggable regions crash in DevTools

#### Description of Change

Closes https://github.com/electron/electron/issues/43092

Fix a crash that can occur when `SetSupportsDraggableRegions` is called with `true` and there is no `MainFrameImpl`. When `MainFrameImpl` is nullptr, logic currently correctly returns early, but
`supports_draggable_regions_` is set before that happens. As a result, when `SupportsDraggableRegions()` is called, it will return true, and thus `LocalFrameView::UpdateDocumentDraggableRegions()` will
call `DraggableRegionsChanged()`. This will trigger a crash in `WebViewImpl::DraggableRegionsChanged()`, as it assumes that `MainFrameImpl` is not null.

Upstreamed in https://chromium-review.googlesource.com/c/chromium/src/+/5756619

#### Checklist
<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->

- [x] PR description included and stakeholders cc'd
- [x] `npm test` passes
- [x] [PR release notes](https://github.com/electron/clerk/blob/main/README.md) describe the change in a way relevant to app developers, and are [capitalized, punctuated, and past tense](https://github.com/electron/clerk/blob/main/README.md#examples).

#### Release Notes

Notes: Fixed a crash that could occur in some DevTools extensions containing draggable regions.

Changed files:
filename: patches/chromium/.patches
patch: @@ -130,3 +130,4 @@ fix_font_face_resolution_when_renderer_is_blocked.patch
 feat_enable_passing_exit_code_on_service_process_crash.patch
 chore_remove_reference_to_chrome_browser_themes.patch
 feat_enable_customizing_symbol_color_in_framecaptionbutton.patch
+fix_potential_draggable_region_crash_when_no_mainframeimpl.patch

filename: patches/chromium/fix_potential_draggable_region_crash_when_no_mainframeimpl.patch
patch: @@ -0,0 +1,35 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Shelley Vohr <shelley.vohr@gmail.com>
+Date: Thu, 1 Aug 2024 15:30:32 +0200
+Subject: Fix potential draggable region crash when no MainFrameImpl
+
+Fix a crash that can occur when SetSupportsDraggableRegions
+is called with `true` and there is no MainFrameImpl. When MainFrameImpl
+is nullptr, logic currently correctly returns early, but
+supports_draggable_regions_ is set before that happens. As a
+result, when SupportsDraggableRegions() is called, it will return
+true, and thus LocalFrameView::UpdateDocumentDraggableRegions() will
+call DraggableRegionsChanged(). This will trigger a crash in
+WebViewImpl::DraggableRegionsChanged(), as it assumes that
+MainFrameImpl is not null.
+
+Upstreamed in https://chromium-review.googlesource.com/c/chromium/src/+/5756619
+
+diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc
+index ef68f9cbc63772f50269520fb0198a95e4270947..948cf94e2e4af0bbbf1f9c2322d00075bdaca0b2 100644
+--- a/third_party/blink/renderer/core/exported/web_view_impl.cc
++++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
+@@ -4073,11 +4073,12 @@ bool WebViewImpl::IsFencedFrameRoot() const {
+ }
+ 
+ void WebViewImpl::SetSupportsDraggableRegions(bool supports_draggable_regions) {
+-  supports_draggable_regions_ = supports_draggable_regions;
+   if (!MainFrameImpl() || !MainFrameImpl()->GetFrame()) {
+     return;
+   }
+ 
++  supports_draggable_regions_ = supports_draggable_regions;
++
+   LocalFrame* local_frame = MainFrameImpl()->GetFrame();
+ 
+   if (supports_draggable_regions_) {