diff --git a/patches/chromium/.patches b/patches/chromium/.patches index feb74c1e343bf..6dc083326fbdd 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -98,7 +98,7 @@ fix_expose_decrementcapturercount_in_web_contents_impl.patch add_ui_scopedcliboardwriter_writeunsaferawdata.patch feat_add_data_parameter_to_processsingleton.patch load_v8_snapshot_in_browser_process.patch -fix_patch_out_permissions_checks_in_exclusive_access.patch +fix_adapt_exclusive_access_for_electron_needs.patch fix_aspect_ratio_with_max_size.patch fix_dont_delete_SerialPortManager_on_main_thread.patch fix_crash_when_saving_edited_pdf_files.patch diff --git a/patches/chromium/fix_patch_out_permissions_checks_in_exclusive_access.patch b/patches/chromium/fix_adapt_exclusive_access_for_electron_needs.patch similarity index 81% rename from patches/chromium/fix_patch_out_permissions_checks_in_exclusive_access.patch rename to patches/chromium/fix_adapt_exclusive_access_for_electron_needs.patch index 0d8d675b6f839..ad32e434ee6bd 100644 --- a/patches/chromium/fix_patch_out_permissions_checks_in_exclusive_access.patch +++ b/patches/chromium/fix_adapt_exclusive_access_for_electron_needs.patch @@ -1,20 +1,22 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Mon, 25 Oct 2021 21:45:57 +0200 -Subject: fix: patch out permissions checks in exclusive_access +Subject: fix: adapt exclusive_access for electron needs This patch is necessary in order to properly enable navigator.keyboard.{(un)?lock}() functionality. We don't have a concept of PermissionManager nor of a Profile, so this would not affect usage of the API. -We might consider potentially using our own permissions handler, -but it's not strictly necessary for this API to work to spec. - -Profile check has been upstreamed at https://chromium-review.googlesource.com/c/chromium/src/+/3247196 +We also need to ensure that NotifyExclusiveTabAccessLost is called +on all platforms in FullscreenController::ExitFullscreenModeInternal() +and not just macOS, since Electron's native window impls report state +change fairly instantly as well, and so pressing escape won't work on +Linux or Windows to un-fullscreen in some circumstances without this +change. diff --git a/chrome/browser/ui/exclusive_access/fullscreen_controller.cc b/chrome/browser/ui/exclusive_access/fullscreen_controller.cc -index ac9f8b06b066adb53a92cb1768e21d6b6e9be2a8..9fb77b8d7c3d9cb49dcb3ac1f2495fa52f53932e 100644 +index ac9f8b06b066adb53a92cb1768e21d6b6e9be2a8..ebc0f0fe568d7219486360bbe4b6c65e415735e4 100644 --- a/chrome/browser/ui/exclusive_access/fullscreen_controller.cc +++ b/chrome/browser/ui/exclusive_access/fullscreen_controller.cc @@ -16,12 +16,16 @@ @@ -112,6 +114,22 @@ index ac9f8b06b066adb53a92cb1768e21d6b6e9be2a8..9fb77b8d7c3d9cb49dcb3ac1f2495fa5 if (option == BROWSER) base::RecordAction(base::UserMetricsAction("ToggleFullscreen")); +@@ -507,12 +517,12 @@ void FullscreenController::ExitFullscreenModeInternal() { + RecordExitingUMA(); + toggled_into_fullscreen_ = false; + started_fullscreen_transition_ = true; +-#if BUILDFLAG(IS_MAC) +- // Mac windows report a state change instantly, and so we must also clear ++ ++ // Electron native windows report a state change instantly, and so we must also clear + // state_prior_to_tab_fullscreen_ to match them else other logic using + // state_prior_to_tab_fullscreen_ will be incorrect. + NotifyTabExclusiveAccessLost(); +-#endif ++ + exclusive_access_manager()->context()->ExitFullscreen(); + extension_caused_fullscreen_ = GURL(); + diff --git a/chrome/browser/ui/exclusive_access/fullscreen_controller.h b/chrome/browser/ui/exclusive_access/fullscreen_controller.h index f0841982cb296079c8b943067564d74bc1b7067c..49f59fc2c12c98faada52e0e7c8c9c6e6251b599 100644 --- a/chrome/browser/ui/exclusive_access/fullscreen_controller.h diff --git a/shell/browser/api/electron_api_web_contents.cc b/shell/browser/api/electron_api_web_contents.cc index eda5983d56c8c..b48a45bb8bcc2 100644 --- a/shell/browser/api/electron_api_web_contents.cc +++ b/shell/browser/api/electron_api_web_contents.cc @@ -1308,8 +1308,6 @@ void WebContents::EnterFullscreenModeForTab( base::BindRepeating(&WebContents::OnEnterFullscreenModeForTab, base::Unretained(this), requesting_frame, options); permission_helper->RequestFullscreenPermission(callback); - exclusive_access_manager_->fullscreen_controller()->EnterFullscreenModeForTab( - requesting_frame, options.display_id); } void WebContents::OnEnterFullscreenModeForTab( @@ -1325,6 +1323,9 @@ void WebContents::OnEnterFullscreenModeForTab( return; } + exclusive_access_manager_->fullscreen_controller()->EnterFullscreenModeForTab( + requesting_frame, options.display_id); + SetHtmlApiFullscreen(true); if (native_fullscreen_) {