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

@ -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) {