2014-11-03 14:18:03 +00:00
|
|
|
process = global.process
|
2015-01-27 02:42:43 +00:00
|
|
|
events = require 'events'
|
2014-11-03 14:18:03 +00:00
|
|
|
path = require 'path'
|
|
|
|
url = require 'url'
|
|
|
|
Module = require 'module'
|
2013-12-15 06:20:28 +00: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
|
|
|
|
|
|
|
|
# Add renderer/api/lib to require's search paths, which contains javascript part
|
|
|
|
# of Atom's built-in libraries.
|
2013-12-15 08:11:00 +00:00
|
|
|
globalPaths = Module.globalPaths
|
2015-02-13 04:55:06 +00:00
|
|
|
globalPaths.push path.resolve(__dirname, '..', 'api', 'lib')
|
2013-12-15 08:11:00 +00:00
|
|
|
# And also app.
|
|
|
|
globalPaths.push path.join(process.resourcesPath, 'app')
|
2015-02-13 04:55:06 +00:00
|
|
|
globalPaths.push path.join(process.resourcesPath, 'app.asar')
|
2013-12-15 06:20:28 +00:00
|
|
|
|
2014-01-13 05:57:08 +00:00
|
|
|
# Import common settings.
|
2015-01-22 01:38:26 +00:00
|
|
|
require path.resolve(__dirname, '..', '..', 'common', 'lib', 'init')
|
2014-01-13 05:57:08 +00:00
|
|
|
|
2015-01-27 02:42:43 +00: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 10:51:26 +00:00
|
|
|
# Process command line arguments.
|
2014-10-25 11:20:04 +00:00
|
|
|
nodeIntegration = 'false'
|
2014-10-25 10:51:26 +00:00
|
|
|
for arg in process.argv
|
2014-10-26 11:30:53 +00:00
|
|
|
if arg.indexOf('--guest-instance-id=') == 0
|
2014-10-25 10:51:26 +00:00
|
|
|
# This is a guest web view.
|
2014-10-26 11:30:53 +00:00
|
|
|
process.guestInstanceId = parseInt arg.substr(arg.indexOf('=') + 1)
|
2014-10-25 10:51:26 +00:00
|
|
|
# Set the frame name to make AtomRendererClient recognize this guest.
|
|
|
|
require('web-frame').setName 'ATOM_SHELL_GUEST_WEB_VIEW'
|
2014-10-26 11:30:53 +00:00
|
|
|
else if arg.indexOf('--node-integration=') == 0
|
2014-10-25 10:51:26 +00:00
|
|
|
nodeIntegration = arg.substr arg.indexOf('=') + 1
|
2014-11-12 07:04:03 +00:00
|
|
|
else if arg.indexOf('--preload=') == 0
|
2014-11-06 07:13:37 +00:00
|
|
|
preloadScript = arg.substr arg.indexOf('=') + 1
|
2014-10-24 10:44:15 +00:00
|
|
|
|
2014-04-03 12:54:42 +00:00
|
|
|
if location.protocol is 'chrome-devtools:'
|
|
|
|
# Override some inspector APIs.
|
2014-12-09 00:14:12 +00:00
|
|
|
require './inspector'
|
2014-11-16 14:34:29 +00:00
|
|
|
nodeIntegration = 'true'
|
2014-08-28 04:24:52 +00:00
|
|
|
else if location.protocol is 'chrome-extension:'
|
|
|
|
# Add implementations of chrome API.
|
2014-12-09 00:14:12 +00:00
|
|
|
require './chrome-api'
|
2014-11-16 14:34:29 +00:00
|
|
|
nodeIntegration = 'true'
|
2014-04-03 12:54:42 +00:00
|
|
|
else
|
|
|
|
# Override default web functions.
|
2014-12-09 00:14:12 +00:00
|
|
|
require './override'
|
2014-10-22 14:55:13 +00:00
|
|
|
# Load webview tag implementation.
|
2014-12-09 00:14:12 +00:00
|
|
|
unless process.guestInstanceId?
|
|
|
|
require './web-view/web-view'
|
|
|
|
require './web-view/web-view-attributes'
|
2014-10-25 10:51:26 +00:00
|
|
|
|
|
|
|
if nodeIntegration in ['true', 'all', 'except-iframe', 'manual-enable-iframe']
|
|
|
|
# Export node bindings to global.
|
|
|
|
global.require = require
|
|
|
|
global.module = module
|
|
|
|
|
2015-02-01 02:50:26 +00:00
|
|
|
# Set the __filename to the path of html file if it is file: protocol.
|
|
|
|
if window.location.protocol is 'file:'
|
2014-10-25 10:51:26 +00: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 19:38:03 +00:00
|
|
|
window.onerror = (message, filename, lineno, colno, error) ->
|
2014-10-25 10:51:26 +00: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 14:20:20 +00:00
|
|
|
# Delete Node's symbols after the Environment has been loaded.
|
|
|
|
process.once 'loaded', ->
|
2015-01-22 00:40:19 +00:00
|
|
|
delete global.process
|
|
|
|
delete global.setImmediate
|
|
|
|
delete global.clearImmediate
|
2015-07-14 15:38:54 +00:00
|
|
|
delete global.global
|
2014-11-06 07:13:37 +00:00
|
|
|
|
|
|
|
# Load the script specfied by the "preload" attribute.
|
2014-11-06 08:12:40 +00:00
|
|
|
if preloadScript
|
|
|
|
try
|
|
|
|
require preloadScript
|
|
|
|
catch error
|
2015-05-01 23:10:45 +00:00
|
|
|
if error.code is 'MODULE_NOT_FOUND'
|
|
|
|
console.error "Unable to load preload script #{preloadScript}"
|
|
|
|
else
|
|
|
|
console.error(error)
|
|
|
|
console.error(error.stack)
|