electron/atom/renderer/lib/init.coffee

102 lines
3.3 KiB
CoffeeScript
Raw Normal View History

events = require 'events'
path = require 'path'
url = require 'url'
Module = require 'module'
# 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.
globalPaths = Module.globalPaths
2015-02-13 04:55:06 +00:00
globalPaths.push path.resolve(__dirname, '..', 'api', 'lib')
# Import common settings.
2015-01-22 01:38:26 +00:00
require path.resolve(__dirname, '..', '..', 'common', 'lib', 'init')
# 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.
nodeIntegration = 'false'
2014-10-25 10:51:26 +00:00
for arg in process.argv
if arg.indexOf('--guest-instance-id=') == 0
2014-10-25 10:51:26 +00:00
# This is a guest web view.
process.guestInstanceId = parseInt arg.substr(arg.indexOf('=') + 1)
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.
require './inspector'
nodeIntegration = 'true'
else if location.protocol is 'chrome-extension:'
# Add implementations of chrome API.
require './chrome-api'
nodeIntegration = 'true'
2014-04-03 12:54:42 +00:00
else
# Override default web functions.
require './override'
2014-10-22 14:55:13 +00:00
# Load webview tag implementation.
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.
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
# Delete Node's symbols after the Environment has been loaded.
process.once 'loaded', ->
delete global.process
delete global.setImmediate
delete global.clearImmediate
delete global.global
2014-11-06 07:13:37 +00:00
# Load the script specfied by the "preload" attribute.
if preloadScript
try
require preloadScript
catch error
if error.code is 'MODULE_NOT_FOUND'
console.error "Unable to load preload script #{preloadScript}"
else
console.error(error)
console.error(error.stack)