diff --git a/shell/browser/native_window.cc b/shell/browser/native_window.cc index 50a76e39853..d8a0e49c83f 100644 --- a/shell/browser/native_window.cc +++ b/shell/browser/native_window.cc @@ -26,7 +26,6 @@ #include "shell/common/options_switches.h" #include "ui/base/hit_test.h" #include "ui/compositor/compositor.h" -#include "ui/views/widget/native_widget_private.h" #include "ui/views/widget/widget.h" #if !BUILDFLAG(IS_MAC) @@ -819,20 +818,6 @@ void NativeWindow::HandlePendingFullscreenTransitions() { 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 { // Transparent windows are translucent if (transparent()) { diff --git a/shell/browser/native_window.h b/shell/browser/native_window.h index 7a9b762c60b..831cf8947aa 100644 --- a/shell/browser/native_window.h +++ b/shell/browser/native_window.h @@ -186,8 +186,8 @@ class NativeWindow : public base::SupportsUserData, virtual void SetDocumentEdited(bool edited) {} virtual bool IsDocumentEdited() const; virtual void SetIgnoreMouseEvents(bool ignore, bool forward) = 0; - void SetContentProtection(bool enable); - bool IsContentProtected() const; + virtual void SetContentProtection(bool enable) = 0; + virtual bool IsContentProtected() const = 0; virtual void SetFocusable(bool focusable) {} virtual bool IsFocusable() const; virtual void SetMenu(ElectronMenuModel* menu) {} diff --git a/shell/browser/native_window_mac.h b/shell/browser/native_window_mac.h index fa51e9ee447..5420e14aecd 100644 --- a/shell/browser/native_window_mac.h +++ b/shell/browser/native_window_mac.h @@ -109,6 +109,8 @@ class NativeWindowMac : public NativeWindow, void SetIgnoreMouseEvents(bool ignore, bool forward) override; bool IsHiddenInMissionControl() const override; void SetHiddenInMissionControl(bool hidden) override; + void SetContentProtection(bool enable) override; + bool IsContentProtected() const override; void SetFocusable(bool focusable) override; bool IsFocusable() const override; void SetParentWindow(NativeWindow* parent) override; diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index 62b350fda7f..008c84a516b 100644 --- a/shell/browser/native_window_mac.mm +++ b/shell/browser/native_window_mac.mm @@ -1170,6 +1170,15 @@ 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) { // 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. diff --git a/shell/browser/native_window_views.cc b/shell/browser/native_window_views.cc index be8e5e124f5..d8f9210e17b 100644 --- a/shell/browser/native_window_views.cc +++ b/shell/browser/native_window_views.cc @@ -44,6 +44,7 @@ #include "ui/ozone/public/ozone_platform.h" #include "ui/views/background.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/window/client_view.h" #include "ui/wm/core/shadow_types.h" @@ -1324,6 +1325,20 @@ void NativeWindowViews::SetIgnoreMouseEvents(bool ignore, bool forward) { #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) { widget()->widget_delegate()->SetCanActivate(focusable); #if BUILDFLAG(IS_WIN) diff --git a/shell/browser/native_window_views.h b/shell/browser/native_window_views.h index 5bc9db1ea7b..8ef7d2b783a 100644 --- a/shell/browser/native_window_views.h +++ b/shell/browser/native_window_views.h @@ -115,6 +115,8 @@ class NativeWindowViews : public NativeWindow, void SetOpacity(const double opacity) override; double GetOpacity() const override; void SetIgnoreMouseEvents(bool ignore, bool forward) override; + void SetContentProtection(bool enable) override; + bool IsContentProtected() const override; void SetFocusable(bool focusable) override; bool IsFocusable() const override; void SetMenu(ElectronMenuModel* menu_model) override;