2019-01-17 18:00:12 +00:00
'use strict'
const bindings = process . atomBinding ( 'app' )
2019-02-05 21:03:23 +00:00
const commandLine = process . atomBinding ( 'command_line' )
2019-01-17 18:00:12 +00:00
const path = require ( 'path' )
const { app , App } = bindings
// Only one app object permitted.
module . exports = app
const electron = require ( 'electron' )
const { deprecate , Menu } = electron
const { EventEmitter } = require ( 'events' )
let dockMenu = null
// App is an EventEmitter.
Object . setPrototypeOf ( App . prototype , EventEmitter . prototype )
EventEmitter . call ( app )
Object . assign ( app , {
setApplicationMenu ( menu ) {
return Menu . setApplicationMenu ( menu )
} ,
getApplicationMenu ( ) {
return Menu . getApplicationMenu ( )
} ,
commandLine : {
2019-02-05 21:03:23 +00:00
hasSwitch : ( ... args ) => commandLine . hasSwitch ( ... args . map ( String ) ) ,
getSwitchValue : ( ... args ) => commandLine . getSwitchValue ( ... args . map ( String ) ) ,
appendSwitch : ( ... args ) => commandLine . appendSwitch ( ... args . map ( String ) ) ,
appendArgument : ( ... args ) => commandLine . appendArgument ( ... args . map ( String ) )
} ,
enableMixedSandbox ( ) {
deprecate . log ( ` 'enableMixedSandbox' is deprecated. Mixed-sandbox mode is now enabled by default. You can safely remove the call to enableMixedSandbox(). ` )
2019-01-17 18:00:12 +00:00
}
} )
2019-02-05 21:03:23 +00:00
app . getFileIcon = deprecate . promisify ( app . getFileIcon )
const nativeAppMetrics = app . getAppMetrics
2019-01-17 18:00:12 +00:00
app . getAppMetrics = ( ) => {
2019-02-05 21:03:23 +00:00
const metrics = nativeAppMetrics . call ( app )
2019-01-17 18:00:12 +00:00
for ( const metric of metrics ) {
if ( 'memory' in metric ) {
deprecate . removeProperty ( metric , 'memory' )
}
}
return metrics
}
app . isPackaged = ( ( ) => {
const execFile = path . basename ( process . execPath ) . toLowerCase ( )
if ( process . platform === 'win32' ) {
return execFile !== 'electron.exe'
}
return execFile !== 'electron'
} ) ( )
if ( process . platform === 'darwin' ) {
app . dock = {
bounce ( type = 'informational' ) {
return bindings . dockBounce ( type )
} ,
cancelBounce : bindings . dockCancelBounce ,
downloadFinished : bindings . dockDownloadFinished ,
setBadge : bindings . dockSetBadgeText ,
getBadge : bindings . dockGetBadgeText ,
hide : bindings . dockHide ,
show : bindings . dockShow ,
isVisible : bindings . dockIsVisible ,
setMenu ( menu ) {
dockMenu = menu
bindings . dockSetMenu ( menu )
} ,
getMenu ( ) {
return dockMenu
} ,
setIcon : bindings . dockSetIcon
}
}
if ( process . platform === 'linux' ) {
app . launcher = {
setBadgeCount : bindings . unityLauncherSetBadgeCount ,
getBadgeCount : bindings . unityLauncherGetBadgeCount ,
isCounterBadgeAvailable : bindings . unityLauncherAvailable ,
isUnityRunning : bindings . unityLauncherAvailable
}
}
app . allowNTLMCredentialsForAllDomains = function ( allow ) {
2019-02-05 21:03:23 +00:00
deprecate . warn ( 'app.allowNTLMCredentialsForAllDomains' , 'session.allowNTLMCredentialsForDomains' )
2019-01-17 18:00:12 +00:00
const domains = allow ? '*' : ''
if ( ! this . isReady ( ) ) {
this . commandLine . appendSwitch ( 'auth-server-whitelist' , domains )
} else {
electron . session . defaultSession . allowNTLMCredentialsForDomains ( domains )
}
}
// Routes the events to webContents.
const events = [ 'login' , 'certificate-error' , 'select-client-certificate' ]
for ( const name of events ) {
app . on ( name , ( event , webContents , ... args ) => {
webContents . emit ( name , event , ... args )
} )
}
// Wrappers for native classes.
const { DownloadItem } = process . atomBinding ( 'download_item' )
Object . setPrototypeOf ( DownloadItem . prototype , EventEmitter . prototype )