refactor: add ARC scaffolding for macOS (#38621)
This commit is contained in:
parent
0294debc31
commit
9a9d8ae5ea
5 changed files with 43 additions and 23 deletions
22
BUILD.gn
22
BUILD.gn
|
@ -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"
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Reference in a new issue