| 
									
										
										
										
											2013-03-14 13:05:01 -04:00
										 |  |  | // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
					
						
							|  |  |  | // Copyright (c) 2013 Adam Roben <adam@roben.org>. All rights reserved. | 
					
						
							|  |  |  | // Use of this source code is governed by a BSD-style license that can be | 
					
						
							|  |  |  | // found in the LICENSE-CHROMIUM file. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-24 12:49:10 +02:00
										 |  |  | #import "atom/common/mac/main_application_bundle.h" | 
					
						
							| 
									
										
										
										
											2013-03-14 13:05:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-26 18:52:07 +08:00
										 |  |  | #include "base/files/file_path.h" | 
					
						
							| 
									
										
										
										
											2015-11-26 19:07:03 +08:00
										 |  |  | #include "base/mac/bundle_locations.h" | 
					
						
							| 
									
										
										
										
											2015-11-26 18:52:07 +08:00
										 |  |  | #include "base/mac/foundation_util.h" | 
					
						
							|  |  |  | #include "base/path_service.h" | 
					
						
							|  |  |  | #include "base/strings/string_util.h" | 
					
						
							| 
									
										
										
										
											2013-03-14 13:05:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-24 12:49:10 +02:00
										 |  |  | namespace atom { | 
					
						
							| 
									
										
										
										
											2013-03-14 13:05:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-26 19:07:03 +08:00
										 |  |  | namespace { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool HasMainProcessKey() { | 
					
						
							|  |  |  |   NSDictionary* info_dictionary = [base::mac::MainBundle() infoDictionary]; | 
					
						
							| 
									
										
										
										
											2018-04-20 14:47:04 -04:00
										 |  |  |   return | 
					
						
							|  |  |  |       [[info_dictionary objectForKey:@"ElectronMainProcess"] boolValue] != NO; | 
					
						
							| 
									
										
										
										
											2015-11-26 19:07:03 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }  // namespace | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-14 13:05:01 -04:00
										 |  |  | base::FilePath MainApplicationBundlePath() { | 
					
						
							|  |  |  |   // Start out with the path to the running executable. | 
					
						
							|  |  |  |   base::FilePath path; | 
					
						
							| 
									
										
										
										
											2018-09-14 17:09:42 -07:00
										 |  |  |   base::PathService::Get(base::FILE_EXE, &path); | 
					
						
							| 
									
										
										
										
											2013-03-14 13:05:01 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // Up to Contents. | 
					
						
							| 
									
										
										
										
											2015-11-26 19:07:03 +08:00
										 |  |  |   if (!HasMainProcessKey() && | 
					
						
							|  |  |  |       base::EndsWith(path.value(), " Helper", base::CompareCase::SENSITIVE)) { | 
					
						
							| 
									
										
										
										
											2013-03-14 13:05:01 -04:00
										 |  |  |     // The running executable is the helper. Go up five steps: | 
					
						
							|  |  |  |     // Contents/Frameworks/Helper.app/Contents/MacOS/Helper | 
					
						
							|  |  |  |     // ^ to here                                     ^ from here | 
					
						
							|  |  |  |     path = path.DirName().DirName().DirName().DirName().DirName(); | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     // One step up to MacOS, another to Contents. | 
					
						
							|  |  |  |     path = path.DirName().DirName(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   DCHECK_EQ(path.BaseName().value(), "Contents"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Up one more level to the .app. | 
					
						
							|  |  |  |   path = path.DirName(); | 
					
						
							|  |  |  |   DCHECK_EQ(path.BaseName().Extension(), ".app"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return path; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | NSBundle* MainApplicationBundle() { | 
					
						
							| 
									
										
										
										
											2018-04-20 14:47:04 -04:00
										 |  |  |   return [NSBundle bundleWithPath:base::mac::FilePathToNSString( | 
					
						
							|  |  |  |                                       MainApplicationBundlePath())]; | 
					
						
							| 
									
										
										
										
											2013-03-14 13:05:01 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-24 12:49:10 +02:00
										 |  |  | }  // namespace atom |