2016-06-01 01:42:24 +00:00
|
|
|
const {EventEmitter} = require('events')
|
2016-06-01 01:53:06 +00:00
|
|
|
const electron = require('electron')
|
2016-03-24 20:15:04 +00:00
|
|
|
const bindings = process.atomBinding('session')
|
2016-06-01 01:42:24 +00:00
|
|
|
|
2016-03-24 20:15:04 +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
|
|
|
|
2016-06-01 01:53:06 +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')
|
|
|
|
}
|
|
|
|
|
2016-06-08 16:34:41 +00:00
|
|
|
return bindings.fromPartition(partition, persist)
|
2016-06-01 01:53:06 +00:00
|
|
|
}
|
|
|
|
|
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
|
|
|
|
|
2016-02-21 08:14:34 +00:00
|
|
|
if (partition.startsWith(PERSIST_PREFIX)) {
|
2016-06-01 01:53:06 +00:00
|
|
|
return fromPartition(partition.substr(PERSIST_PREFIX.length), false)
|
2016-01-12 02:40:23 +00:00
|
|
|
} else {
|
2016-06-01 01:53:06 +00:00
|
|
|
return fromPartition(partition, true)
|
2016-01-12 02:40:23 +00:00
|
|
|
}
|
2016-03-24 20:15:04 +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,
|
2016-03-24 20:15:04 +00:00
|
|
|
get: function () {
|
2016-06-01 01:53:06 +00:00
|
|
|
return fromPartition('', false)
|
2016-01-12 02:40:23 +00:00
|
|
|
}
|
2016-03-24 20:15:04 +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
|