| 
									
										
										
										
											2019-04-18 22:04:58 -07:00
										 |  |  | // Copyright (c) 2019 GitHub, Inc. | 
					
						
							|  |  |  | // Use of this source code is governed by the MIT license that can be | 
					
						
							|  |  |  | // found in the LICENSE file. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-05 19:12:25 +00:00
										 |  |  | #include <string> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-18 22:04:58 -07:00
										 |  |  | #include "base/path_service.h" | 
					
						
							| 
									
										
										
										
											2019-06-19 13:46:59 -07:00
										 |  |  | #include "shell/browser/api/electron_api_app.h" | 
					
						
							| 
									
										
										
										
											2020-05-07 13:31:26 -07:00
										 |  |  | #include "shell/common/electron_paths.h" | 
					
						
							| 
									
										
										
										
											2021-06-02 03:42:07 -07:00
										 |  |  | #include "shell/common/node_includes.h" | 
					
						
							|  |  |  | #include "shell/common/process_util.h" | 
					
						
							| 
									
										
										
										
											2022-11-17 14:59:23 -05:00
										 |  |  | #include "shell/common/thread_restrictions.h" | 
					
						
							| 
									
										
										
										
											2019-04-18 22:04:58 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #import <Cocoa/Cocoa.h> | 
					
						
							| 
									
										
										
										
											2020-11-13 12:53:32 -08:00
										 |  |  | #import <sys/sysctl.h> | 
					
						
							| 
									
										
										
										
											2019-04-18 22:04:58 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-29 12:55:47 -07:00
										 |  |  | namespace electron::api { | 
					
						
							| 
									
										
										
										
											2019-04-18 22:04:58 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-06 14:52:54 +09:00
										 |  |  | void App::SetAppLogsPath(gin_helper::ErrorThrower thrower, | 
					
						
							| 
									
										
										
										
											2024-01-10 23:23:35 +01:00
										 |  |  |                          std::optional<base::FilePath> custom_path) { | 
					
						
							| 
									
										
										
										
											2019-08-19 15:16:00 -07:00
										 |  |  |   if (custom_path.has_value()) { | 
					
						
							|  |  |  |     if (!custom_path->IsAbsolute()) { | 
					
						
							| 
									
										
										
										
											2019-08-23 15:49:54 -07:00
										 |  |  |       thrower.ThrowError("Path must be absolute"); | 
					
						
							| 
									
										
										
										
											2019-04-18 22:04:58 -07:00
										 |  |  |       return; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-04-21 12:28:01 -07:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-11-17 14:59:23 -05:00
										 |  |  |       ScopedAllowBlockingForElectron allow_blocking; | 
					
						
							| 
									
										
										
										
											2020-04-21 12:28:01 -07:00
										 |  |  |       base::PathService::Override(DIR_APP_LOGS, custom_path.value()); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-04-18 22:04:58 -07:00
										 |  |  |   } else { | 
					
						
							|  |  |  |     NSString* bundle_name = | 
					
						
							|  |  |  |         [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]; | 
					
						
							|  |  |  |     NSString* logs_path = | 
					
						
							|  |  |  |         [NSString stringWithFormat:@"Library/Logs/%@", bundle_name]; | 
					
						
							|  |  |  |     NSString* library_path = | 
					
						
							|  |  |  |         [NSHomeDirectory() stringByAppendingPathComponent:logs_path]; | 
					
						
							| 
									
										
										
										
											2020-04-21 12:28:01 -07:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-11-17 14:59:23 -05:00
										 |  |  |       ScopedAllowBlockingForElectron allow_blocking; | 
					
						
							| 
									
										
										
										
											2020-04-21 12:28:01 -07:00
										 |  |  |       base::PathService::Override(DIR_APP_LOGS, | 
					
						
							|  |  |  |                                   base::FilePath([library_path UTF8String])); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-04-18 22:04:58 -07:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-05 19:12:25 +00:00
										 |  |  | void App::SetActivationPolicy(gin_helper::ErrorThrower thrower, | 
					
						
							|  |  |  |                               const std::string& policy) { | 
					
						
							|  |  |  |   NSApplicationActivationPolicy activation_policy; | 
					
						
							|  |  |  |   if (policy == "accessory") { | 
					
						
							|  |  |  |     activation_policy = NSApplicationActivationPolicyAccessory; | 
					
						
							|  |  |  |   } else if (policy == "prohibited") { | 
					
						
							|  |  |  |     activation_policy = NSApplicationActivationPolicyProhibited; | 
					
						
							|  |  |  |   } else if (policy == "regular") { | 
					
						
							|  |  |  |     activation_policy = NSApplicationActivationPolicyRegular; | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     thrower.ThrowError("Invalid activation policy: must be one of 'regular', " | 
					
						
							|  |  |  |                        "'accessory', or 'prohibited'"); | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   [NSApp setActivationPolicy:activation_policy]; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-06-02 09:16:33 +02:00
										 |  |  | bool App::IsRunningUnderARM64Translation() const { | 
					
						
							| 
									
										
										
										
											2020-11-13 12:53:32 -08:00
										 |  |  |   int proc_translated = 0; | 
					
						
							|  |  |  |   size_t size = sizeof(proc_translated); | 
					
						
							| 
									
										
										
										
											2023-10-03 21:26:35 +02:00
										 |  |  |   if (sysctlbyname("sysctl.proc_translated", &proc_translated, &size, nullptr, | 
					
						
							| 
									
										
										
										
											2020-11-13 12:53:32 -08:00
										 |  |  |                    0) == -1) { | 
					
						
							|  |  |  |     return false; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return proc_translated == 1; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-29 12:55:47 -07:00
										 |  |  | }  // namespace electron::api |