fix: potential draggable regions crash in DevTools (#43179)

This commit is contained in:
Shelley Vohr 2024-08-05 09:56:08 +02:00 коммит произвёл GitHub
Родитель f508f6b6b5
Коммит 78995b956e
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
2 изменённых файлов: 36 добавлений и 0 удалений

Просмотреть файл

@ -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

Просмотреть файл

@ -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_) {