electron/patches/chromium/mas_avoid_private_macos_api...

1990 lines
69 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Samuel Attard <samuel.r.attard@gmail.com>
Date: Thu, 20 Sep 2018 17:48:49 -0700
Subject: mas: avoid private macOS API usage
* Use the stub killring file when building blink
* Remove usage of the following private APIs
* abort_report_np
* pthread_fchdir_np
* pthread_chdir_np
* SetApplicationIsDaemon
* _LSSetApplicationLaunchServicesServerConnectionStatus
* AreDeviceAndUserJoinedToDomain
* _CFIsObjC
* AudioDeviceDuck
* NSNextStepFrame
* NSThemeFrame
* NSTextInputReplacementRangeAttributeName
* NSAccessibilityRemoteUIElement is unnecessary for Electron's use-case. We use it
for progressive web apps (where the AXTree is in the browser process, but macOS
needs to think it's coming from the PWA process). I think it can just be chopped
out -- if there are any side-effects, we should be able to work around them.
* CAContext removal
* For apps that spend a lot of time watching video (especially fullscreen video),
the power/battery usage will likely increase 1.5x to 2x. For something that is,
e.g, scrolling, it'll be smaller, more like 1.15x or 1.25x.
In terms of performance, the impact will likely be fairly small -- any app that
could hit 60fps before will likely still be able to hit 60fps. There may even be
cases where performance improves when disabling remote CoreAnimation (remote
CoreAnimation is really only about battery usage).
* CTFontDescriptorIsSystemUIFont is a private API, we're using an
_interesting_ technique in the MAS build to determine if the font is a
system font by checking if it's kCTFontPriorityAttribute is set to
system priority.
diff --git a/base/BUILD.gn b/base/BUILD.gn
index de197a0826f550f39c2438b5bcd53e7f1d463f1b..71d826841792ba99f1d2afca152332e7ff65ee1a 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -1040,6 +1040,7 @@ component("base") {
"//build:ios_buildflags",
"//build/config/compiler:compiler_buildflags",
"//third_party/modp_b64",
+ "//electron/build/config:generate_mas_config",
]
if (!is_nacl) {
# Used by metrics/crc32, except on NaCl builds.
diff --git a/base/enterprise_util_mac.mm b/base/enterprise_util_mac.mm
index 4bf9a3c27e05c6635b2beb8e880b5b43dbed61b5..f328fbb49c45991f44a9c75325491d0873746b61 100644
--- a/base/enterprise_util_mac.mm
+++ b/base/enterprise_util_mac.mm
@@ -16,6 +16,7 @@
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "base/strings/sys_string_conversions.h"
+#include "electron/mas.h"
namespace base {
@@ -116,6 +117,14 @@ DeviceUserDomainJoinState AreDeviceAndUserJoinedToDomain() {
DeviceUserDomainJoinState state{.device_joined = false,
.user_joined = false};
+#if IS_MAS_BUILD()
+ return state;
+ }();
+
+ return state;
+}
+#else
+
@autoreleasepool {
ODSession* session = [ODSession defaultSession];
if (session == nil) {
@@ -219,5 +228,6 @@ DeviceUserDomainJoinState AreDeviceAndUserJoinedToDomain() {
return state;
}
+#endif
} // namespace base
diff --git a/base/process/launch_mac.cc b/base/process/launch_mac.cc
index 697eff8aad0142ce0537feec816f9b31fd767061..504a3cba21622b8d79bf6563f3a009c47b093d50 100644
--- a/base/process/launch_mac.cc
+++ b/base/process/launch_mac.cc
@@ -21,13 +21,19 @@
#include "base/threading/scoped_blocking_call.h"
#include "base/threading/thread_restrictions.h"
#include "base/trace_event/base_tracing.h"
+#include "electron/mas.h"
+#if IS_MAS_BUILD()
+#include <sys/syscall.h>
+#endif
extern "C" {
// Changes the current thread's directory to a path or directory file
// descriptor.
+#if !IS_MAS_BUILD()
int pthread_chdir_np(const char* dir);
int pthread_fchdir_np(int fd);
+#endif
int responsibility_spawnattrs_setdisclaim(posix_spawnattr_t attrs,
int disclaim);
@@ -104,13 +110,27 @@ class PosixSpawnFileActions {
#if !BUILDFLAG(IS_MAC)
int ChangeCurrentThreadDirectory(const char* path) {
+#if IS_MAS_BUILD()
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ return syscall(SYS___pthread_chdir, path);
+ #pragma clang diagnostic pop
+#else
return pthread_chdir_np(path);
+#endif
}
// The recommended way to unset a per-thread cwd is to set a new value to an
// invalid file descriptor, per libpthread-218.1.3/private/private.h.
int ResetCurrentThreadDirectory() {
+#if IS_MAS_BUILD()
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ return syscall(SYS___pthread_fchdir, -1);
+ #pragma clang diagnostic pop
+#else
return pthread_fchdir_np(-1);
+#endif
}
#endif
@@ -234,7 +254,7 @@ Process LaunchProcess(const std::vector<std::string>& argv,
file_actions.Inherit(STDERR_FILENO);
}
-#if BUILDFLAG(IS_MAC)
+#if 0
if (options.disclaim_responsibility) {
DPSXCHECK(responsibility_spawnattrs_setdisclaim(attr.get(), 1));
}
diff --git a/base/process/process_info_mac.cc b/base/process/process_info_mac.cc
index 94a028be3c315edc0056408ab9ab41b6b001a1c1..abf9003bc71506d389ff77dc708c897113bba412 100644
--- a/base/process/process_info_mac.cc
+++ b/base/process/process_info_mac.cc
@@ -4,19 +4,27 @@
#include "base/process/process_info.h"
+#include "electron/mas.h"
+
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
+#if !IS_MAS_BUILD()
extern "C" {
pid_t responsibility_get_pid_responsible_for_pid(pid_t);
}
+#endif
namespace base {
bool IsProcessSelfResponsible() {
+#if !IS_MAS_BUILD()
const pid_t pid = getpid();
return responsibility_get_pid_responsible_for_pid(pid) == pid;
+#else
+ return true;
+#endif
}
} // namespace base
diff --git a/components/os_crypt/sync/BUILD.gn b/components/os_crypt/sync/BUILD.gn
index 3b81e00e1535ec729a521b83fe2471985d177e5c..094f52fd80bd91be4e705a457d12ea89271dc037 100644
--- a/components/os_crypt/sync/BUILD.gn
+++ b/components/os_crypt/sync/BUILD.gn
@@ -46,6 +46,7 @@ component("os_crypt") {
"os_crypt_mac.mm",
]
deps += [ "//crypto:mock_apple_keychain" ]
+ deps += ["//electron/build/config:generate_mas_config"]
}
if (is_win) {
diff --git a/components/os_crypt/sync/keychain_password_mac.mm b/components/os_crypt/sync/keychain_password_mac.mm
index e7a65e97b51d93bff864889813317fb7c6ffc846..bb1fc0c99164ae4bdaaaa78e87c30e88932a928c 100644
--- a/components/os_crypt/sync/keychain_password_mac.mm
+++ b/components/os_crypt/sync/keychain_password_mac.mm
@@ -13,6 +13,7 @@
#include "base/rand_util.h"
#include "build/branding_buildflags.h"
#include "crypto/apple_keychain.h"
+#include "electron/mas.h"
using crypto::AppleKeychain;
diff --git a/components/remote_cocoa/app_shim/BUILD.gn b/components/remote_cocoa/app_shim/BUILD.gn
index da8b246916811fbee1e63d0aa95be9fa3ae12bfb..3bcd78507a15bb12ffe71a5f67e756000ca2633a 100644
--- a/components/remote_cocoa/app_shim/BUILD.gn
+++ b/components/remote_cocoa/app_shim/BUILD.gn
@@ -75,6 +75,7 @@ component("app_shim") {
"//components/crash/core/common",
"//components/remote_cocoa/common:mojo",
"//components/system_media_controls",
+ "//electron/build/config:generate_mas_config",
"//mojo/public/cpp/bindings",
"//net",
"//ui/accelerated_widget_mac",
diff --git a/components/remote_cocoa/app_shim/application_bridge.mm b/components/remote_cocoa/app_shim/application_bridge.mm
index e9f4e5131238b9fb5f1b4b3e90a0cb84a7fc15b4..8b5f4cae3123ac5480ad73f0c873fca0d62f7c9f 100644
--- a/components/remote_cocoa/app_shim/application_bridge.mm
+++ b/components/remote_cocoa/app_shim/application_bridge.mm
@@ -12,6 +12,7 @@
#include "components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h"
#include "components/remote_cocoa/app_shim/native_widget_ns_window_host_helper.h"
#include "components/system_media_controls/mac/remote_cocoa/system_media_controls_bridge.h"
+#include "electron/mas.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
@@ -51,6 +52,7 @@
// NativeWidgetNSWindowHostHelper:
id GetNativeViewAccessible() override {
+#if !IS_MAS_BUILD()
if (!remote_accessibility_element_) {
base::ProcessId browser_pid = base::kNullProcessId;
std::vector<uint8_t> element_token;
@@ -61,6 +63,9 @@ id GetNativeViewAccessible() override {
ui::RemoteAccessibility::GetRemoteElementFromToken(element_token);
}
return remote_accessibility_element_;
+#else
+ return nil;
+#endif
}
void DispatchKeyEvent(ui::KeyEvent* event) override {
bool event_handled = false;
@@ -99,7 +104,9 @@ void GetWordAt(const gfx::Point& location_in_content,
mojo::AssociatedRemote<mojom::TextInputHost> text_input_host_remote_;
std::unique_ptr<NativeWidgetNSWindowBridge> bridge_;
+#if !IS_MAS_BUILD()
NSAccessibilityRemoteUIElement* __strong remote_accessibility_element_;
+#endif
};
} // namespace
diff --git a/components/remote_cocoa/app_shim/browser_native_widget_window_mac.mm b/components/remote_cocoa/app_shim/browser_native_widget_window_mac.mm
index f9dae777fd2d6ba4f9fe647e6507dea4005d7e25..acef8dfa59981ef58bdfa14108eedfebfdc60334 100644
--- a/components/remote_cocoa/app_shim/browser_native_widget_window_mac.mm
+++ b/components/remote_cocoa/app_shim/browser_native_widget_window_mac.mm
@@ -8,7 +8,9 @@
#include "components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h"
#include "components/remote_cocoa/common/native_widget_ns_window_host.mojom.h"
+#include "electron/mas.h"
+#if !IS_MAS_BUILD()
@interface NSWindow (PrivateBrowserNativeWidgetAPI)
+ (Class)frameViewClassForStyleMask:(NSUInteger)windowStyle;
@end
@@ -100,10 +102,13 @@ - (void)maybeShowTrafficLights {
@end
+#endif // MAS_BUILD
+
@implementation BrowserNativeWidgetWindow
// NSWindow (PrivateAPI) overrides.
+#if !IS_MAS_BUILD()
+ (Class)frameViewClassForStyleMask:(NSUInteger)windowStyle {
// - NSThemeFrame and its subclasses will be nil if it's missing at runtime.
if ([BrowserWindowFrame class])
@@ -150,6 +155,8 @@ - (BOOL)_usesCustomDrawing {
return NO;
}
+#endif // MAS_BUILD
+
// Handle "Move focus to the window toolbar" configured in System Preferences ->
// Keyboard -> Shortcuts -> Keyboard. Usually Ctrl+F5. The argument (|unknown|)
// tends to just be nil.
@@ -160,8 +167,8 @@ - (void)_handleFocusToolbarHotKey:(id)unknown {
}
- (void)setAlwaysShowTrafficLights:(BOOL)alwaysShow {
- [base::apple::ObjCCastStrict<BrowserWindowFrame>(self.contentView.superview)
- setAlwaysShowTrafficLights:alwaysShow];
+ // [base::apple::ObjCCastStrict<BrowserWindowFrame>(self.contentView.superview)
+ // setAlwaysShowTrafficLights:alwaysShow];
}
@end
diff --git a/components/remote_cocoa/app_shim/native_widget_mac_frameless_nswindow.mm b/components/remote_cocoa/app_shim/native_widget_mac_frameless_nswindow.mm
index 3a815ebf505bd95fa7f6b61ba433d98fbfe20225..149de0175c2ec0e41e3ba40caad7019ca87386d6 100644
--- a/components/remote_cocoa/app_shim/native_widget_mac_frameless_nswindow.mm
+++ b/components/remote_cocoa/app_shim/native_widget_mac_frameless_nswindow.mm
@@ -4,6 +4,10 @@
#import "components/remote_cocoa/app_shim/native_widget_mac_frameless_nswindow.h"
+#include "electron/mas.h"
+
+#if !IS_MAS_BUILD()
+
@interface NSWindow (PrivateAPI)
+ (Class)frameViewClassForStyleMask:(NSUInteger)windowStyle;
@end
@@ -18,8 +22,12 @@ - (CGFloat)_titlebarHeight {
}
@end
+#endif // MAS_BUILD
+
@implementation NativeWidgetMacFramelessNSWindow
+#if !IS_MAS_BUILD()
+
+ (Class)frameViewClassForStyleMask:(NSUInteger)windowStyle {
if ([NativeWidgetMacFramelessNSWindowFrame class]) {
return [NativeWidgetMacFramelessNSWindowFrame class];
@@ -27,4 +35,6 @@ + (Class)frameViewClassForStyleMask:(NSUInteger)windowStyle {
return [super frameViewClassForStyleMask:windowStyle];
}
+#endif // MAS_BUILD
+
@end
diff --git a/components/remote_cocoa/app_shim/native_widget_mac_nswindow.h b/components/remote_cocoa/app_shim/native_widget_mac_nswindow.h
index 945b01f2132547fa0f6a97ee4895994c500d1410..864f93f7c4159abc63e1535195fbf9d112558b91 100644
--- a/components/remote_cocoa/app_shim/native_widget_mac_nswindow.h
+++ b/components/remote_cocoa/app_shim/native_widget_mac_nswindow.h
@@ -9,6 +9,7 @@
#include "base/apple/foundation_util.h"
#include "components/remote_cocoa/app_shim/remote_cocoa_app_shim_export.h"
+#include "electron/mas.h"
#import "ui/base/cocoa/command_dispatcher.h"
namespace remote_cocoa {
@@ -17,6 +18,7 @@ class NativeWidgetNSWindowBridge;
@protocol WindowTouchBarDelegate;
+#if !IS_MAS_BUILD()
// Weak lets Chrome launch even if a future macOS doesn't have the below classes
WEAK_IMPORT_ATTRIBUTE
@interface NSNextStepFrame : NSView
@@ -33,6 +35,7 @@ REMOTE_COCOA_APP_SHIM_EXPORT
REMOTE_COCOA_APP_SHIM_EXPORT
@interface NativeWidgetMacNSWindowTitledFrame : NSThemeFrame
@end
+#endif
// The NSWindow used by BridgedNativeWidget. Provides hooks into AppKit that
// can only be accomplished by overriding methods.
diff --git a/components/remote_cocoa/app_shim/native_widget_mac_nswindow.mm b/components/remote_cocoa/app_shim/native_widget_mac_nswindow.mm
index 4f875587289f19b06041c5e8a7f76ab9cba169c9..952febab99656f59efee8c0d267d8f76f9943197 100644
--- a/components/remote_cocoa/app_shim/native_widget_mac_nswindow.mm
+++ b/components/remote_cocoa/app_shim/native_widget_mac_nswindow.mm
@@ -26,6 +26,7 @@
#import "components/remote_cocoa/app_shim/views_nswindow_delegate.h"
#import "components/remote_cocoa/app_shim/window_touch_bar_delegate.h"
#include "components/remote_cocoa/common/native_widget_ns_window_host.mojom.h"
+#include "electron/mas.h"
#import "ui/base/cocoa/user_interface_item_command_handler.h"
#import "ui/base/cocoa/window_size_constants.h"
@@ -111,14 +112,18 @@ void OrderChildWindow(NSWindow* child_window,
} // namespace
+#if !IS_MAS_BUILD()
@interface NSNextStepFrame (Private)
- (instancetype)initWithFrame:(NSRect)frame
styleMask:(NSUInteger)styleMask
owner:(id)owner;
@end
+#endif
@interface NSWindow (Private)
+#if !IS_MAS_BUILD()
+ (Class)frameViewClassForStyleMask:(NSWindowStyleMask)windowStyle;
+#endif
- (BOOL)hasKeyAppearance;
- (long long)_resizeDirectionForMouseLocation:(CGPoint)location;
- (BOOL)_isConsideredOpenForPersistentState;
@@ -157,6 +162,8 @@ - (void)cr_mouseDownOnFrameView:(NSEvent*)event {
}
@end
+#if !IS_MAS_BUILD()
+
@implementation NativeWidgetMacNSWindowTitledFrame
- (void)mouseDown:(NSEvent*)event {
if (self.window.isMovable)
@@ -184,6 +191,8 @@ - (BOOL)usesCustomDrawing {
}
@end
+#endif // MAS_BUILD
+
@implementation NativeWidgetMacNSWindow {
@private
CommandDispatcher* __strong _commandDispatcher;
@@ -380,6 +389,8 @@ - (NSAccessibilityRole)accessibilityRole {
// NSWindow overrides.
+#if !IS_MAS_BUILD()
+
+ (Class)frameViewClassForStyleMask:(NSWindowStyleMask)windowStyle {
if (windowStyle & NSWindowStyleMaskTitled) {
if (Class customFrame = [NativeWidgetMacNSWindowTitledFrame class])
@@ -391,6 +402,8 @@ + (Class)frameViewClassForStyleMask:(NSWindowStyleMask)windowStyle {
return [super frameViewClassForStyleMask:windowStyle];
}
+#endif
+
- (BOOL)_isTitleHidden {
bool shouldShowWindowTitle = YES;
if (_bridge)
diff --git a/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm b/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm
index f71ea08f64ab5cd36f6bd1e2d3d2908d4de80ba6..4b3450b3bd44a35964bd935453861101f999a53a 100644
--- a/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm
+++ b/components/remote_cocoa/app_shim/native_widget_ns_window_bridge.mm
@@ -41,6 +41,7 @@
#import "components/remote_cocoa/app_shim/views_nswindow_delegate.h"
#import "components/remote_cocoa/app_shim/window_move_loop.h"
#include "components/remote_cocoa/common/native_widget_ns_window_host.mojom.h"
+#include "electron/mas.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "net/cert/x509_util_apple.h"
#include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
@@ -643,10 +644,12 @@ NSUInteger CountBridgedWindows(NSArray* child_windows) {
// this should be treated as an error and caught early.
CHECK(bridged_view_);
+#if !IS_MAS_BUILD()
// Send the accessibility tokens for the NSView now that it exists.
host_->SetRemoteAccessibilityTokens(
ui::RemoteAccessibility::GetTokenForLocalElement(window_),
ui::RemoteAccessibility::GetTokenForLocalElement(bridged_view_));
+#endif
// Beware: This view was briefly removed (in favor of a bare CALayer) in
// https://crrev.com/c/1236675. The ordering of unassociated layers relative
diff --git a/components/viz/service/BUILD.gn b/components/viz/service/BUILD.gn
index d1a60edcb29d5d2484badf6cb2853871c1e7bcec..964dc5c3aa8440fd3076f2198b2c89e9b8b82816 100644
--- a/components/viz/service/BUILD.gn
+++ b/components/viz/service/BUILD.gn
@@ -376,6 +376,7 @@ viz_component("service") {
"frame_sinks/external_begin_frame_source_mac.h",
]
}
+ deps += ["//electron/build/config:generate_mas_config"]
}
if (is_android || use_ozone) {
@@ -656,6 +657,7 @@ viz_source_set("unit_tests") {
"display_embedder/software_output_device_mac_unittest.mm",
]
frameworks = [ "IOSurface.framework" ]
+ deps += ["//electron/build/config:generate_mas_config"]
}
if (is_win) {
diff --git a/content/app_shim_remote_cocoa/ns_view_bridge_factory_impl.mm b/content/app_shim_remote_cocoa/ns_view_bridge_factory_impl.mm
index dbf334caa3a6d10017b69ad76802e389a011436b..da828823e8195cc9e497866363c9af93dcd4ec3f 100644
--- a/content/app_shim_remote_cocoa/ns_view_bridge_factory_impl.mm
+++ b/content/app_shim_remote_cocoa/ns_view_bridge_factory_impl.mm
@@ -15,6 +15,7 @@
#include "content/common/web_contents_ns_view_bridge.mojom.h"
#include "content/public/browser/remote_cocoa.h"
#include "content/public/browser/render_widget_host_view_mac_delegate.h"
+#include "electron/mas.h"
#include "mojo/public/cpp/bindings/associated_receiver.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
@@ -63,7 +64,9 @@ explicit RenderWidgetHostNSViewBridgeOwner(
const RenderWidgetHostNSViewBridgeOwner&) = delete;
private:
+#if !IS_MAS_BUILD()
NSAccessibilityRemoteUIElement* __strong remote_accessibility_element_;
+#endif
void OnMojoDisconnect() { delete this; }
std::unique_ptr<blink::WebCoalescedInputEvent> TranslateEvent(
@@ -75,6 +78,7 @@ explicit RenderWidgetHostNSViewBridgeOwner(
}
id GetAccessibilityElement() override {
+#if !IS_MAS_BUILD()
if (!remote_accessibility_element_) {
base::ProcessId browser_pid = base::kNullProcessId;
std::vector<uint8_t> element_token;
@@ -85,6 +89,9 @@ id GetAccessibilityElement() override {
ui::RemoteAccessibility::GetRemoteElementFromToken(element_token);
}
return remote_accessibility_element_;
+#else
+ return nil;
+#endif
}
// RenderWidgetHostNSViewHostHelper implementation.
@@ -103,8 +110,10 @@ id GetFocusedBrowserAccessibilityElement() override {
return [bridgedContentView accessibilityFocusedUIElement];
}
void SetAccessibilityWindow(NSWindow* window) override {
+#if !IS_MAS_BUILD()
host_->SetRemoteAccessibilityWindowToken(
ui::RemoteAccessibility::GetTokenForLocalElement(window));
+#endif
}
void ForwardKeyboardEvent(const input::NativeWebKeyboardEvent& key_event,
diff --git a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
index 13c3fe06c417a2565e6af4552930a56c44a01fb3..ef67191f5d010451cde2b084d6165c7dfe3bbee7 100644
--- a/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
+++ b/content/app_shim_remote_cocoa/render_widget_host_view_cocoa.mm
@@ -35,6 +35,7 @@
#include "content/public/browser/browser_accessibility_state.h"
#import "content/public/browser/render_widget_host_view_mac_delegate.h"
#include "content/public/common/content_features.h"
+#include "electron/mas.h"
#include "skia/ext/skia_utils_mac.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/mojom/input/input_handler.mojom.h"
@@ -2061,15 +2062,21 @@ - (NSAccessibilityRole)accessibilityRole {
// Since this implementation doesn't have to wait any IPC calls, this doesn't
// make any key-typing jank. --hbono 7/23/09
//
+#if !IS_MAS_BUILD()
extern "C" {
extern NSString* NSTextInputReplacementRangeAttributeName;
}
+#endif
- (NSArray*)validAttributesForMarkedText {
// This code is just copied from WebKit except renaming variables.
static NSArray* const kAttributes = @[
NSUnderlineStyleAttributeName, NSUnderlineColorAttributeName,
+#if !IS_MAS_BUILD()
NSMarkedClauseSegmentAttributeName, NSTextInputReplacementRangeAttributeName
+#else
+ NSMarkedClauseSegmentAttributeName
+#endif
];
return kAttributes;
}
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index cb085a13580106f0218285dc5ad51912d60735d2..f51437492310908f582d3d68cf460c1f8892436c 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -323,6 +323,7 @@ source_set("browser") {
"//ui/strings:ax_strings",
"//ui/touch_selection",
"//v8:v8_version",
+ "//electron/build/config:generate_mas_config",
]
public_deps = [
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h
index 2285564db47ef15eb9a83affd1e481b5671c3940..cf5e79a5540d8208c34579d7e8b5a5715abb1beb 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.h
+++ b/content/browser/renderer_host/render_widget_host_view_mac.h
@@ -23,6 +23,7 @@
#include "content/browser/renderer_host/text_input_manager.h"
#include "content/common/content_export.h"
#include "content/common/render_widget_host_ns_view.mojom.h"
+#include "electron/mas.h"
#include "mojo/public/cpp/bindings/associated_receiver.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
#include "third_party/blink/public/mojom/webshare/webshare.mojom.h"
@@ -53,7 +54,9 @@ class CursorManager;
@protocol RenderWidgetHostViewMacDelegate;
+#if !IS_MAS_BUILD()
@class NSAccessibilityRemoteUIElement;
+#endif
@class RenderWidgetHostViewCocoa;
namespace content {
@@ -684,9 +687,11 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
// EnsureSurfaceSynchronizedForWebTest().
uint32_t latest_capture_sequence_number_ = 0u;
+#if !IS_MAS_BUILD()
// Remote accessibility objects corresponding to the NSWindow that this is
// displayed to the user in.
NSAccessibilityRemoteUIElement* __strong remote_window_accessible_;
+#endif
// Used to force the NSApplication's focused accessibility element to be the
// content::BrowserAccessibilityCocoa accessibility tree when the NSView for
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index 34fb29866785ef07c6dca4cfc85966df1c479b5f..e305d25a8f2a34ac90f4d503a9c74dcc6c553cdf 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -48,6 +48,7 @@
#include "content/public/browser/render_widget_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/page_visibility_state.h"
+#include "electron/mas.h"
#include "media/base/media_switches.h"
#include "skia/ext/platform_canvas.h"
#include "skia/ext/skia_utils_mac.h"
@@ -273,8 +274,10 @@
void RenderWidgetHostViewMac::MigrateNSViewBridge(
remote_cocoa::mojom::Application* remote_cocoa_application,
uint64_t parent_ns_view_id) {
+#if !IS_MAS_BUILD()
// Destroy the previous remote accessibility element.
remote_window_accessible_ = nil;
+#endif
// Reset `ns_view_` before resetting `remote_ns_view_` to avoid dangling
// pointers. `ns_view_` gets reinitialized later in this method.
@@ -1636,8 +1639,10 @@ void CombineTextNodesAndMakeCallback(SpeechCallback callback,
gfx::NativeViewAccessible
RenderWidgetHostViewMac::AccessibilityGetNativeViewAccessibleForWindow() {
+#if !IS_MAS_BUILD()
if (remote_window_accessible_)
return remote_window_accessible_;
+#endif
return [GetInProcessNSView() window];
}
@@ -1686,9 +1691,11 @@ void CombineTextNodesAndMakeCallback(SpeechCallback callback,
}
void RenderWidgetHostViewMac::SetAccessibilityWindow(NSWindow* window) {
+#if !IS_MAS_BUILD()
// When running in-process, just use the NSView's NSWindow as its own
// accessibility element.
remote_window_accessible_ = nil;
+#endif
}
bool RenderWidgetHostViewMac::SyncIsWidgetForMainFrame(
@@ -2212,20 +2219,26 @@ void CombineTextNodesAndMakeCallback(SpeechCallback callback,
void RenderWidgetHostViewMac::GetRenderWidgetAccessibilityToken(
GetRenderWidgetAccessibilityTokenCallback callback) {
base::ProcessId pid = getpid();
+#if !IS_MAS_BUILD()
id element_id = GetNativeViewAccessible();
std::vector<uint8_t> token =
ui::RemoteAccessibility::GetTokenForLocalElement(element_id);
std::move(callback).Run(pid, token);
+#else
+ std::move(callback).Run(pid, std::vector<uint8_t>());
+#endif
}
void RenderWidgetHostViewMac::SetRemoteAccessibilityWindowToken(
const std::vector<uint8_t>& window_token) {
+#if !IS_MAS_BUILD()
if (window_token.empty()) {
remote_window_accessible_ = nil;
} else {
remote_window_accessible_ =
ui::RemoteAccessibility::GetRemoteElementFromToken(window_token);
}
+#endif
}
///////////////////////////////////////////////////////////////////////////////
diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn
index 357c5a754f6b3f2992646dda4955aa5b53e0b84f..faf49fec0f54dfb258945e59bc7ee3d15a8a21e7 100644
--- a/content/common/BUILD.gn
+++ b/content/common/BUILD.gn
@@ -284,6 +284,7 @@ source_set("common") {
"//ui/shell_dialogs",
"//url",
"//url/ipc:url_ipc",
+ "//electron/build/config:generate_mas_config",
]
defines = []
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index 55a3baeeec34e9e89b75e93cd17486baef6e550e..cdd5750c7a84e38501e4b6d24e6a2c365b9ce5f1 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -334,6 +334,7 @@ target(link_target_type, "renderer") {
"//ui/surface",
"//url",
"//v8",
+ "//electron/build/config:generate_mas_config",
]
allow_circular_includes_from = []
diff --git a/content/renderer/renderer_main_platform_delegate_mac.mm b/content/renderer/renderer_main_platform_delegate_mac.mm
index d4db3b179725cb96bcbd0f73db7d52ef8b7522db..703b0f56a61abac51961bfd918b7349b943900de 100644
--- a/content/renderer/renderer_main_platform_delegate_mac.mm
+++ b/content/renderer/renderer_main_platform_delegate_mac.mm
@@ -7,12 +7,15 @@
#import <Cocoa/Cocoa.h>
#include "base/check_op.h"
+#include "electron/mas.h"
#include "sandbox/mac/seatbelt.h"
#include "sandbox/mac/system_services.h"
+#if !IS_MAS_BUILD()
extern "C" {
CGError CGSSetDenyWindowServerConnections(bool);
}
+#endif
namespace content {
@@ -22,6 +25,7 @@
// verifies there are no existing open connections), and then indicates that
// Chrome should continue execution without access to launchservicesd.
void DisableSystemServices() {
+#if !IS_MAS_BUILD()
// Tell the WindowServer that we don't want to make any future connections.
// This will return Success as long as there are no open connections, which
// is what we want.
@@ -30,6 +34,7 @@ void DisableSystemServices() {
sandbox::DisableLaunchServices();
sandbox::DisableCoreServicesCheckFix();
+#endif
}
} // namespace
diff --git a/content/renderer/theme_helper_mac.mm b/content/renderer/theme_helper_mac.mm
index a1068589ad844518038ee7bc15a3de9bc5cba525..1ff781c49f086ec8015c7d3c44567dbec3d00ff8 100644
--- a/content/renderer/theme_helper_mac.mm
+++ b/content/renderer/theme_helper_mac.mm
@@ -7,16 +7,28 @@
#include <Cocoa/Cocoa.h>
#include "base/strings/sys_string_conversions.h"
+#include "electron/mas.h"
+#if !IS_MAS_BUILD()
extern "C" {
bool CGFontRenderingGetFontSmoothingDisabled(void);
}
-
+#endif
namespace content {
bool IsSubpixelAntialiasingAvailable() {
+#if !IS_MAS_BUILD()
// See https://trac.webkit.org/changeset/239306/webkit for more info.
return !CGFontRenderingGetFontSmoothingDisabled();
+#else
+ NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
+ NSString *default_key = @"CGFontRenderingGetFontSmoothingDisabled";
+ // Check that key exists since boolForKey defaults to NO when the
+ // key is missing and this key in fact defaults to YES;
+ if ([defaults objectForKey:default_key] == nil)
+ return false;
+ return ![defaults boolForKey:default_key];
+#endif
}
} // namespace content
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index f5130062e82601932c346b348cfbbddc218fcca0..8c0998257db56d02ceeab8543cc74fa1018f053b 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -640,6 +640,7 @@ static_library("test_support") {
"//url",
"//url/mojom:url_mojom_gurl",
"//v8",
+ "//electron/build/config:generate_mas_config"
]
data_deps = [
@@ -1109,6 +1110,7 @@ static_library("browsertest_support") {
}
configs += [ "//v8:external_startup_data" ]
+ deps += ["//electron/build/config:generate_mas_config"]
}
mojom("content_test_mojo_bindings") {
@@ -1931,6 +1933,7 @@ test("content_browsertests") {
"//ui/shell_dialogs",
"//ui/snapshot",
"//ui/webui:test_support",
+ "//electron/build/config:generate_mas_config"
]
if (!(is_chromeos_ash && target_cpu == "arm64" && current_cpu == "arm")) {
@@ -3206,6 +3209,7 @@ test("content_unittests") {
"//ui/latency:test_support",
"//ui/shell_dialogs:shell_dialogs",
"//ui/webui:test_support",
+ "//electron/build/config:generate_mas_config"
]
if (enable_nocompile_tests) {
diff --git a/content/web_test/BUILD.gn b/content/web_test/BUILD.gn
index 99e612f705c5dff041454802033564085718260a..aa37555d9a9c0fda19d0096d035c245eca5ca0c6 100644
--- a/content/web_test/BUILD.gn
+++ b/content/web_test/BUILD.gn
@@ -228,6 +228,7 @@ static_library("web_test_browser") {
"//ui/gl",
"//ui/shell_dialogs:shell_dialogs",
"//url",
+ "//electron/build/config:generate_mas_config"
]
# TODO(crbug.com/40139469): Blink test plugin must be migrated from PPAPI.
diff --git a/device/bluetooth/BUILD.gn b/device/bluetooth/BUILD.gn
index 82d4f2bf563f6bf489b1f257efb249ba4ec9a7f3..7ae5132961a01175d0d28004e5fc2e9cfb924bdd 100644
--- a/device/bluetooth/BUILD.gn
+++ b/device/bluetooth/BUILD.gn
@@ -258,6 +258,7 @@ component("bluetooth") {
"IOKit.framework",
"Foundation.framework",
]
+ deps += ["//electron/build/config:generate_mas_config"]
}
if (is_mac) {
diff --git a/device/bluetooth/bluetooth_adapter_mac.mm b/device/bluetooth/bluetooth_adapter_mac.mm
index fa86583a2d82c4076cfcf64cdc3f6bbb533b95d7..3e4bda0bc31431cb2cc0893d246be6bb54cfab83 100644
--- a/device/bluetooth/bluetooth_adapter_mac.mm
+++ b/device/bluetooth/bluetooth_adapter_mac.mm
@@ -38,7 +38,9 @@
#include "device/bluetooth/bluetooth_discovery_session_outcome.h"
#include "device/bluetooth/bluetooth_socket_mac.h"
#include "device/bluetooth/public/cpp/bluetooth_address.h"
+#include "electron/mas.h"
+#if !IS_MAS_BUILD()
extern "C" {
// Undocumented IOBluetooth Preference API [1]. Used by `blueutil` [2] and
// `Karabiner` [3] to programmatically control the Bluetooth state. Calling the
@@ -52,6 +54,7 @@
// [4] https://support.apple.com/kb/PH25091
void IOBluetoothPreferenceSetControllerPowerState(int state);
}
+#endif
// A simple helper class that forwards any Bluetooth device connect notification
// to its wrapped |_adapter|.
@@ -161,8 +164,10 @@ bool IsDeviceSystemPaired(const std::string& device_address) {
: controller_state_function_(
base::BindRepeating(&BluetoothAdapterMac::GetHostControllerState,
base::Unretained(this))),
+#if !IS_MAS_BUILD()
power_state_function_(
base::BindRepeating(IOBluetoothPreferenceSetControllerPowerState)),
+#endif
device_paired_status_callback_(
base::BindRepeating(&IsDeviceSystemPaired)) {
}
@@ -313,8 +318,12 @@ bool IsDeviceSystemPaired(const std::string& device_address) {
}
bool BluetoothAdapterMac::SetPoweredImpl(bool powered) {
+#if !IS_MAS_BUILD()
power_state_function_.Run(base::strict_cast<int>(powered));
return true;
+#else
+ return false;
+#endif
}
base::WeakPtr<BluetoothLowEnergyAdapterApple>
diff --git a/gpu/ipc/service/BUILD.gn b/gpu/ipc/service/BUILD.gn
index 973cd337f2781271b4ca3e29db07939ec6917327..90658a336138e4e50f93c38f1c1f465c1c2bd4dc 100644
--- a/gpu/ipc/service/BUILD.gn
+++ b/gpu/ipc/service/BUILD.gn
@@ -135,6 +135,7 @@ component("service") {
"QuartzCore.framework",
]
defines += [ "GL_SILENCE_DEPRECATION" ]
+ deps += ["//electron/build/config:generate_mas_config"]
}
if (is_ios) {
sources += [ "image_transport_surface_ios.mm" ]
diff --git a/gpu/ipc/service/image_transport_surface_overlay_mac.h b/gpu/ipc/service/image_transport_surface_overlay_mac.h
index 36322ddd3047f96569f35807541a37d3c6672b09..0121a780cf3b79fc1120c1b85cd5cd30c14968ef 100644
--- a/gpu/ipc/service/image_transport_surface_overlay_mac.h
+++ b/gpu/ipc/service/image_transport_surface_overlay_mac.h
@@ -8,6 +8,7 @@
#include <vector>
#include "base/memory/weak_ptr.h"
+#include "electron/mas.h"
#include "gpu/ipc/service/command_buffer_stub.h"
#include "gpu/ipc/service/image_transport_surface.h"
#include "ui/gfx/ca_layer_result.h"
@@ -23,7 +24,9 @@
#include "ui/display/types/display_constants.h"
#endif
+#if !IS_MAS_BUILD()
@class CAContext;
+#endif
@class CALayer;
namespace ui {
diff --git a/media/audio/BUILD.gn b/media/audio/BUILD.gn
index 6f3b368103b05f07ae67da4c0307efe039b8dfce..c8b18509dc508fbb928b97830536d210b378bf73 100644
--- a/media/audio/BUILD.gn
+++ b/media/audio/BUILD.gn
@@ -197,6 +197,7 @@ source_set("audio") {
"CoreMedia.framework",
]
weak_frameworks = [ "ScreenCaptureKit.framework" ] # macOS 13.0
+ deps += ["//electron/build/config:generate_mas_config"]
}
if (is_ios) {
diff --git a/media/audio/apple/audio_low_latency_input.cc b/media/audio/apple/audio_low_latency_input.cc
index 9b78f60304a0e487904fdb22c9e6d85a237ca96e..e639558d34edab3ba3b1bb4f502bd91405e58637 100644
--- a/media/audio/apple/audio_low_latency_input.cc
+++ b/media/audio/apple/audio_low_latency_input.cc
@@ -28,6 +28,7 @@
#include "base/strings/sys_string_conversions.h"
#include "base/time/time.h"
#include "base/trace_event/trace_event.h"
+#include "electron/mas.h"
#include "media/audio/apple/audio_manager_apple.h"
#include "media/audio/apple/scoped_audio_unit.h"
#include "media/base/audio_bus.h"
@@ -39,19 +40,23 @@
namespace {
extern "C" {
+#if !IS_MAS_BUILD()
// See:
// https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/PAL/pal/spi/cf/CoreAudioSPI.h?rev=228264
OSStatus AudioDeviceDuck(AudioDeviceID inDevice,
Float32 inDuckedLevel,
const AudioTimeStamp* __nullable inStartTime,
Float32 inRampDuration) __attribute__((weak_import));
+#endif
}
void UndoDucking(AudioDeviceID output_device_id) {
+#if !IS_MAS_BUILD()
if (AudioDeviceDuck != nullptr) {
// Ramp the volume back up over half a second.
AudioDeviceDuck(output_device_id, 1.0, nullptr, 0.5);
}
+#endif
}
} // namespace
#endif
diff --git a/net/dns/BUILD.gn b/net/dns/BUILD.gn
index 5f4ff9ff8172d4ad282cc9c781f85118b8ba7d1a..cc85f488884f48df94198b7e4d4823946e750716 100644
--- a/net/dns/BUILD.gn
+++ b/net/dns/BUILD.gn
@@ -187,6 +187,8 @@ source_set("dns") {
":host_resolver_manager",
":mdns_client",
]
+
+ deps += ["//electron/build/config:generate_mas_config"]
}
# The standard API of net/dns.
diff --git a/net/dns/dns_config_service_posix.cc b/net/dns/dns_config_service_posix.cc
index 70d5665ad7b9ef62370497636af919ede2508ad4..f4dc3e2b8053cdb3e8c439ab1a1d6369a8e6a7dc 100644
--- a/net/dns/dns_config_service_posix.cc
+++ b/net/dns/dns_config_service_posix.cc
@@ -28,6 +28,7 @@
#include "base/threading/scoped_blocking_call.h"
#include "base/time/time.h"
#include "build/build_config.h"
+#include "electron/mas.h"
#include "net/base/ip_endpoint.h"
#include "net/dns/dns_config.h"
#include "net/dns/dns_hosts.h"
@@ -135,8 +136,8 @@ class DnsConfigServicePosix::Watcher : public DnsConfigService::Watcher {
bool Watch() override {
CheckOnCorrectSequence();
-
bool success = true;
+#if !IS_MAS_BUILD()
if (!config_watcher_.Watch(base::BindRepeating(&Watcher::OnConfigChanged,
base::Unretained(this)))) {
LOG(ERROR) << "DNS config watch failed to start.";
@@ -153,6 +154,7 @@ class DnsConfigServicePosix::Watcher : public DnsConfigService::Watcher {
success = false;
}
#endif // !BUILDFLAG(IS_IOS)
+#endif
return success;
}
diff --git a/sandbox/mac/BUILD.gn b/sandbox/mac/BUILD.gn
index 4e53d573ff67615bc7dcee7db6f855c67094f414..8b061d66b1a854b51a5a38b6a71eadab6a7dbbec 100644
--- a/sandbox/mac/BUILD.gn
+++ b/sandbox/mac/BUILD.gn
@@ -39,6 +39,7 @@ component("seatbelt") {
]
public_deps = [ "//third_party/protobuf:protobuf_lite" ]
defines = [ "SEATBELT_IMPLEMENTATION" ]
+ deps += ["//electron/build/config:generate_mas_config"]
}
component("seatbelt_extension") {
@@ -52,6 +53,7 @@ component("seatbelt_extension") {
libs = [ "sandbox" ]
public_deps = [ "//base" ]
defines = [ "SEATBELT_IMPLEMENTATION" ]
+ deps += ["//electron/build/config:generate_mas_config"]
}
component("system_services") {
@@ -66,6 +68,7 @@ component("system_services") {
deps = [ ":seatbelt_export" ]
public_deps = [ "//base" ]
defines = [ "SEATBELT_IMPLEMENTATION" ]
+ deps += ["//electron/build/config:generate_mas_config"]
}
source_set("sandbox_unittests") {
diff --git a/sandbox/mac/sandbox_compiler.cc b/sandbox/mac/sandbox_compiler.cc
index f35d9ef2a2df3db8ecbf1d7b909c7b1cf33f3cd9..5d52330d1bd70cd7b97ee3360721f10c8447c717 100644
--- a/sandbox/mac/sandbox_compiler.cc
+++ b/sandbox/mac/sandbox_compiler.cc
@@ -7,6 +7,7 @@
#include <string>
#include <vector>
+#include "electron/mas.h"
#include "sandbox/mac/seatbelt.h"
namespace sandbox {
@@ -47,6 +48,7 @@ bool SandboxCompiler::SetParameter(const std::string& key,
}
bool SandboxCompiler::CompileAndApplyProfile(std::string& error) {
+#if !IS_MAS_BUILD()
if (mode_ == Target::kSource) {
std::vector<const char*> params;
@@ -67,6 +69,9 @@ bool SandboxCompiler::CompileAndApplyProfile(std::string& error) {
}
}
return false;
+#else
+ return true;
+#endif
}
bool SandboxCompiler::CompilePolicyToProto(mac::SandboxPolicy& policy,
diff --git a/sandbox/mac/sandbox_logging.cc b/sandbox/mac/sandbox_logging.cc
index 095c639b9893e885d8937e29ed7d47a7c28bc6b6..7e0cf9b9f94b16741358bdb45122f8b2bd68c0f9 100644
--- a/sandbox/mac/sandbox_logging.cc
+++ b/sandbox/mac/sandbox_logging.cc
@@ -16,6 +16,7 @@
#include <string>
#include "build/build_config.h"
+#include "electron/mas.h"
#include "sandbox/mac/sandbox_crash_message.h"
#if defined(ARCH_CPU_X86_64)
@@ -33,9 +34,11 @@
}
#endif
+#if !IS_MAS_BUILD()
extern "C" {
void abort_report_np(const char*, ...);
}
+#endif
namespace sandbox::logging {
@@ -76,9 +79,11 @@ void SendOsLog(Level level, const char* message) {
sandbox::crash_message::SetCrashMessage(message);
}
+#if !IS_MAS_BUILD()
if (level == Level::FATAL) {
abort_report_np(message);
}
+#endif
}
// |error| is strerror(errno) when a P* logging function is called. Pass
diff --git a/sandbox/mac/seatbelt.cc b/sandbox/mac/seatbelt.cc
index 15c835e118456394c0a00ac98c11241c14ca75bd..a16faabe2bd63a5e0fbe9082a3b4b7c8aa0ea064 100644
--- a/sandbox/mac/seatbelt.cc
+++ b/sandbox/mac/seatbelt.cc
@@ -4,12 +4,14 @@
#include "sandbox/mac/seatbelt.h"
+#include "electron/mas.h"
+
#include <errno.h>
#include <unistd.h>
extern "C" {
#include <sandbox.h>
-
+#if !IS_MAS_BUILD()
int sandbox_init_with_parameters(const char* profile,
uint64_t flags,
const char* const parameters[],
@@ -40,13 +42,13 @@ sandbox_profile_t* sandbox_compile_string(const char* data,
char** error);
int sandbox_apply(sandbox_profile_t*);
void sandbox_free_profile(sandbox_profile_t*);
-
+#endif
} // extern "C"
namespace sandbox {
namespace {
-
+#if !IS_MAS_BUILD()
bool HandleSandboxResult(int rv, char* errorbuf, std::string* error) {
if (rv == 0) {
if (error)
@@ -74,36 +76,48 @@ bool HandleSandboxErrno(int rv, const char* message, std::string* error) {
}
return false;
}
-
+#endif
} // namespace
// static
Seatbelt::Parameters Seatbelt::Parameters::Create() {
Parameters params;
+#if !IS_MAS_BUILD()
params.params_ = ::sandbox_create_params();
+#endif
return params;
}
Seatbelt::Parameters::Parameters() = default;
Seatbelt::Parameters::Parameters(Seatbelt::Parameters&& other) {
+#if !IS_MAS_BUILD()
params_ = std::exchange(other.params_, nullptr);
+#endif
}
Seatbelt::Parameters& Seatbelt::Parameters::operator=(
Seatbelt::Parameters&& other) {
+#if !IS_MAS_BUILD()
params_ = std::exchange(other.params_, nullptr);
+#endif
return *this;
}
bool Seatbelt::Parameters::Set(const char* key, const char* value) {
+#if !IS_MAS_BUILD()
return ::sandbox_set_param(params_, key, value) == 0;
+#else
+ return true;
+#endif
}
Seatbelt::Parameters::~Parameters() {
+#if !IS_MAS_BUILD()
if (params_) {
::sandbox_free_params(params_);
}
+#endif
}
// Initialize the static member variables.
@@ -114,6 +128,7 @@ const char* Seatbelt::kProfilePureComputation = kSBXProfilePureComputation;
// static
bool Seatbelt::Init(const char* profile, uint64_t flags, std::string* error) {
+#if !IS_MAS_BUILD()
// OS X deprecated these functions, but did not provide a suitable replacement,
// so ignore the deprecation warning.
#pragma clang diagnostic push
@@ -122,6 +137,9 @@ bool Seatbelt::Init(const char* profile, uint64_t flags, std::string* error) {
int rv = ::sandbox_init(profile, flags, &errorbuf);
return HandleSandboxResult(rv, errorbuf, error);
#pragma clang diagnostic pop
+#else
+ return true;
+#endif
}
// static
@@ -129,10 +147,14 @@ bool Seatbelt::InitWithParams(const char* profile,
uint64_t flags,
const char* const parameters[],
std::string* error) {
+#if !IS_MAS_BUILD()
char* errorbuf = nullptr;
int rv =
::sandbox_init_with_parameters(profile, flags, parameters, &errorbuf);
return HandleSandboxResult(rv, errorbuf, error);
+#else
+ return true;
+#endif
}
// static
@@ -140,6 +162,7 @@ bool Seatbelt::Compile(const char* profile,
const Seatbelt::Parameters& params,
std::string& compiled_profile,
std::string* error) {
+#if !IS_MAS_BUILD()
char* errorbuf = nullptr;
sandbox_profile_t* sandbox_profile =
::sandbox_compile_string(profile, params.params(), &errorbuf);
@@ -149,33 +172,44 @@ bool Seatbelt::Compile(const char* profile,
compiled_profile.assign(reinterpret_cast<const char*>(sandbox_profile->data),
sandbox_profile->size);
::sandbox_free_profile(sandbox_profile);
+#endif
return true;
}
// static
bool Seatbelt::ApplyCompiledProfile(const std::string& profile,
std::string* error) {
+#if !IS_MAS_BUILD()
sandbox_profile_t sbox_profile = {
.builtin = nullptr,
.data = reinterpret_cast<const uint8_t*>(profile.data()),
.size = profile.size()};
return HandleSandboxErrno(::sandbox_apply(&sbox_profile),
"sandbox_apply: ", error);
+#else
+ return true;
+#endif
}
// static
void Seatbelt::FreeError(char* errorbuf) {
+#if !IS_MAS_BUILD()
// OS X deprecated these functions, but did not provide a suitable replacement,
// so ignore the deprecation warning.
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
return ::sandbox_free_error(errorbuf);
#pragma clang diagnostic pop
+#endif
}
// static
bool Seatbelt::IsSandboxed() {
+#if !IS_MAS_BUILD()
return ::sandbox_check(getpid(), NULL, 0);
+#else
+ return true;
+#endif
}
} // namespace sandbox
diff --git a/sandbox/mac/seatbelt_extension.cc b/sandbox/mac/seatbelt_extension.cc
index 79edca9ca521d1bc2ff343967348eb98039b292a..23f9410ee66024e2c6b0b6b2b356a67b0ae2eba7 100644
--- a/sandbox/mac/seatbelt_extension.cc
+++ b/sandbox/mac/seatbelt_extension.cc
@@ -9,8 +9,10 @@
#include "base/check.h"
#include "base/memory/ptr_util.h"
#include "base/notreached.h"
+#include "electron/mas.h"
#include "sandbox/mac/seatbelt_extension_token.h"
+#if !IS_MAS_BUILD()
// libsandbox private API.
extern "C" {
extern const char* APP_SANDBOX_READ;
@@ -22,6 +24,7 @@ char* sandbox_extension_issue_file(const char* type,
const char* path,
uint32_t flags);
}
+#endif
namespace sandbox {
@@ -50,7 +53,11 @@ std::unique_ptr<SeatbeltExtension> SeatbeltExtension::FromToken(
bool SeatbeltExtension::Consume() {
DCHECK(!token_.empty());
+#if !IS_MAS_BUILD()
handle_ = sandbox_extension_consume(token_.c_str());
+#else
+ handle_ = -1;
+#endif
return handle_ > 0;
}
@@ -62,7 +69,11 @@ bool SeatbeltExtension::ConsumePermanently() {
}
bool SeatbeltExtension::Revoke() {
+#if !IS_MAS_BUILD()
int rv = sandbox_extension_release(handle_);
+#else
+ int rv = -1;
+#endif
handle_ = 0;
token_.clear();
return rv == 0;
@@ -80,12 +91,14 @@ SeatbeltExtension::SeatbeltExtension(const std::string& token)
char* SeatbeltExtension::IssueToken(SeatbeltExtension::Type type,
const std::string& resource) {
switch (type) {
+#if !IS_MAS_BUILD()
case FILE_READ:
return sandbox_extension_issue_file(APP_SANDBOX_READ, resource.c_str(),
0);
case FILE_READ_WRITE:
return sandbox_extension_issue_file(APP_SANDBOX_READ_WRITE,
resource.c_str(), 0);
+#endif
default:
NOTREACHED();
}
diff --git a/sandbox/mac/system_services.cc b/sandbox/mac/system_services.cc
index eb81a70e4d5d5cd3e6ae9b45f8cd1c795ea76c51..9921ccb10d3455600eddd85f77f10228016389af 100644
--- a/sandbox/mac/system_services.cc
+++ b/sandbox/mac/system_services.cc
@@ -8,7 +8,9 @@
#include <CoreFoundation/CoreFoundation.h>
#include "base/apple/osstatus_logging.h"
+#include "electron/mas.h"
+#if !IS_MAS_BUILD()
extern "C" {
OSStatus SetApplicationIsDaemon(Boolean isDaemon);
void _LSSetApplicationLaunchServicesServerConnectionStatus(
@@ -19,10 +21,12 @@ void _LSSetApplicationLaunchServicesServerConnectionStatus(
// https://github.com/WebKit/WebKit/blob/24aaedc770d192d03a07ba4a71727274aaa8fc07/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm#L840
void _CSCheckFixDisable();
} // extern "C"
+#endif
namespace sandbox {
void DisableLaunchServices() {
+ #if !IS_MAS_BUILD()
// Allow the process to continue without a LaunchServices ASN. The
// INIT_Process function in HIServices will abort if it cannot connect to
// launchservicesd to get an ASN. By setting this flag, HIServices skips
@@ -36,10 +40,13 @@ void DisableLaunchServices() {
0, ^bool(CFDictionaryRef options) {
return false;
});
+ #endif
}
void DisableCoreServicesCheckFix() {
+#if !IS_MAS_BUILD()
_CSCheckFixDisable();
+#endif
}
} // namespace sandbox
diff --git a/third_party/blink/renderer/core/BUILD.gn b/third_party/blink/renderer/core/BUILD.gn
index c73b33c834353abcf2f209d5a2ee79f76e701e7d..f6a507adee7ff387f131eb14b27ee01e51a20714 100644
--- a/third_party/blink/renderer/core/BUILD.gn
+++ b/third_party/blink/renderer/core/BUILD.gn
@@ -404,6 +404,7 @@ component("core") {
"//ui/gfx/geometry",
"//ui/gfx/geometry:geometry_skia",
"//ui/strings",
+ "//electron/build/config:generate_mas_config",
]
if (is_mac) {
diff --git a/third_party/blink/renderer/core/editing/build.gni b/third_party/blink/renderer/core/editing/build.gni
index d38e951cdbf1ab9b367273ad0fb8f962155a7f3b..e39ee0414cb54004096dbfffc4f768e805f3310a 100644
--- a/third_party/blink/renderer/core/editing/build.gni
+++ b/third_party/blink/renderer/core/editing/build.gni
@@ -358,10 +358,14 @@ blink_core_sources_editing = [
if (is_mac) {
blink_core_sources_editing += [
"commands/smart_replace_cf.cc",
- "kill_ring_mac.mm",
"substring_util.h",
"substring_util.mm",
]
+ if (is_mas_build) {
+ blink_core_sources_editing += [ "kill_ring_mac.mm" ]
+ } else {
+ blink_core_sources_editing += [ "kill_ring_none.cc" ]
+ }
} else {
blink_core_sources_editing += [ "kill_ring_none.cc" ]
}
diff --git a/ui/accelerated_widget_mac/BUILD.gn b/ui/accelerated_widget_mac/BUILD.gn
index 3ead42e14ad9d41a30c5637678a3ac49296ce2a6..07665bbefd34737bf6a8c3e79d70b066920788c9 100644
--- a/ui/accelerated_widget_mac/BUILD.gn
+++ b/ui/accelerated_widget_mac/BUILD.gn
@@ -64,6 +64,7 @@ component("accelerated_widget_mac") {
"//ui/gfx",
"//ui/gfx/geometry",
"//ui/gl",
+ "//electron/build/config:generate_mas_config",
]
}
diff --git a/ui/accelerated_widget_mac/ca_layer_tree_coordinator.h b/ui/accelerated_widget_mac/ca_layer_tree_coordinator.h
index b11c365f42dd1ddc363de0d94c387b13ac65bef3..5da42beb20b514396287cc6dc5cba608e1660b2e 100644
--- a/ui/accelerated_widget_mac/ca_layer_tree_coordinator.h
+++ b/ui/accelerated_widget_mac/ca_layer_tree_coordinator.h
@@ -7,6 +7,7 @@
#include <queue>
+#include "electron/mas.h"
#include "ui/accelerated_widget_mac/accelerated_widget_mac_export.h"
#include "ui/accelerated_widget_mac/ca_renderer_layer_tree.h"
#include "ui/gfx/ca_layer_result.h"
@@ -14,7 +15,9 @@
#include "ui/gl/gl_surface.h"
#include "ui/gl/presenter.h"
+#if !IS_MAS_BUILD()
@class CAContext;
+#endif
@class CALayer;
namespace ui {
@@ -110,7 +113,9 @@ class ACCELERATED_WIDGET_MAC_EXPORT CALayerTreeCoordinator {
// both the current tree and the pending trees.
size_t presented_ca_layer_trees_max_length_ = 2;
+#if !IS_MAS_BUILD()
CAContext* __strong ca_context_;
+#endif
// The root CALayer to display the current frame. This does not change
// over the lifetime of the object.
diff --git a/ui/accelerated_widget_mac/ca_layer_tree_coordinator.mm b/ui/accelerated_widget_mac/ca_layer_tree_coordinator.mm
index b99461d52e3a62b58330691e65f9956748cfbf02..f0c3bb1b809a29eee3d990b0a8bbffddb7500895 100644
--- a/ui/accelerated_widget_mac/ca_layer_tree_coordinator.mm
+++ b/ui/accelerated_widget_mac/ca_layer_tree_coordinator.mm
@@ -10,6 +10,7 @@
#include "base/mac/mac_util.h"
#include "base/task/single_thread_task_runner.h"
#include "base/trace_event/trace_event.h"
+#include "electron/mas.h"
#include "ui/base/cocoa/animation_utils.h"
#include "ui/base/cocoa/remote_layer_api.h"
#include "ui/gfx/ca_layer_params.h"
@@ -33,6 +34,7 @@
new_presentation_feedback_timestamps_(
new_presentation_feedback_timestamps),
buffer_presented_callback_(buffer_presented_callback) {
+#if !IS_MAS_BUILD()
if (allow_remote_layers_) {
root_ca_layer_ = [[CALayer alloc] init];
#if BUILDFLAG(IS_MAC)
@@ -61,6 +63,7 @@
#endif
ca_context_.layer = root_ca_layer_;
}
+#endif
}
CALayerTreeCoordinator::~CALayerTreeCoordinator() = default;
@@ -164,9 +167,13 @@
TRACE_EVENT_INSTANT2("test_gpu", "SwapBuffers", TRACE_EVENT_SCOPE_THREAD,
"GLImpl", static_cast<int>(gl::GetGLImplementation()),
"width", pixel_size_.width());
+#if !IS_MAS_BUILD()
if (allow_remote_layers_) {
params.ca_context_id = [ca_context_ contextId];
} else {
+#else
+ if (true) {
+#endif
IOSurfaceRef io_surface = frame->layer_tree->GetContentIOSurface();
if (io_surface) {
DCHECK(!allow_remote_layers_);
diff --git a/ui/accelerated_widget_mac/display_ca_layer_tree.mm b/ui/accelerated_widget_mac/display_ca_layer_tree.mm
index dcf493d62990018040a3f84b6f875af737bd2214..3d1c4dcc9ee0bbfdac15f40d9c74e9f342a59e39 100644
--- a/ui/accelerated_widget_mac/display_ca_layer_tree.mm
+++ b/ui/accelerated_widget_mac/display_ca_layer_tree.mm
@@ -12,6 +12,7 @@
#include "base/mac/mac_util.h"
#include "base/trace_event/trace_event.h"
#include "build/build_config.h"
+#include "electron/mas.h"
#include "ui/base/cocoa/animation_utils.h"
#include "ui/base/cocoa/remote_layer_api.h"
#include "ui/gfx/geometry/dip_util.h"
@@ -121,6 +122,7 @@ - (void)setContentsChanged;
}
void DisplayCALayerTree::GotCALayerFrame(uint32_t ca_context_id) {
+#if !IS_MAS_BUILD()
// Early-out if the remote layer has not changed.
if (remote_layer_.contextId == ca_context_id) {
return;
@@ -150,6 +152,9 @@ - (void)setContentsChanged;
[io_surface_layer_ removeFromSuperlayer];
io_surface_layer_ = nil;
}
+#else
+ NOTREACHED() << "Remote layer is being used in MAS build";
+#endif
}
void DisplayCALayerTree::GotIOSurfaceFrame(
diff --git a/ui/accessibility/platform/BUILD.gn b/ui/accessibility/platform/BUILD.gn
index 2b3aad7a639c68c6a131e86352b40128ab6af411..840968e8117dd6657c240fa81f3a42b65a39b733 100644
--- a/ui/accessibility/platform/BUILD.gn
+++ b/ui/accessibility/platform/BUILD.gn
@@ -283,6 +283,7 @@ component("platform") {
"AppKit.framework",
"Foundation.framework",
]
+ deps += ["//electron/build/config:generate_mas_config"]
}
if (is_ios) {
diff --git a/ui/accessibility/platform/browser_accessibility_manager_mac.mm b/ui/accessibility/platform/browser_accessibility_manager_mac.mm
index be442f6a2a67d07ec78fe00a3e864bf0088fe504..2332199d02b98f53375b4e3e40e25018cb584228 100644
--- a/ui/accessibility/platform/browser_accessibility_manager_mac.mm
+++ b/ui/accessibility/platform/browser_accessibility_manager_mac.mm
@@ -13,13 +13,16 @@
#include "base/task/single_thread_task_runner.h"
#include "base/task/task_traits.h"
#include "base/time/time.h"
+#include "electron/mas.h"
#include "ui/accelerated_widget_mac/accelerated_widget_mac.h"
#include "ui/accessibility/ax_role_properties.h"
#include "ui/accessibility/platform/ax_platform_tree_manager_delegate.h"
#include "ui/accessibility/platform/ax_private_webkit_constants_mac.h"
#import "ui/accessibility/platform/browser_accessibility_cocoa.h"
#import "ui/accessibility/platform/browser_accessibility_mac.h"
+#if !IS_MAS_BUILD()
#include "ui/base/cocoa/remote_accessibility_api.h"
+#endif
namespace {
@@ -227,6 +230,7 @@ void PostAnnouncementNotification(NSString* announcement,
return;
}
+#if !IS_MAS_BUILD()
BrowserAccessibilityManager* root_manager = GetManagerForRootFrame();
if (root_manager) {
BrowserAccessibilityManagerMac* root_manager_mac =
@@ -249,6 +253,7 @@ void PostAnnouncementNotification(NSString* announcement,
return;
}
}
+#endif
// Use native VoiceOver support for live regions.
BrowserAccessibilityCocoa* retained_node = native_node;
@@ -645,6 +650,7 @@ void PostAnnouncementNotification(NSString* announcement,
return window == [NSApp accessibilityFocusedWindow];
}
+#if !IS_MAS_BUILD()
// TODO(accessibility): We need a solution to the problem described below.
// If the window is NSAccessibilityRemoteUIElement, there are some challenges:
// 1. NSApp is the browser which spawned the PWA, and what it considers the
@@ -673,6 +679,7 @@ void PostAnnouncementNotification(NSString* announcement,
if ([window isKindOfClass:[NSAccessibilityRemoteUIElement class]]) {
return true;
}
+#endif
return false;
}
diff --git a/ui/accessibility/platform/inspect/ax_transform_mac.mm b/ui/accessibility/platform/inspect/ax_transform_mac.mm
index c8171f0527fe5194f0ea73b57c4444d4c630fbc4..c2ac4da580e3e7f749a0a4de1e859af62de11672 100644
--- a/ui/accessibility/platform/inspect/ax_transform_mac.mm
+++ b/ui/accessibility/platform/inspect/ax_transform_mac.mm
@@ -11,6 +11,7 @@
#include "base/apple/foundation_util.h"
#include "base/strings/sys_string_conversions.h"
+#include "electron/mas.h"
#include "ui/accessibility/ax_range.h"
#include "ui/accessibility/platform/ax_platform_node.h"
#include "ui/accessibility/platform/ax_platform_node_cocoa.h"
@@ -111,6 +112,7 @@
}
}
+#if !IS_MAS_BUILD()
// AXTextMarker
if (IsAXTextMarker(value)) {
return AXTextMarkerToBaseValue(value, indexer);
@@ -120,6 +122,7 @@
if (IsAXTextMarkerRange(value)) {
return AXTextMarkerRangeToBaseValue(value, indexer);
}
+#endif
// Accessible object
if (AXElementWrapper::IsValidElement(value)) {
diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn
index d7541d80aab34a06348359fbcdb41c7d45579b6a..b72f3f34cbe5059940025c2dd89dfa89960436d1 100644
--- a/ui/base/BUILD.gn
+++ b/ui/base/BUILD.gn
@@ -380,6 +380,13 @@ component("base") {
sources += [ "resource/resource_bundle_lacros.cc" ]
}
+ if (is_mas_build) {
+ sources -= [
+ "cocoa/remote_accessibility_api.h",
+ "cocoa/remote_accessibility_api.mm",
+ ]
+ }
+
if (is_ios) {
sources += [
"device_form_factor_ios.mm",
@@ -530,6 +537,12 @@ component("base") {
"//url",
]
+ if (is_mac) {
+ deps += [
+ "//electron/build/config:generate_mas_config"
+ ]
+ }
+
if (is_debug || dcheck_always_on) {
deps += [ "//third_party/re2" ]
}
diff --git a/ui/base/cocoa/remote_accessibility_api.h b/ui/base/cocoa/remote_accessibility_api.h
index 3182458838aa96d34911280ab4c6c3aa4aa22d6d..6dc85c366b7e61c8bd0302e501c3223a19223313 100644
--- a/ui/base/cocoa/remote_accessibility_api.h
+++ b/ui/base/cocoa/remote_accessibility_api.h
@@ -10,9 +10,12 @@
#include <vector>
#include "base/component_export.h"
+#include "electron/mas.h"
// NSAccessibilityRemoteUIElement is a private class in AppKit.
+#if !IS_MAS_BUILD()
+
@interface NSAccessibilityRemoteUIElement : NSObject
+ (void)setRemoteUIApp:(BOOL)flag;
+ (BOOL)isRemoteUIApp;
@@ -38,4 +41,6 @@ class COMPONENT_EXPORT(UI_BASE) RemoteAccessibility {
} // namespace ui
+#endif // MAS_BUILD
+
#endif // UI_BASE_COCOA_REMOTE_ACCESSIBILITY_API_H_
diff --git a/ui/base/cocoa/remote_layer_api.h b/ui/base/cocoa/remote_layer_api.h
index 59dc2f82214cfd883b6ebef3b0fb25af6387a9cd..912c5252d1b30d943a1552739b9eef9a8eae2d7a 100644
--- a/ui/base/cocoa/remote_layer_api.h
+++ b/ui/base/cocoa/remote_layer_api.h
@@ -9,6 +9,7 @@
#include "base/component_export.h"
#include "build/build_config.h"
+#include "electron/mas.h"
#if defined(__OBJC__)
#import <Foundation/Foundation.h>
@@ -17,6 +18,7 @@
#if BUILDFLAG(IS_MAC)
+#if !IS_MAS_BUILD()
// The CGSConnectionID is used to create the CAContext in the process that is
// going to share the CALayers that it is rendering to another process to
// display.
@@ -68,6 +70,8 @@ extern NSString* const kCAContextIgnoresHitTest;
#endif // __OBJC__
+#endif // MAS_BUILD
+
namespace ui {
// This function will check if all of the interfaces listed above are supported
diff --git a/ui/base/cocoa/remote_layer_api.mm b/ui/base/cocoa/remote_layer_api.mm
index fc25ba79d2b0e1acdb7ba54b89e7d6e16f94771b..de771ef414b9a69e331261524f08e9a12145ec60 100644
--- a/ui/base/cocoa/remote_layer_api.mm
+++ b/ui/base/cocoa/remote_layer_api.mm
@@ -5,11 +5,13 @@
#include "ui/base/cocoa/remote_layer_api.h"
#include "base/feature_list.h"
+#include "electron/mas.h"
#include <objc/runtime.h>
namespace ui {
+#if !IS_MAS_BUILD()
namespace {
// Control use of cross-process CALayers to display content directly from the
// GPU process on Mac.
@@ -17,8 +19,10 @@
"RemoteCoreAnimationAPI",
base::FEATURE_ENABLED_BY_DEFAULT);
} // namespace
+#endif
bool RemoteLayerAPISupported() {
+#if !IS_MAS_BUILD()
if (!base::FeatureList::IsEnabled(kRemoteCoreAnimationAPI))
return false;
@@ -55,6 +59,9 @@ bool RemoteLayerAPISupported() {
// If everything is there, we should be able to use the API.
return true;
+#else
+ return false;
+#endif // MAS_BUILD
}
} // namespace
diff --git a/ui/display/BUILD.gn b/ui/display/BUILD.gn
index 84afacf999c4905fdbaba332e19058a6471c3436..bbab402c8c11e62dad7fa946d9550efa3637dbda 100644
--- a/ui/display/BUILD.gn
+++ b/ui/display/BUILD.gn
@@ -130,6 +130,12 @@ component("display") {
"//ui/gfx/geometry",
]
+ if (is_mac) {
+ deps += [
+ "//electron/build/config:generate_mas_config"
+ ]
+ }
+
if (is_ios) {
deps += [ "//build:ios_buildflags" ]
}
diff --git a/ui/display/mac/screen_mac.mm b/ui/display/mac/screen_mac.mm
index 29ae2da6a8a2c2a612dfb92f7f9c03ca5fa306b1..440c139a32a0c205e77b657d4aab64684661a01d 100644
--- a/ui/display/mac/screen_mac.mm
+++ b/ui/display/mac/screen_mac.mm
@@ -30,6 +30,7 @@
#include "base/trace_event/trace_event.h"
#include "build/build_config.h"
#include "components/device_event_log/device_event_log.h"
+#include "electron/mas.h"
#include "ui/display/display.h"
#include "ui/display/display_change_notifier.h"
#include "ui/display/util/display_util.h"
@@ -176,7 +177,17 @@ DisplayMac BuildDisplayForScreen(NSScreen* screen) {
display.set_color_depth(Display::kDefaultBitsPerPixel);
display.set_depth_per_component(Display::kDefaultBitsPerComponent);
}
+#if IS_MAS_BUILD()
+ // This is equivalent to the CGDisplayUsesForceToGray() API as at 2018-08-06,
+ // but avoids usage of the private API.
+ CFStringRef app = CFSTR("com.apple.CoreGraphics");
+ CFStringRef key = CFSTR("DisplayUseForcedGray");
+ Boolean key_valid = false;
+ display.set_is_monochrome(
+ CFPreferencesGetAppBooleanValue(key, app, &key_valid));
+#else
display.set_is_monochrome(CGDisplayUsesForceToGray());
+#endif
// Query the display's refresh rate.
if (@available(macos 12.0, *)) {
diff --git a/ui/gfx/BUILD.gn b/ui/gfx/BUILD.gn
index 762ffff0e4a7ffc40e85dc82f5f0f243a447a85d..db4fbc65fded3beb58e6c336e1d4c4d33d3b2c25 100644
--- a/ui/gfx/BUILD.gn
+++ b/ui/gfx/BUILD.gn
@@ -335,6 +335,12 @@ component("gfx") {
"//ui/base:ui_data_pack",
]
+ if (is_mac) {
+ deps += [
+ "//electron/build/config:generate_mas_config"
+ ]
+ }
+
if (!is_apple) {
sources += [
"platform_font_skia.cc",
diff --git a/ui/gfx/platform_font_mac.mm b/ui/gfx/platform_font_mac.mm
index fe3f85073e31de487a08e57d7f9b07aa4eccf8f3..cf5b07203c8bd559a404600cc98cc8eccdefd4d7 100644
--- a/ui/gfx/platform_font_mac.mm
+++ b/ui/gfx/platform_font_mac.mm
@@ -19,6 +19,7 @@
#include "base/numerics/safe_conversions.h"
#include "base/strings/sys_string_conversions.h"
#include "base/strings/utf_string_conversions.h"
+#include "electron/mas.h"
#include "third_party/skia/include/ports/SkTypeface_mac.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/font.h"
@@ -28,9 +29,11 @@
using Weight = Font::Weight;
+#if !IS_MAS_BUILD()
extern "C" {
bool CTFontDescriptorIsSystemUIFont(CTFontDescriptorRef);
}
+#endif
namespace {
@@ -250,7 +253,13 @@ CTFontRef SystemFontForConstructorOfType(
// TODO(avi, etienneb): Figure out this font stuff.
base::apple::ScopedCFTypeRef<CTFontDescriptorRef> descriptor(
CTFontCopyFontDescriptor(font));
+#if IS_MAS_BUILD()
+ CFNumberRef priority = (CFNumberRef)CTFontDescriptorCopyAttribute(descriptor.get(), (CFStringRef)kCTFontPriorityAttribute);
+ SInt64 v;
+ if (CFNumberGetValue(priority, kCFNumberSInt64Type, &v) && v == kCTFontPrioritySystem) {
+#else
if (CTFontDescriptorIsSystemUIFont(descriptor.get())) {
+#endif
// Assume it's the standard system font. The fact that this much is known is
// enough.
return PlatformFontMac::SystemFontType::kGeneral;
diff --git a/ui/views/BUILD.gn b/ui/views/BUILD.gn
index b0032a1d1d23acb43b702295ac7a5e3445610fbe..a1568062e4657f787fb28d04d1ffecc9d77d1376 100644
--- a/ui/views/BUILD.gn
+++ b/ui/views/BUILD.gn
@@ -723,6 +723,8 @@ component("views") {
"IOSurface.framework",
"QuartzCore.framework",
]
+
+ deps += ["//electron/build/config:generate_mas_config"]
}
if (is_win) {
@@ -1157,6 +1159,8 @@ source_set("test_support") {
"//ui/base/mojom:ui_base_types",
]
+ deps += ["//electron/build/config:generate_mas_config"]
+
if (is_win) {
sources += [
"test/desktop_window_tree_host_win_test_api.cc",
diff --git a/ui/views/cocoa/native_widget_mac_ns_window_host.h b/ui/views/cocoa/native_widget_mac_ns_window_host.h
index 81979cdb6c5dbad84ea67ef9014ce4027bcdc161..daeda64747dcbcd05f34e77079be701c5b281e7d 100644
--- a/ui/views/cocoa/native_widget_mac_ns_window_host.h
+++ b/ui/views/cocoa/native_widget_mac_ns_window_host.h
@@ -18,6 +18,7 @@
#include "components/remote_cocoa/browser/scoped_cg_window_id.h"
#include "components/remote_cocoa/common/native_widget_ns_window.mojom.h"
#include "components/remote_cocoa/common/native_widget_ns_window_host.mojom.h"
+#include "electron/mas.h"
#include "mojo/public/cpp/bindings/associated_receiver.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
#include "ui/accelerated_widget_mac/accelerated_widget_mac.h"
@@ -32,7 +33,9 @@
#include "ui/views/window/dialog_observer.h"
@class NativeWidgetMacNSWindow;
+#if !IS_MAS_BUILD()
@class NSAccessibilityRemoteUIElement;
+#endif
@class NSView;
namespace remote_cocoa {
@@ -483,10 +486,12 @@ class VIEWS_EXPORT NativeWidgetMacNSWindowHost
mojo::AssociatedRemote<remote_cocoa::mojom::NativeWidgetNSWindow>
remote_ns_window_remote_;
+#if !IS_MAS_BUILD()
// Remote accessibility objects corresponding to the NSWindow and its root
// NSView.
NSAccessibilityRemoteUIElement* __strong remote_window_accessible_;
NSAccessibilityRemoteUIElement* __strong remote_view_accessible_;
+#endif
// Used to force the NSApplication's focused accessibility element to be the
// views::Views accessibility tree when the NSView for this is focused.
diff --git a/ui/views/cocoa/native_widget_mac_ns_window_host.mm b/ui/views/cocoa/native_widget_mac_ns_window_host.mm
index 9a915cb0c36b224b8b95fa84bc1909de4283776f..e402df17b4e7273c850d0bd822019ee9d0f669a9 100644
--- a/ui/views/cocoa/native_widget_mac_ns_window_host.mm
+++ b/ui/views/cocoa/native_widget_mac_ns_window_host.mm
@@ -21,6 +21,7 @@
#include "components/remote_cocoa/app_shim/native_widget_ns_window_bridge.h"
#include "components/remote_cocoa/browser/ns_view_ids.h"
#include "components/remote_cocoa/browser/window.h"
+#include "electron/mas.h"
#include "mojo/public/cpp/bindings/self_owned_associated_receiver.h"
#include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
#include "ui/accessibility/accessibility_features.h"
@@ -349,7 +350,11 @@ void HandleAccelerator(const ui::Accelerator& accelerator,
NativeWidgetMacNSWindowHost::GetNativeViewAccessibleForNSView() const {
if (in_process_ns_window_bridge_)
return in_process_ns_window_bridge_->ns_view();
+#if !IS_MAS_BUILD()
return remote_view_accessible_;
+#else
+ return nullptr;
+#endif
}
gfx::NativeViewAccessible
@@ -364,7 +369,11 @@ void HandleAccelerator(const ui::Accelerator& accelerator,
return [in_process_ns_window_bridge_->ns_view() window];
}
+#if !IS_MAS_BUILD()
return remote_window_accessible_;
+#else
+ return nullptr;
+#endif
}
remote_cocoa::mojom::NativeWidgetNSWindow*
@@ -1333,9 +1342,11 @@ void HandleAccelerator(const ui::Accelerator& accelerator,
// for PWAs. However this breaks accessibility on in-process windows,
// so set it back to NO when a local window gains focus. See
// https://crbug.com/41485830.
+#if !IS_MAS_BUILD()
if (is_key && features::IsAccessibilityRemoteUIAppEnabled()) {
[NSAccessibilityRemoteUIElement setRemoteUIApp:!!application_host_];
}
+#endif
// Explicitly set the keyboard accessibility state on regaining key
// window status.
if (is_key && is_content_first_responder)
@@ -1474,17 +1485,20 @@ void HandleAccelerator(const ui::Accelerator& accelerator,
void NativeWidgetMacNSWindowHost::SetRemoteAccessibilityTokens(
const std::vector<uint8_t>& window_token,
const std::vector<uint8_t>& view_token) {
+#if !IS_MAS_BUILD()
remote_window_accessible_ =
ui::RemoteAccessibility::GetRemoteElementFromToken(window_token);
remote_view_accessible_ =
ui::RemoteAccessibility::GetRemoteElementFromToken(view_token);
[remote_view_accessible_ setWindowUIElement:remote_window_accessible_];
[remote_view_accessible_ setTopLevelUIElement:remote_window_accessible_];
+#endif
}
bool NativeWidgetMacNSWindowHost::GetRootViewAccessibilityToken(
base::ProcessId* pid,
std::vector<uint8_t>* token) {
+#if !IS_MAS_BUILD()
*pid = getpid();
id element_id = GetNativeViewAccessible();
@@ -1497,6 +1511,7 @@ void HandleAccelerator(const ui::Accelerator& accelerator,
}
*token = ui::RemoteAccessibility::GetTokenForLocalElement(element_id);
+#endif
return true;
}
diff --git a/ui/views/controls/webview/BUILD.gn b/ui/views/controls/webview/BUILD.gn
index 111d6432586f47833dde50678b908c76ad88d37a..429ca4402652a2d89ead228d92971f0cb3b6222c 100644
--- a/ui/views/controls/webview/BUILD.gn
+++ b/ui/views/controls/webview/BUILD.gn
@@ -46,6 +46,12 @@ component("webview") {
"//url",
]
+ if (is_mac) {
+ deps += [
+ "//electron/build/config:generate_mas_config",
+ ]
+ }
+
public_deps = [
"//base",
"//content/public/browser",