02bdace366
Fix #1803.
106 lines
3.6 KiB
CoffeeScript
106 lines
3.6 KiB
CoffeeScript
process = global.process
|
|
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
|
|
globalPaths.push path.resolve(__dirname, '..', 'api', 'lib')
|
|
# And also app.
|
|
globalPaths.push path.join(process.resourcesPath, 'app')
|
|
globalPaths.push path.join(process.resourcesPath, 'app.asar')
|
|
|
|
# Import common settings.
|
|
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
|
|
|
|
# Process command line arguments.
|
|
nodeIntegration = 'false'
|
|
for arg in process.argv
|
|
if arg.indexOf('--guest-instance-id=') == 0
|
|
# This is a guest web view.
|
|
process.guestInstanceId = parseInt arg.substr(arg.indexOf('=') + 1)
|
|
# Set the frame name to make AtomRendererClient recognize this guest.
|
|
require('web-frame').setName 'ATOM_SHELL_GUEST_WEB_VIEW'
|
|
else if arg.indexOf('--node-integration=') == 0
|
|
nodeIntegration = arg.substr arg.indexOf('=') + 1
|
|
else if arg.indexOf('--preload=') == 0
|
|
preloadScript = arg.substr arg.indexOf('=') + 1
|
|
|
|
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'
|
|
else
|
|
# Override default web functions.
|
|
require './override'
|
|
# Load webview tag implementation.
|
|
unless process.guestInstanceId?
|
|
require './web-view/web-view'
|
|
require './web-view/web-view-attributes'
|
|
|
|
if nodeIntegration in ['true', 'all', 'except-iframe', 'manual-enable-iframe']
|
|
# Export node bindings to global.
|
|
global.require = require
|
|
global.module = module
|
|
|
|
# Set the __filename to the path of html file if it is file: protocol.
|
|
if window.location.protocol is 'file:'
|
|
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 = (error) ->
|
|
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
|
|
|
|
# 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)
|