diff --git a/patches/chromium/.patches b/patches/chromium/.patches index 83e812eb0ceb9..9028edb5bd75b 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -100,7 +100,6 @@ make_gtk_getlibgtk_public.patch build_disable_print_content_analysis.patch custom_protocols_plzserviceworker.patch feat_filter_out_non-shareable_windows_in_the_current_application_in.patch -fix_allow_guest_webcontents_to_enter_fullscreen.patch disable_freezing_flags_after_init_in_node.patch short-circuit_permissions_checks_in_mediastreamdevicescontroller.patch chore_add_electron_deps_to_gitignores.patch diff --git a/patches/chromium/fix_allow_guest_webcontents_to_enter_fullscreen.patch b/patches/chromium/fix_allow_guest_webcontents_to_enter_fullscreen.patch deleted file mode 100644 index 782c546616933..0000000000000 --- a/patches/chromium/fix_allow_guest_webcontents_to_enter_fullscreen.patch +++ /dev/null @@ -1,20 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Samuel Attard -Date: Mon, 6 Jun 2022 14:25:15 -0700 -Subject: fix: allow guest webcontents to enter fullscreen - -This can be upstreamed, a guest webcontents can't technically become the focused webContents. This DCHECK should allow all guest webContents to request fullscreen entrance. - -diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc -index 699e13391bd408aff3c862820d531c968e05743a..4ae175782ac6d7a705af0760b24843fd16ab0871 100644 ---- a/content/browser/web_contents/web_contents_impl.cc -+++ b/content/browser/web_contents/web_contents_impl.cc -@@ -3639,7 +3639,7 @@ void WebContentsImpl::EnterFullscreenMode( - OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::EnterFullscreenMode"); - DCHECK(CanEnterFullscreenMode(requesting_frame, options)); - DCHECK(requesting_frame->IsActive()); -- DCHECK(ContainsOrIsFocusedWebContents()); -+ DCHECK(ContainsOrIsFocusedWebContents() || IsGuest()); - - // When WebView is the `delegate_` we can end up with VisualProperties changes - // synchronously. Notify the view ahead so it can handle the transition. diff --git a/patches/chromium/fix_on-screen-keyboard_hides_on_input_blur_in_webview.patch b/patches/chromium/fix_on-screen-keyboard_hides_on_input_blur_in_webview.patch index cdbfc9ed861a8..00d154fc7b7b6 100644 --- a/patches/chromium/fix_on-screen-keyboard_hides_on_input_blur_in_webview.patch +++ b/patches/chromium/fix_on-screen-keyboard_hides_on_input_blur_in_webview.patch @@ -45,10 +45,10 @@ index ed0641b888c6421b1791c086466bd9c158e9109d..3760b3823d5af3325017bb53f5b1d38e // RenderFrameMetadataProvider::Observer implementation. void OnRenderFrameMetadataChangedBeforeActivation( diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc -index 4ae175782ac6d7a705af0760b24843fd16ab0871..81ea4f9b8e559d380ad4a8a9ddd9b5edca014207 100644 +index 98471a78e68722d207fde77e4545dfe21f12e19a..69d07fb1eed22ffab2556107f3520b19a8f066f2 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc -@@ -8169,7 +8169,7 @@ void WebContentsImpl::OnFocusedElementChangedInFrame( +@@ -8173,7 +8173,7 @@ void WebContentsImpl::OnFocusedElementChangedInFrame( "WebContentsImpl::OnFocusedElementChangedInFrame", "render_frame_host", frame); RenderWidgetHostViewBase* root_view = diff --git a/patches/chromium/webview_fullscreen.patch b/patches/chromium/webview_fullscreen.patch index 766acbfc60a09..2704591c3c4dc 100644 --- a/patches/chromium/webview_fullscreen.patch +++ b/patches/chromium/webview_fullscreen.patch @@ -8,7 +8,8 @@ the parent frame should also enter fullscreen mode too. Chromium handles this for iframes, but not for webviews as they are essentially main frames instead of child frames. -This patch makes webviews propagate the fullscreen state to embedder. +This patch makes webviews propagate the fullscreen state to embedder.It also handles a +DCHECK preventing guest webcontents from becoming the focused webContents. Note that we also need to manually update embedder's `api::WebContents::IsFullscreenForTabOrPending` value. @@ -35,3 +36,67 @@ index 544f2bcf906ad40769e5961d97211fbba549d03a..2c5a63a85ba37573182ab9b8731f7094 // Focus the window if another frame may have delegated the capability. if (had_fullscreen_token && !GetView()->HasFocus()) GetView()->Focus(); +diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc +index 699e13391bd408aff3c862820d531c968e05743a..98471a78e68722d207fde77e4545dfe21f12e19a 100644 +--- a/content/browser/web_contents/web_contents_impl.cc ++++ b/content/browser/web_contents/web_contents_impl.cc +@@ -3493,21 +3493,25 @@ KeyboardEventProcessingResult WebContentsImpl::PreHandleKeyboardEvent( + const NativeWebKeyboardEvent& event) { + OPTIONAL_TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("content.verbose"), + "WebContentsImpl::PreHandleKeyboardEvent"); +- auto* outermost_contents = GetOutermostWebContents(); +- // TODO(wjmaclean): Generalize this to forward all key events to the outermost +- // delegate's handler. +- if (outermost_contents != this && IsFullscreen() && +- event.windows_key_code == ui::VKEY_ESCAPE) { +- // When an inner WebContents has focus and is fullscreen, redirect +- // key events to the outermost WebContents so it can be handled by that +- // WebContents' delegate. +- if (outermost_contents->PreHandleKeyboardEvent(event) == +- KeyboardEventProcessingResult::HANDLED) { ++ ++ auto handled = delegate_ ? delegate_->PreHandleKeyboardEvent(this, event) ++ : KeyboardEventProcessingResult::NOT_HANDLED; ++ ++ if (IsFullscreen() && event.windows_key_code == ui::VKEY_ESCAPE) { ++ if (handled == KeyboardEventProcessingResult::HANDLED) + return KeyboardEventProcessingResult::HANDLED; ++ ++ // When an inner WebContents has focus and is fullscreen, traverse through ++ // containing webcontents to any that may handle the escape key. ++ while (auto* outer_web_contents = GetOuterWebContents()) { ++ auto result = outer_web_contents->PreHandleKeyboardEvent(event); ++ if (result == KeyboardEventProcessingResult::HANDLED) { ++ return KeyboardEventProcessingResult::HANDLED; ++ } + } + } +- return delegate_ ? delegate_->PreHandleKeyboardEvent(this, event) +- : KeyboardEventProcessingResult::NOT_HANDLED; ++ ++ return handled; + } + + bool WebContentsImpl::HandleMouseEvent(const blink::WebMouseEvent& event) { +@@ -3639,7 +3643,7 @@ void WebContentsImpl::EnterFullscreenMode( + OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::EnterFullscreenMode"); + DCHECK(CanEnterFullscreenMode(requesting_frame, options)); + DCHECK(requesting_frame->IsActive()); +- DCHECK(ContainsOrIsFocusedWebContents()); ++ DCHECK(ContainsOrIsFocusedWebContents() || IsGuest()); + + // When WebView is the `delegate_` we can end up with VisualProperties changes + // synchronously. Notify the view ahead so it can handle the transition. +diff --git a/third_party/blink/renderer/core/fullscreen/fullscreen.cc b/third_party/blink/renderer/core/fullscreen/fullscreen.cc +index 1d4fc3f0ffe1f74a57df49e644e49e6b25b5e2c4..85f4190f0de44d919e82483536b28bf1f069ec63 100644 +--- a/third_party/blink/renderer/core/fullscreen/fullscreen.cc ++++ b/third_party/blink/renderer/core/fullscreen/fullscreen.cc +@@ -99,7 +99,7 @@ void FullscreenElementChanged(Document& document, + // is the iframe element for the out-of-process frame that contains the + // fullscreen element. Hence, it must match :-webkit-full-screen-ancestor. + if (new_request_type & FullscreenRequestType::kForCrossProcessDescendant) { +- DCHECK(IsA(new_element)); ++ // DCHECK(IsA(new_element)); + new_element->SetContainsFullScreenElement(true); + } + new_element->SetContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(