refactor: add ARC scaffolding for macOS (#38621)

This commit is contained in:
Shelley Vohr 2023-06-08 10:26:33 +02:00 committed by GitHub
parent 0294debc31
commit 9a9d8ae5ea
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 43 additions and 23 deletions

View file

@ -540,6 +540,7 @@ source_set("electron_lib") {
if (is_mac) {
deps += [
":electron_lib_arc",
"//components/remote_cocoa/app_shim",
"//components/remote_cocoa/browser",
"//content/browser:mac_helpers",
@ -774,6 +775,27 @@ source_set("electron_lib") {
}
}
if (is_mac) {
source_set("electron_lib_arc") {
include_dirs = [ "." ]
sources = [
"shell/browser/mac/dict_util.h",
"shell/browser/mac/dict_util.mm",
"shell/browser/mac/electron_application_delegate.h",
"shell/browser/mac/electron_application_delegate.mm",
]
deps = [
"//base",
"//skia",
"//third_party/electron_node:node_lib",
"//v8",
]
configs += [ "//build/config/compiler:enable_arc" ]
}
}
electron_paks("packed_resources") {
if (is_mac) {
output_dir = "$root_gen_dir/electron_repack"

View file

@ -129,10 +129,6 @@ filenames = {
"shell/browser/auto_updater_mac.mm",
"shell/browser/browser_mac.mm",
"shell/browser/electron_browser_main_parts_mac.mm",
"shell/browser/mac/dict_util.h",
"shell/browser/mac/dict_util.mm",
"shell/browser/mac/electron_application_delegate.h",
"shell/browser/mac/electron_application_delegate.mm",
"shell/browser/mac/electron_application.h",
"shell/browser/mac/electron_application.mm",
"shell/browser/mac/in_app_purchase_observer.h",

View file

@ -10,6 +10,10 @@
#include "base/strings/sys_string_conversions.h"
#include "base/values.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace electron {
NSArray* ListValueToNSArray(const base::Value::List& value) {

View file

@ -9,10 +9,7 @@
#import "shell/browser/ui/cocoa/electron_menu_controller.h"
@interface ElectronApplicationDelegate : NSObject <NSApplicationDelegate> {
@private
base::scoped_nsobject<ElectronMenuController> menu_controller_;
}
@interface ElectronApplicationDelegate : NSObject <NSApplicationDelegate>
// Sets the menu that will be returned in "applicationDockMenu:".
- (void)setApplicationDockMenu:(electron::ElectronMenuModel*)model;

View file

@ -10,7 +10,6 @@
#include "base/allocator/buildflags.h"
#include "base/allocator/partition_allocator/shim/allocator_shim.h"
#include "base/mac/mac_util.h"
#include "base/mac/scoped_objc_class_swizzler.h"
#include "base/strings/sys_string_conversions.h"
#include "base/values.h"
#include "shell/browser/api/electron_api_push_notifications.h"
@ -20,9 +19,12 @@
#import <UserNotifications/UserNotifications.h>
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
static NSDictionary* UNNotificationResponseToNSDictionary(
UNNotificationResponse* response) API_AVAILABLE(macosx(10.14)) {
// [response isKindOfClass:[UNNotificationResponse class]]
if (![response respondsToSelector:@selector(actionIdentifier)] ||
![response respondsToSelector:@selector(notification)]) {
return nil;
@ -43,11 +45,13 @@ static NSDictionary* UNNotificationResponseToNSDictionary(
return result;
}
@implementation ElectronApplicationDelegate
@implementation ElectronApplicationDelegate {
ElectronMenuController* __strong menu_controller_;
}
- (void)setApplicationDockMenu:(electron::ElectronMenuModel*)model {
menu_controller_.reset([[ElectronMenuController alloc] initWithModel:model
useDefaultAccelerator:NO]);
menu_controller_ = [[ElectronMenuController alloc] initWithModel:model
useDefaultAccelerator:NO];
}
- (void)willPowerOff:(NSNotification*)notify {
@ -97,10 +101,7 @@ static NSDictionary* UNNotificationResponseToNSDictionary(
}
- (NSMenu*)applicationDockMenu:(NSApplication*)sender {
if (menu_controller_)
return [menu_controller_ menu];
else
return nil;
return menu_controller_ ? menu_controller_.menu : nil;
}
- (BOOL)application:(NSApplication*)sender openFile:(NSString*)filename {
@ -126,7 +127,7 @@ static NSDictionary* UNNotificationResponseToNSDictionary(
restorationHandler {
std::string activity_type(base::SysNSStringToUTF8(userActivity.activityType));
NSURL* url = userActivity.webpageURL;
NSDictionary* details = url ? @{@"webpageURL" : [url absoluteString]} : @{};
NSDictionary* details = url ? @{@"webpageURL" : url.absoluteString} : @{};
if (!userActivity.userInfo)
return NO;
@ -152,7 +153,7 @@ static NSDictionary* UNNotificationResponseToNSDictionary(
error:(NSError*)error {
std::string activity_type(base::SysNSStringToUTF8(userActivityType));
std::string error_message(
base::SysNSStringToUTF8([error localizedDescription]));
base::SysNSStringToUTF8(error.localizedDescription));
electron::Browser* browser = electron::Browser::Get();
browser->DidFailToContinueUserActivity(activity_type, error_message);
@ -165,9 +166,9 @@ static NSDictionary* UNNotificationResponseToNSDictionary(
- (void)application:(NSApplication*)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken {
// https://stackoverflow.com/a/16411517
const char* token_data = static_cast<const char*>([deviceToken bytes]);
const char* token_data = static_cast<const char*>(deviceToken.bytes);
NSMutableString* token_string = [NSMutableString string];
for (NSUInteger i = 0; i < [deviceToken length]; i++) {
for (NSUInteger i = 0; i < deviceToken.length; i++) {
[token_string appendFormat:@"%02.2hhX", token_data[i]];
}
// Resolve outstanding APNS promises created during registration attempts
@ -182,8 +183,8 @@ static NSDictionary* UNNotificationResponseToNSDictionary(
- (void)application:(NSApplication*)application
didFailToRegisterForRemoteNotificationsWithError:(NSError*)error {
std::string error_message(base::SysNSStringToUTF8(
[NSString stringWithFormat:@"%ld %@ %@", [error code], [error domain],
[error userInfo]]));
[NSString stringWithFormat:@"%ld %@ %@", error.code, error.domain,
error.userInfo]));
electron::api::PushNotifications* push_notifications =
electron::api::PushNotifications::Get();
if (push_notifications) {