electron/lib/browser/api/session.js

45 lines
1.2 KiB
JavaScript
Raw Normal View History

2016-06-01 01:42:24 +00:00
const {EventEmitter} = require('events')
const electron = require('electron')
const bindings = process.atomBinding('session')
2016-06-01 01:42:24 +00:00
const PERSIST_PREFIX = 'persist:'
2016-06-09 05:08:45 +00:00
const Session = new EventEmitter()
2016-01-12 02:40:23 +00:00
// Wrapper of binding.fromPartition that checks for ready event.
const fromPartition = function (partition, persist) {
if (!electron.app.isReady()) {
throw new Error('session module can only be used when app is ready')
}
return bindings.fromPartition(partition, persist)
}
2016-01-14 18:35:29 +00:00
// Returns the Session from |partition| string.
2016-06-09 05:08:45 +00:00
Session.fromPartition = function (partition = '') {
2016-06-01 01:42:24 +00:00
if (partition === '') return exports.defaultSession
if (partition.startsWith(PERSIST_PREFIX)) {
return fromPartition(partition.substr(PERSIST_PREFIX.length), false)
2016-01-12 02:40:23 +00:00
} else {
return fromPartition(partition, true)
2016-01-12 02:40:23 +00:00
}
}
2016-01-12 02:40:23 +00:00
2016-01-14 18:35:29 +00:00
// Returns the default session.
2016-06-09 05:08:45 +00:00
Object.defineProperty(Session, 'defaultSession', {
2016-01-12 02:40:23 +00:00
enumerable: true,
get: function () {
return fromPartition('', false)
2016-01-12 02:40:23 +00:00
}
})
2016-06-01 01:42:24 +00:00
const wrapSession = function (session) {
// Session is an EventEmitter.
Object.setPrototypeOf(session, EventEmitter.prototype)
2016-06-09 05:08:45 +00:00
Session.emit('session-created', session)
2016-06-01 01:42:24 +00:00
}
bindings._setWrapSession(wrapSession)
2016-06-09 05:08:45 +00:00
module.exports = Session