refactor: use upstream content protection logic on macOS (#46780)

* refactor: use upstream content protection logic on macOS

* Update shell/browser/native_window.h

Co-authored-by: Charles Kerr <charles@charleskerr.com>

---------

Co-authored-by: Charles Kerr <charles@charleskerr.com>
This commit is contained in:
Shelley Vohr 2025-04-26 18:31:30 +02:00 committed by GitHub
parent c2ab63f6d7
commit b03c71213e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 17 additions and 30 deletions

View file

@ -26,6 +26,7 @@
#include "shell/common/options_switches.h" #include "shell/common/options_switches.h"
#include "ui/base/hit_test.h" #include "ui/base/hit_test.h"
#include "ui/compositor/compositor.h" #include "ui/compositor/compositor.h"
#include "ui/views/widget/native_widget_private.h"
#include "ui/views/widget/widget.h" #include "ui/views/widget/widget.h"
#if !BUILDFLAG(IS_MAC) #if !BUILDFLAG(IS_MAC)
@ -822,6 +823,20 @@ void NativeWindow::HandlePendingFullscreenTransitions() {
SetFullScreen(next_transition); SetFullScreen(next_transition);
} }
void NativeWindow::SetContentProtection(bool enable) {
#if !BUILDFLAG(IS_LINUX)
widget()->native_widget_private()->SetAllowScreenshots(!enable);
#endif
}
bool NativeWindow::IsContentProtected() const {
#if !BUILDFLAG(IS_LINUX)
return !widget()->native_widget_private()->AreScreenshotsAllowed();
#else // Not implemented on Linux
return false;
#endif
}
bool NativeWindow::IsTranslucent() const { bool NativeWindow::IsTranslucent() const {
// Transparent windows are translucent // Transparent windows are translucent
if (transparent()) { if (transparent()) {

View file

@ -186,8 +186,8 @@ class NativeWindow : public base::SupportsUserData,
virtual void SetDocumentEdited(bool edited) {} virtual void SetDocumentEdited(bool edited) {}
virtual bool IsDocumentEdited() const; virtual bool IsDocumentEdited() const;
virtual void SetIgnoreMouseEvents(bool ignore, bool forward) = 0; virtual void SetIgnoreMouseEvents(bool ignore, bool forward) = 0;
virtual void SetContentProtection(bool enable) = 0; void SetContentProtection(bool enable);
virtual bool IsContentProtected() const = 0; bool IsContentProtected() const;
virtual void SetFocusable(bool focusable) {} virtual void SetFocusable(bool focusable) {}
virtual bool IsFocusable() const; virtual bool IsFocusable() const;
virtual void SetMenu(ElectronMenuModel* menu) {} virtual void SetMenu(ElectronMenuModel* menu) {}

View file

@ -109,8 +109,6 @@ class NativeWindowMac : public NativeWindow,
void SetIgnoreMouseEvents(bool ignore, bool forward) override; void SetIgnoreMouseEvents(bool ignore, bool forward) override;
bool IsHiddenInMissionControl() const override; bool IsHiddenInMissionControl() const override;
void SetHiddenInMissionControl(bool hidden) override; void SetHiddenInMissionControl(bool hidden) override;
void SetContentProtection(bool enable) override;
bool IsContentProtected() const override;
void SetFocusable(bool focusable) override; void SetFocusable(bool focusable) override;
bool IsFocusable() const override; bool IsFocusable() const override;
void SetParentWindow(NativeWindow* parent) override; void SetParentWindow(NativeWindow* parent) override;

View file

@ -1172,15 +1172,6 @@ void NativeWindowMac::SetIgnoreMouseEvents(bool ignore, bool forward) {
} }
} }
void NativeWindowMac::SetContentProtection(bool enable) {
[window_
setSharingType:enable ? NSWindowSharingNone : NSWindowSharingReadOnly];
}
bool NativeWindowMac::IsContentProtected() const {
return [window_ sharingType] == NSWindowSharingNone;
}
void NativeWindowMac::SetFocusable(bool focusable) { void NativeWindowMac::SetFocusable(bool focusable) {
// No known way to unfocus the window if it had the focus. Here we do not // No known way to unfocus the window if it had the focus. Here we do not
// want to call Focus(false) because it moves the window to the back, i.e. // want to call Focus(false) because it moves the window to the back, i.e.

View file

@ -44,7 +44,6 @@
#include "ui/ozone/public/ozone_platform.h" #include "ui/ozone/public/ozone_platform.h"
#include "ui/views/background.h" #include "ui/views/background.h"
#include "ui/views/controls/webview/webview.h" #include "ui/views/controls/webview/webview.h"
#include "ui/views/widget/native_widget_private.h"
#include "ui/views/widget/widget.h" #include "ui/views/widget/widget.h"
#include "ui/views/window/client_view.h" #include "ui/views/window/client_view.h"
#include "ui/wm/core/shadow_types.h" #include "ui/wm/core/shadow_types.h"
@ -1314,20 +1313,6 @@ void NativeWindowViews::SetIgnoreMouseEvents(bool ignore, bool forward) {
#endif #endif
} }
void NativeWindowViews::SetContentProtection(bool enable) {
#if BUILDFLAG(IS_WIN)
widget()->native_widget_private()->SetAllowScreenshots(!enable);
#endif
}
bool NativeWindowViews::IsContentProtected() const {
#if BUILDFLAG(IS_WIN)
return !widget()->native_widget_private()->AreScreenshotsAllowed();
#else // Not implemented on Linux
return false;
#endif
}
void NativeWindowViews::SetFocusable(bool focusable) { void NativeWindowViews::SetFocusable(bool focusable) {
widget()->widget_delegate()->SetCanActivate(focusable); widget()->widget_delegate()->SetCanActivate(focusable);
#if BUILDFLAG(IS_WIN) #if BUILDFLAG(IS_WIN)

View file

@ -115,8 +115,6 @@ class NativeWindowViews : public NativeWindow,
void SetOpacity(const double opacity) override; void SetOpacity(const double opacity) override;
double GetOpacity() const override; double GetOpacity() const override;
void SetIgnoreMouseEvents(bool ignore, bool forward) override; void SetIgnoreMouseEvents(bool ignore, bool forward) override;
void SetContentProtection(bool enable) override;
bool IsContentProtected() const override;
void SetFocusable(bool focusable) override; void SetFocusable(bool focusable) override;
bool IsFocusable() const override; bool IsFocusable() const override;
void SetMenu(ElectronMenuModel* menu_model) override; void SetMenu(ElectronMenuModel* menu_model) override;