diff --git a/patches/chromium/.patches b/patches/chromium/.patches index cd5a0ec76d19d..2ad7bf3c40dd4 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -105,7 +105,7 @@ add_ui_scopedcliboardwriter_writeunsaferawdata.patch feat_add_data_parameter_to_processsingleton.patch mas_gate_private_enterprise_APIs.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 4b3714b74eb22..a07e3deeb988b 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 467fed776d390e1a10075d62dab75fd8a6789627..5992117c90fbff008cf2f6a914f85c90ea117e47 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 467fed776d390e1a10075d62dab75fd8a6789627..5992117c90fbff008cf2f6a914f85c90 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 58a1ff5fb9fecd8c85905045ba43f43f0c63c2bb..15f868ac651c05eae6505adb80f2b4573a1166ef 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 c22dc39bd0d5b..c966621a426a3 100644 --- a/shell/browser/api/electron_api_web_contents.cc +++ b/shell/browser/api/electron_api_web_contents.cc @@ -1312,8 +1312,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( @@ -1329,6 +1327,9 @@ void WebContents::OnEnterFullscreenModeForTab( return; } + exclusive_access_manager_->fullscreen_controller()->EnterFullscreenModeForTab( + requesting_frame, options.display_id); + SetHtmlApiFullscreen(true); if (native_fullscreen_) {