mirror of
https://github.com/electron/electron.git
synced 2026-01-08 23:18:06 -05:00
* chore: bump chromium in DEPS to 142.0.7401.0
* 6911185: Reland "Send touch moves async immediately after scroll starts."
https://chromium-review.googlesource.com/c/chromium/src/+/6911185
* 6906887: mac: click through content area in main window
https://chromium-review.googlesource.com/c/chromium/src/+/6906887
* 6916667: Expose helper to eliminate duplicate recipes.
https://chromium-review.googlesource.com/c/chromium/src/+/6916667
* 6909842: Switch LegacyRenderWidgetHostHWND from atlcrack.h to msg_util.h.
https://chromium-review.googlesource.com/c/chromium/src/+/6909842
* 6884056: Remove the SecKeychain implementation for the Keychain interface
https://chromium-review.googlesource.com/c/chromium/src/+/6884056
* 6904906: Remove `WTF::` in renderer/core/[p-x].*/
https://chromium-review.googlesource.com/c/chromium/src/+/6904906
* 6556585: [persistent_cache]: PersistentCache for CodeCache
https://chromium-review.googlesource.com/c/chromium/src/+/6556585
* 6904864: Layout: Support abort on the text placeholder layout
https://chromium-review.googlesource.com/c/chromium/src/+/6904864
* chore: fixup patch indices
* chore: bump chromium in DEPS to 142.0.7402.0
* fixup! 6556585: [persistent_cache]: PersistentCache for CodeCache
* chore: fixup patch indices
* 6905244: [api] Remove deprecated `GetIsolate`
https://chromium-review.googlesource.com/c/v8/v8/+/6905244
* 6897694: Remove NativeTheme::UserHasContrastPreference().
https://chromium-review.googlesource.com/c/chromium/src/+/6897694
* 6897477: Remove GetPlatformHighContrastColorScheme() and enum.
https://chromium-review.googlesource.com/c/chromium/src/+/6897477
* 6918198: Reland "Rename display::Screen::GetScreen() to display::Screen::Get()"
https://chromium-review.googlesource.com/c/chromium/src/+/6918198
* 6907147: [LNA] add use counter for websocket mixed-content issues
https://chromium-review.googlesource.com/c/chromium/src/+/6907147
* 6914538: Replace WTF::String with blink::String
https://chromium-review.googlesource.com/c/website/+/6914538
* 6892538: [video pip] Allow touchscreen users to toggle live caption
https://chromium-review.googlesource.com/c/chromium/src/+/6892538
* chore: fix patch
* chore: bump chromium in DEPS to 142.0.7403.0
* build: remove ninja logs
* chore: fixup patch indices
* 6920670: [PDF] Change pdf_extension_util to return dictionaries
https://chromium-review.googlesource.com/c/chromium/src/+/6920670
* 6917864: Devirtualize and inline various NativeTheme getters.
https://chromium-review.googlesource.com/c/chromium/src/+/6917864
* 6920873: [PDF] Simplify PDFDocumentHelperClient::OnSaveURL()
https://chromium-review.googlesource.com/c/chromium/src/+/6920873
* build: don't kill blink/web_tests
* 6923655: Roll libc++ from 954086abf121 to b87b2bb112f8 (4 revisions)
https://chromium-review.googlesource.com/c/chromium/src/+/6923655
* 6905242: Reland "[CSP] Clarify report-only console messages."
https://chromium-review.googlesource.com/c/chromium/src/+/6905242
* fixup! 6897694: Remove NativeTheme::UserHasContrastPreference().
* chore: bump chromium in DEPS to 142.0.7405.0
* 6910012: [LNA] Enable LNA enforcement by default
https://chromium-review.googlesource.com/c/chromium/src/+/6910012
* 6929444: Combine GetInstanceForXXX() implementations.
https://chromium-review.googlesource.com/c/chromium/src/+/6929444
* 6927873: Rename native_widget_types.h -> native_ui_types.h
https://chromium-review.googlesource.com/c/chromium/src/+/6927873
* 6853978: Init perfetto really early in WebView
https://chromium-review.googlesource.com/c/chromium/src/+/6853978
* 6874886: Use only one picker observer to avoid getting duplicate notifications
https://chromium-review.googlesource.com/c/chromium/src/+/6874886
* chore: fixup patch indices
* fix: Protocol complex inline dtor
* chore: bump chromium in DEPS to 142.0.7407.0
* chore: bump chromium in DEPS to 142.0.7409.0
* chore: bump chromium in DEPS to 142.0.7411.0
* chore: bump chromium in DEPS to 142.0.7413.0
* fixup! 6905242: Reland "[CSP] Clarify report-only console messages."
* 6927233: Remove NativeTheme "use dark colors" bit.
https://chromium-review.googlesource.com/c/chromium/src/+/6927233
* chore: fixup patch indices
* 6899206: [PermissionOptions] Multi-state permission subscriptions & setting changes
https://chromium-review.googlesource.com/c/chromium/src/+/6899206
* chore: bump chromium in DEPS to 142.0.7415.0
* 6936895: [headless] Remove headless flag from views::Widget class
https://chromium-review.googlesource.com/c/chromium/src/+/6936895
We should probably followup on this to see if there is a way to do this without reverting this CL.
* 6937023: Reland "Use new DBus type system in dbus_xdg::Request"
https://chromium-review.googlesource.com/c/chromium/src/+/6937023
* chore: update patches
* 6944749: Add GN visibility list to //components/os_crypt/sync
https://chromium-review.googlesource.com/c/chromium/src/+/6944749
* Further replace sub_capture_target_version with CaptureVersion
https://chromium-review.googlesource.com/c/chromium/src/+/6935455
* fixup for lint
* chore: update filenames.libcxx.gni
* chore: bump chromium in DEPS to 142.0.7417.0
* 6944136: Reorder NativeTheme headers/.cc files.
Refs https://chromium-review.googlesource.com/c/chromium/src/+/6944136
* 6939701: [DSSC][4] Make FSVCI objects aware of their capture-version-source
Refs https://chromium-review.googlesource.com/c/chromium/src/+/6939701
* 6944404: Remove extraneous callback call
Refs https://chromium-review.googlesource.com/c/chromium/src/+/6944404
* 6936124: [FPF-CI]: Introduce blink::NoiseToken for fingerprinting protection
Refs https://chromium-review.googlesource.com/c/chromium/src/+/6936124
* chore: update patches
* fixup! 6927233: Remove NativeTheme "use dark colors" bit.
Refs https://chromium-review.googlesource.com/c/chromium/src/+/6927233
* fixup! 6917864: Devirtualize and inline various NativeTheme getters.
Refs https://chromium-review.googlesource.com/c/chromium/src/+/6917864
* 6937588: Add initial OsSettingsProvider object, supplying caret blink interval.
Refs https://chromium-review.googlesource.com/c/chromium/src/+/6937588
* fixup! 6905242: Reland "[CSP] Clarify report-only console messages."
Refs https://chromium-review.googlesource.com/c/chromium/src/+/6905242
* 6907515: Replace SingletonHwndObserver with a CallbackList on SingletonHwnd.
Refs https://chromium-review.googlesource.com/c/chromium/src/+/6907515
* 6910482: [Save to Drive] Implement retry functionality
Refs https://chromium-review.googlesource.com/c/chromium/src/+/6910482
* fixup! 6927233: Remove NativeTheme "use dark colors" bit.
Refs https://chromium-review.googlesource.com/c/chromium/src/+/6927233
* Revert "build: remove ninja logs"
This reverts commit 72874740fd.
* test: fix flakey test picked from PR 48205
---------
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
Co-authored-by: Alice Zhao <alicelovescake@anthropic.com>
268 lines
10 KiB
Diff
268 lines
10 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: David Sanders <dsanders11@ucsbalum.com>
|
|
Date: Wed, 8 Jan 2025 23:53:27 -0800
|
|
Subject: Revert "Code Health: Clean up stale MacWebContentsOcclusion"
|
|
|
|
Chrome has removed this WebContentsOcclusion feature flag upstream,
|
|
which is now causing our visibility tests to break. This patch
|
|
restores the legacy occlusion behavior to ensure the roll can continue
|
|
while we debug the issue.
|
|
|
|
This patch can be removed when the root cause because the visibility
|
|
specs failing on MacOS only is debugged and fixed. It should be removed
|
|
before Electron 35's stable date.
|
|
|
|
Refs: https://chromium-review.googlesource.com/c/chromium/src/+/6078344
|
|
|
|
This partially (leaves the removal of the feature flag) reverts
|
|
ef865130abd5539e7bce12308659b19980368f12.
|
|
|
|
diff --git a/content/app_shim_remote_cocoa/web_contents_occlusion_checker_mac.h b/content/app_shim_remote_cocoa/web_contents_occlusion_checker_mac.h
|
|
index 428902f90950b2e9434c8a624a313268ebb80cd4..afcc3bc481be6a16119f7e2af647276cb0dafa1e 100644
|
|
--- a/content/app_shim_remote_cocoa/web_contents_occlusion_checker_mac.h
|
|
+++ b/content/app_shim_remote_cocoa/web_contents_occlusion_checker_mac.h
|
|
@@ -12,6 +12,8 @@
|
|
#import "content/app_shim_remote_cocoa/web_contents_view_cocoa.h"
|
|
#include "content/common/web_contents_ns_view_bridge.mojom.h"
|
|
|
|
+extern CONTENT_EXPORT const base::FeatureParam<bool>
|
|
+ kEnhancedWindowOcclusionDetection;
|
|
extern CONTENT_EXPORT const base::FeatureParam<bool>
|
|
kDisplaySleepAndAppHideDetection;
|
|
|
|
diff --git a/content/app_shim_remote_cocoa/web_contents_occlusion_checker_mac.mm b/content/app_shim_remote_cocoa/web_contents_occlusion_checker_mac.mm
|
|
index 32523e6a6f800de3917d18825f94c66ef4ea4388..634d68b9a2840d7c9e7c3b5e23d8b1b8ac02456b 100644
|
|
--- a/content/app_shim_remote_cocoa/web_contents_occlusion_checker_mac.mm
|
|
+++ b/content/app_shim_remote_cocoa/web_contents_occlusion_checker_mac.mm
|
|
@@ -19,6 +19,12 @@
|
|
#include "content/public/browser/content_browser_client.h"
|
|
#include "content/public/common/content_client.h"
|
|
|
|
+using features::kMacWebContentsOcclusion;
|
|
+
|
|
+// Experiment features.
|
|
+const base::FeatureParam<bool> kEnhancedWindowOcclusionDetection{
|
|
+ &kMacWebContentsOcclusion, "EnhancedWindowOcclusionDetection", false};
|
|
+
|
|
namespace {
|
|
|
|
NSString* const kWindowDidChangePositionInWindowList =
|
|
@@ -127,7 +133,8 @@ - (void)dealloc {
|
|
|
|
- (BOOL)isManualOcclusionDetectionEnabled {
|
|
return [WebContentsOcclusionCheckerMac
|
|
- manualOcclusionDetectionSupportedForCurrentMacOSVersion];
|
|
+ manualOcclusionDetectionSupportedForCurrentMacOSVersion] &&
|
|
+ kEnhancedWindowOcclusionDetection.Get();
|
|
}
|
|
|
|
// Alternative implementation of orderWindow:relativeTo:. Replaces
|
|
diff --git a/content/app_shim_remote_cocoa/web_contents_view_cocoa.mm b/content/app_shim_remote_cocoa/web_contents_view_cocoa.mm
|
|
index d8167e854a3264b19a07544039fd01aba45e27a1..2e5a4ae715529e3b7b5c8fbb7195c7cef78ca4ee 100644
|
|
--- a/content/app_shim_remote_cocoa/web_contents_view_cocoa.mm
|
|
+++ b/content/app_shim_remote_cocoa/web_contents_view_cocoa.mm
|
|
@@ -29,6 +29,7 @@
|
|
#include "ui/resources/grit/ui_resources.h"
|
|
|
|
using content::DropData;
|
|
+using features::kMacWebContentsOcclusion;
|
|
using remote_cocoa::mojom::DraggingInfo;
|
|
using remote_cocoa::mojom::SelectionDirection;
|
|
|
|
@@ -124,12 +125,15 @@ @implementation WebContentsViewCocoa {
|
|
WebDragSource* __strong _dragSource;
|
|
NSDragOperation _dragOperation;
|
|
|
|
+ BOOL _inFullScreenTransition;
|
|
BOOL _willSetWebContentsOccludedAfterDelay;
|
|
}
|
|
|
|
+ (void)initialize {
|
|
- // Create the WebContentsOcclusionCheckerMac shared instance.
|
|
- [WebContentsOcclusionCheckerMac sharedInstance];
|
|
+ if (base::FeatureList::IsEnabled(kMacWebContentsOcclusion)) {
|
|
+ // Create the WebContentsOcclusionCheckerMac shared instance.
|
|
+ [WebContentsOcclusionCheckerMac sharedInstance];
|
|
+ }
|
|
}
|
|
|
|
- (instancetype)initWithViewsHostableView:(ui::ViewsHostableView*)v {
|
|
@@ -440,6 +444,7 @@ - (void)updateWebContentsVisibility:
|
|
(remote_cocoa::mojom::Visibility)visibility {
|
|
using remote_cocoa::mojom::Visibility;
|
|
|
|
+ DCHECK(base::FeatureList::IsEnabled(kMacWebContentsOcclusion));
|
|
if (!_host)
|
|
return;
|
|
|
|
@@ -485,6 +490,20 @@ - (void)updateWebContentsVisibility {
|
|
[self updateWebContentsVisibility:visibility];
|
|
}
|
|
|
|
+- (void)legacyUpdateWebContentsVisibility {
|
|
+ using remote_cocoa::mojom::Visibility;
|
|
+ if (!_host || _inFullScreenTransition)
|
|
+ return;
|
|
+ Visibility visibility = Visibility::kVisible;
|
|
+ if ([self isHiddenOrHasHiddenAncestor] || ![self window])
|
|
+ visibility = Visibility::kHidden;
|
|
+ else if ([[self window] occlusionState] & NSWindowOcclusionStateVisible)
|
|
+ visibility = Visibility::kVisible;
|
|
+ else
|
|
+ visibility = Visibility::kOccluded;
|
|
+ _host->OnWindowVisibilityChanged(visibility);
|
|
+}
|
|
+
|
|
- (void)resizeSubviewsWithOldSize:(NSSize)oldBoundsSize {
|
|
// Subviews do not participate in auto layout unless the the size this view
|
|
// changes. This allows RenderWidgetHostViewMac::SetBounds(..) to select a
|
|
@@ -507,11 +526,39 @@ - (void)viewWillMoveToWindow:(NSWindow*)newWindow {
|
|
|
|
NSWindow* oldWindow = [self window];
|
|
|
|
+ if (base::FeatureList::IsEnabled(kMacWebContentsOcclusion)) {
|
|
+ if (oldWindow) {
|
|
+ [notificationCenter
|
|
+ removeObserver:self
|
|
+ name:NSWindowDidChangeOcclusionStateNotification
|
|
+ object:oldWindow];
|
|
+ }
|
|
+
|
|
+ if (newWindow) {
|
|
+ [notificationCenter
|
|
+ addObserver:self
|
|
+ selector:@selector(windowChangedOcclusionState:)
|
|
+ name:NSWindowDidChangeOcclusionStateNotification
|
|
+ object:newWindow];
|
|
+ }
|
|
+
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ _inFullScreenTransition = NO;
|
|
if (oldWindow) {
|
|
- [notificationCenter
|
|
- removeObserver:self
|
|
- name:NSWindowDidChangeOcclusionStateNotification
|
|
- object:oldWindow];
|
|
+ NSArray* notificationsToRemove = @[
|
|
+ NSWindowDidChangeOcclusionStateNotification,
|
|
+ NSWindowWillEnterFullScreenNotification,
|
|
+ NSWindowDidEnterFullScreenNotification,
|
|
+ NSWindowWillExitFullScreenNotification,
|
|
+ NSWindowDidExitFullScreenNotification
|
|
+ ];
|
|
+ for (NSString* notificationName in notificationsToRemove) {
|
|
+ [notificationCenter removeObserver:self
|
|
+ name:notificationName
|
|
+ object:oldWindow];
|
|
+ }
|
|
}
|
|
|
|
if (newWindow) {
|
|
@@ -519,26 +566,66 @@ - (void)viewWillMoveToWindow:(NSWindow*)newWindow {
|
|
selector:@selector(windowChangedOcclusionState:)
|
|
name:NSWindowDidChangeOcclusionStateNotification
|
|
object:newWindow];
|
|
+ // The fullscreen transition causes spurious occlusion notifications.
|
|
+ // See https://crbug.com/1081229
|
|
+ [notificationCenter addObserver:self
|
|
+ selector:@selector(fullscreenTransitionStarted:)
|
|
+ name:NSWindowWillEnterFullScreenNotification
|
|
+ object:newWindow];
|
|
+ [notificationCenter addObserver:self
|
|
+ selector:@selector(fullscreenTransitionComplete:)
|
|
+ name:NSWindowDidEnterFullScreenNotification
|
|
+ object:newWindow];
|
|
+ [notificationCenter addObserver:self
|
|
+ selector:@selector(fullscreenTransitionStarted:)
|
|
+ name:NSWindowWillExitFullScreenNotification
|
|
+ object:newWindow];
|
|
+ [notificationCenter addObserver:self
|
|
+ selector:@selector(fullscreenTransitionComplete:)
|
|
+ name:NSWindowDidExitFullScreenNotification
|
|
+ object:newWindow];
|
|
}
|
|
}
|
|
|
|
- (void)windowChangedOcclusionState:(NSNotification*)aNotification {
|
|
- // Only respond to occlusion notifications sent by the occlusion checker.
|
|
- NSDictionary* userInfo = [aNotification userInfo];
|
|
- NSString* occlusionCheckerKey = [WebContentsOcclusionCheckerMac className];
|
|
- if (userInfo[occlusionCheckerKey] != nil)
|
|
- [self updateWebContentsVisibility];
|
|
+ if (!base::FeatureList::IsEnabled(kMacWebContentsOcclusion)) {
|
|
+ [self legacyUpdateWebContentsVisibility];
|
|
+ return;
|
|
+ }
|
|
+}
|
|
+
|
|
+- (void)fullscreenTransitionStarted:(NSNotification*)notification {
|
|
+ _inFullScreenTransition = YES;
|
|
+}
|
|
+
|
|
+- (void)fullscreenTransitionComplete:(NSNotification*)notification {
|
|
+ _inFullScreenTransition = NO;
|
|
}
|
|
|
|
- (void)viewDidMoveToWindow {
|
|
+ if (!base::FeatureList::IsEnabled(kMacWebContentsOcclusion)) {
|
|
+ [self legacyUpdateWebContentsVisibility];
|
|
+ return;
|
|
+ }
|
|
+
|
|
[self updateWebContentsVisibility];
|
|
}
|
|
|
|
- (void)viewDidHide {
|
|
+ if (!base::FeatureList::IsEnabled(kMacWebContentsOcclusion)) {
|
|
+ [self legacyUpdateWebContentsVisibility];
|
|
+ return;
|
|
+ }
|
|
+
|
|
[self updateWebContentsVisibility];
|
|
}
|
|
|
|
- (void)viewDidUnhide {
|
|
+ if (!base::FeatureList::IsEnabled(kMacWebContentsOcclusion)) {
|
|
+ [self legacyUpdateWebContentsVisibility];
|
|
+ return;
|
|
+ }
|
|
+
|
|
[self updateWebContentsVisibility];
|
|
}
|
|
|
|
diff --git a/content/common/features.cc b/content/common/features.cc
|
|
index 97f8f8088a149a6c20ea5cf0193cb48034a4d7fb..3e5ed6c1e9df1f6e56076b80c8be2b016f242635 100644
|
|
--- a/content/common/features.cc
|
|
+++ b/content/common/features.cc
|
|
@@ -276,6 +276,14 @@ BASE_FEATURE(kInterestGroupUpdateIfOlderThan, base::FEATURE_ENABLED_BY_DEFAULT);
|
|
BASE_FEATURE(kIOSurfaceCapturer, base::FEATURE_ENABLED_BY_DEFAULT);
|
|
#endif
|
|
|
|
+// Feature that controls whether WebContentsOcclusionChecker should handle
|
|
+// occlusion notifications.
|
|
+#if BUILDFLAG(IS_MAC)
|
|
+BASE_FEATURE(kMacWebContentsOcclusion,
|
|
+ "MacWebContentsOcclusion",
|
|
+ base::FEATURE_ENABLED_BY_DEFAULT);
|
|
+#endif
|
|
+
|
|
// When enabled, child process will not terminate itself when IPC is reset.
|
|
BASE_FEATURE(kKeepChildProcessAfterIPCReset, base::FEATURE_DISABLED_BY_DEFAULT);
|
|
|
|
diff --git a/content/common/features.h b/content/common/features.h
|
|
index 933536411d1f1c2f2b7dec6dacd75a1c940a68aa..797937ce2d58d95a8aa5003323b5af8bd714ff01 100644
|
|
--- a/content/common/features.h
|
|
+++ b/content/common/features.h
|
|
@@ -103,6 +103,9 @@ CONTENT_EXPORT BASE_DECLARE_FEATURE(kInterestGroupUpdateIfOlderThan);
|
|
#if BUILDFLAG(IS_MAC)
|
|
CONTENT_EXPORT BASE_DECLARE_FEATURE(kIOSurfaceCapturer);
|
|
#endif
|
|
+#if BUILDFLAG(IS_MAC)
|
|
+CONTENT_EXPORT BASE_DECLARE_FEATURE(kMacWebContentsOcclusion);
|
|
+#endif
|
|
CONTENT_EXPORT BASE_DECLARE_FEATURE(kKeepChildProcessAfterIPCReset);
|
|
|
|
CONTENT_EXPORT BASE_DECLARE_FEATURE(kLocalNetworkAccessForWorkers);
|