mirror of
https://github.com/atom/atom.git
synced 2026-01-25 14:59:03 -05:00
Fixes #13729 Previously, when adding a window, we were unable to read its current project paths out of the hash of the URL during window initialization because the window still considered itself to be loading. Rather than fixing this issue, we decided to completely eliminate the sharing of state between processes in the window.location and instead switch to cached synchronous RPC for the loadSettings and a dedicated RPC-based mechanism for the project paths.
113 lines
3.6 KiB
JavaScript
113 lines
3.6 KiB
JavaScript
/** @babel */
|
|
|
|
import {remote} from 'electron'
|
|
import path from 'path'
|
|
import ipcHelpers from './ipc-helpers'
|
|
import util from 'util'
|
|
|
|
export default async function () {
|
|
const getWindowLoadSettings = require('./get-window-load-settings')
|
|
const {test, headless, resourcePath, benchmarkPaths} = getWindowLoadSettings()
|
|
try {
|
|
const Clipboard = require('../src/clipboard')
|
|
const ApplicationDelegate = require('../src/application-delegate')
|
|
const AtomEnvironment = require('../src/atom-environment')
|
|
const TextEditor = require('../src/text-editor')
|
|
require('./electron-shims')
|
|
|
|
const exportsPath = path.join(resourcePath, 'exports')
|
|
require('module').globalPaths.push(exportsPath) // Add 'exports' to module search path.
|
|
process.env.NODE_PATH = exportsPath // Set NODE_PATH env variable since tasks may need it.
|
|
|
|
document.title = 'Benchmarks'
|
|
// Allow `document.title` to be assigned in benchmarks without actually changing the window title.
|
|
let documentTitle = null
|
|
Object.defineProperty(document, 'title', {
|
|
get () { return documentTitle },
|
|
set (title) { documentTitle = title }
|
|
})
|
|
|
|
window.addEventListener('keydown', (event) => {
|
|
// Reload: cmd-r / ctrl-r
|
|
if ((event.metaKey || event.ctrlKey) && event.keyCode === 82) {
|
|
ipcHelpers.call('window-method', 'reload')
|
|
}
|
|
|
|
// Toggle Dev Tools: cmd-alt-i (Mac) / ctrl-shift-i (Linux/Windows)
|
|
if (event.keyCode === 73) {
|
|
const isDarwin = process.platform === 'darwin'
|
|
if ((isDarwin && event.metaKey && event.altKey) || (!isDarwin && event.ctrlKey && event.shiftKey)) {
|
|
ipcHelpers.call('window-method', 'toggleDevTools')
|
|
}
|
|
}
|
|
|
|
// Close: cmd-w / ctrl-w
|
|
if ((event.metaKey || event.ctrlKey) && event.keyCode === 87) {
|
|
ipcHelpers.call('window-method', 'close')
|
|
}
|
|
|
|
// Copy: cmd-c / ctrl-c
|
|
if ((event.metaKey || event.ctrlKey) && event.keyCode === 67) {
|
|
ipcHelpers.call('window-method', 'copy')
|
|
}
|
|
}, true)
|
|
|
|
const clipboard = new Clipboard()
|
|
TextEditor.setClipboard(clipboard)
|
|
|
|
const applicationDelegate = new ApplicationDelegate()
|
|
global.atom = new AtomEnvironment({
|
|
applicationDelegate,
|
|
window,
|
|
document,
|
|
clipboard,
|
|
configDirPath: process.env.ATOM_HOME,
|
|
enablePersistence: false
|
|
})
|
|
|
|
// Prevent benchmarks from modifying application menus
|
|
global.atom.menu.sendToBrowserProcess = function () { }
|
|
|
|
if (headless) {
|
|
Object.defineProperties(process, {
|
|
stdout: { value: remote.process.stdout },
|
|
stderr: { value: remote.process.stderr }
|
|
})
|
|
|
|
console.log = function (...args) {
|
|
const formatted = util.format(...args)
|
|
process.stdout.write(formatted + '\n')
|
|
}
|
|
console.warn = function (...args) {
|
|
const formatted = util.format(...args)
|
|
process.stderr.write(formatted + '\n')
|
|
}
|
|
console.error = function (...args) {
|
|
const formatted = util.format(...args)
|
|
process.stderr.write(formatted + '\n')
|
|
}
|
|
} else {
|
|
remote.getCurrentWindow().show()
|
|
}
|
|
|
|
const benchmarkRunner = require('../benchmarks/benchmark-runner')
|
|
const statusCode = await benchmarkRunner({test, benchmarkPaths})
|
|
if (headless) {
|
|
exitWithStatusCode(statusCode)
|
|
}
|
|
} catch (error) {
|
|
if (headless) {
|
|
console.error(error.stack || error)
|
|
exitWithStatusCode(1)
|
|
} else {
|
|
ipcHelpers.call('window-method', 'openDevTools')
|
|
throw error
|
|
}
|
|
}
|
|
}
|
|
|
|
function exitWithStatusCode (statusCode) {
|
|
remote.app.emit('will-quit')
|
|
remote.process.exit(statusCode)
|
|
}
|