| 
									
										
										
										
											2015-09-22 14:30:54 +08:00
										 |  |  | events = require 'events' | 
					
						
							|  |  |  | path   = require 'path' | 
					
						
							|  |  |  | url    = require 'url' | 
					
						
							|  |  |  | Module = require 'module' | 
					
						
							| 
									
										
										
										
											2013-12-15 14:20:28 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | # We modified the original process.argv to let node.js load the
 | 
					
						
							|  |  |  | # atom-renderer.js, we need to restore it here.
 | 
					
						
							|  |  |  | process.argv.splice 1, 1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-03 20:38:39 +08:00
										 |  |  | # Clear search paths.
 | 
					
						
							|  |  |  | require path.resolve(__dirname, '..', '..', 'common', 'lib', 'reset-search-paths') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-03 19:55:59 +08:00
										 |  |  | # Import common settings.
 | 
					
						
							|  |  |  | require path.resolve(__dirname, '..', '..', 'common', 'lib', 'init') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-15 16:11:00 +08:00
										 |  |  | globalPaths = Module.globalPaths | 
					
						
							| 
									
										
										
										
											2015-11-12 21:37:44 +08:00
										 |  |  | unless process.env.ELECTRON_HIDE_INTERNAL_MODULES | 
					
						
							| 
									
										
										
										
											2015-11-12 17:02:04 +08:00
										 |  |  |   globalPaths.push path.resolve(__dirname, '..', 'api', 'lib') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-12 21:46:03 +08:00
										 |  |  | # Expose public APIs.
 | 
					
						
							|  |  |  | globalPaths.push path.resolve(__dirname, '..', 'api', 'lib', 'exports') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-26 18:42:43 -08:00
										 |  |  | # The global variable will be used by ipc for event dispatching
 | 
					
						
							|  |  |  | v8Util = process.atomBinding 'v8_util' | 
					
						
							|  |  |  | v8Util.setHiddenValue global, 'ipc', new events.EventEmitter | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-25 18:51:26 +08:00
										 |  |  | # Process command line arguments.
 | 
					
						
							| 
									
										
										
										
											2014-10-25 19:20:04 +08:00
										 |  |  | nodeIntegration = 'false' | 
					
						
							| 
									
										
										
										
											2014-10-25 18:51:26 +08:00
										 |  |  | for arg in process.argv | 
					
						
							| 
									
										
										
										
											2015-11-13 13:58:31 +08:00
										 |  |  |   if arg.indexOf('--guest-instance-id=') == 0 | 
					
						
							| 
									
										
										
										
											2014-10-25 18:51:26 +08:00
										 |  |  |     # This is a guest web view.
 | 
					
						
							| 
									
										
										
										
											2014-10-26 19:30:53 +08:00
										 |  |  |     process.guestInstanceId = parseInt arg.substr(arg.indexOf('=') + 1) | 
					
						
							| 
									
										
										
										
											2015-12-17 21:27:14 +08:00
										 |  |  |   else if arg.indexOf('--opener-id=') == 0 | 
					
						
							|  |  |  |     # This is a guest BrowserWindow.
 | 
					
						
							|  |  |  |     process.openerId = parseInt arg.substr(arg.indexOf('=') + 1) | 
					
						
							| 
									
										
										
										
											2015-11-13 13:58:31 +08:00
										 |  |  |   else if arg.indexOf('--node-integration=') == 0 | 
					
						
							| 
									
										
										
										
											2014-10-25 18:51:26 +08:00
										 |  |  |     nodeIntegration = arg.substr arg.indexOf('=') + 1 | 
					
						
							| 
									
										
										
										
											2014-11-12 15:04:03 +08:00
										 |  |  |   else if arg.indexOf('--preload=') == 0 | 
					
						
							| 
									
										
										
										
											2014-11-06 15:13:37 +08:00
										 |  |  |     preloadScript = arg.substr arg.indexOf('=') + 1 | 
					
						
							| 
									
										
										
										
											2014-10-24 18:44:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-03 20:54:42 +08:00
										 |  |  | if location.protocol is 'chrome-devtools:' | 
					
						
							|  |  |  |   # Override some inspector APIs.
 | 
					
						
							| 
									
										
										
										
											2014-12-08 16:14:12 -08:00
										 |  |  |   require './inspector' | 
					
						
							| 
									
										
										
										
											2014-11-16 22:34:29 +08:00
										 |  |  |   nodeIntegration = 'true' | 
					
						
							| 
									
										
										
										
											2014-08-28 12:24:52 +08:00
										 |  |  | else if location.protocol is 'chrome-extension:' | 
					
						
							|  |  |  |   # Add implementations of chrome API.
 | 
					
						
							| 
									
										
										
										
											2014-12-08 16:14:12 -08:00
										 |  |  |   require './chrome-api' | 
					
						
							| 
									
										
										
										
											2014-11-16 22:34:29 +08:00
										 |  |  |   nodeIntegration = 'true' | 
					
						
							| 
									
										
										
										
											2014-04-03 20:54:42 +08:00
										 |  |  | else | 
					
						
							|  |  |  |   # Override default web functions.
 | 
					
						
							| 
									
										
										
										
											2014-12-08 16:14:12 -08:00
										 |  |  |   require './override' | 
					
						
							| 
									
										
										
										
											2014-10-22 22:55:13 +08:00
										 |  |  |   # Load webview tag implementation.
 | 
					
						
							| 
									
										
										
										
											2014-12-08 16:14:12 -08:00
										 |  |  |   unless process.guestInstanceId? | 
					
						
							|  |  |  |     require './web-view/web-view' | 
					
						
							|  |  |  |     require './web-view/web-view-attributes' | 
					
						
							| 
									
										
										
										
											2014-10-25 18:51:26 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | if nodeIntegration in ['true', 'all', 'except-iframe', 'manual-enable-iframe'] | 
					
						
							|  |  |  |   # Export node bindings to global.
 | 
					
						
							|  |  |  |   global.require = require | 
					
						
							|  |  |  |   global.module = module | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-31 18:50:26 -08:00
										 |  |  |   # Set the __filename to the path of html file if it is file: protocol.
 | 
					
						
							|  |  |  |   if window.location.protocol is 'file:' | 
					
						
							| 
									
										
										
										
											2014-10-25 18:51:26 +08:00
										 |  |  |     pathname =
 | 
					
						
							|  |  |  |       if process.platform is 'win32' and window.location.pathname[0] is '/' | 
					
						
							|  |  |  |         window.location.pathname.substr 1 | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         window.location.pathname | 
					
						
							|  |  |  |     global.__filename = path.normalize decodeURIComponent(pathname) | 
					
						
							|  |  |  |     global.__dirname = path.dirname global.__filename | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Set module's filename so relative require can work as expected.
 | 
					
						
							|  |  |  |     module.filename = global.__filename | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Also search for module under the html file.
 | 
					
						
							|  |  |  |     module.paths = module.paths.concat Module._nodeModulePaths(global.__dirname) | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     global.__filename = __filename | 
					
						
							|  |  |  |     global.__dirname = __dirname | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Redirect window.onerror to uncaughtException.
 | 
					
						
							| 
									
										
										
										
											2015-07-10 14:38:03 -05:00
										 |  |  |   window.onerror = (message, filename, lineno, colno, error) -> | 
					
						
							| 
									
										
										
										
											2014-10-25 18:51:26 +08:00
										 |  |  |     if global.process.listeners('uncaughtException').length > 0 | 
					
						
							|  |  |  |       global.process.emit 'uncaughtException', error | 
					
						
							|  |  |  |       true | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       false | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Emit the 'exit' event when page is unloading.
 | 
					
						
							|  |  |  |   window.addEventListener 'unload', -> | 
					
						
							|  |  |  |     process.emit 'exit' | 
					
						
							|  |  |  | else | 
					
						
							| 
									
										
										
										
											2015-05-29 22:20:20 +08:00
										 |  |  |   # Delete Node's symbols after the Environment has been loaded.
 | 
					
						
							|  |  |  |   process.once 'loaded', -> | 
					
						
							| 
									
										
										
										
											2015-01-21 16:40:19 -08:00
										 |  |  |     delete global.process | 
					
						
							|  |  |  |     delete global.setImmediate | 
					
						
							|  |  |  |     delete global.clearImmediate | 
					
						
							| 
									
										
										
										
											2015-07-14 08:38:54 -07:00
										 |  |  |     delete global.global | 
					
						
							| 
									
										
										
										
											2014-11-06 15:13:37 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Load the script specfied by the "preload" attribute.
 | 
					
						
							| 
									
										
										
										
											2014-11-06 16:12:40 +08:00
										 |  |  | if preloadScript | 
					
						
							|  |  |  |   try | 
					
						
							|  |  |  |     require preloadScript | 
					
						
							|  |  |  |   catch error | 
					
						
							| 
									
										
										
										
											2015-05-01 16:10:45 -07:00
										 |  |  |     if error.code is 'MODULE_NOT_FOUND' | 
					
						
							|  |  |  |       console.error "Unable to load preload script #{preloadScript}" | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       console.error(error) | 
					
						
							|  |  |  |       console.error(error.stack) |