foxr
Version:
Node.js API to control Firefox
124 lines (102 loc) • 2.95 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _events = require("events");
var _Page = _interopRequireDefault(require("./Page"));
var _types = require("./types");
class Browser extends _events.EventEmitter {
constructor(arg) {
super();
this._send = arg.send;
}
async close() {
await this._send('Marionette:AcceptConnections', {
value: false
});
await this._send('Marionette:Quit');
this.emit('disconnected');
}
async disconnect() {
await this._send('WebDriver:DeleteSession');
this.emit('disconnected');
}
async getPref(pref, defaultBranch = false) {
await this._setContext(_types.Context.CHROME);
const value = await this._send('WebDriver:ExecuteScript', {
script: `let [pref, defaultBranch] = arguments;
Cu.import('resource://gre/modules/Preferences.jsm');
let prefs = new Preferences({defaultBranch});
return prefs.get(pref);`,
args: [pref, defaultBranch]
}, 'value');
await this._setContext(_types.Context.CONTENT);
return value;
}
async install(path, isTemporary) {
const {
value
} = await this._send('Addon:Install', {
path,
temporary: isTemporary
});
return value;
}
async newPage() {
await this._send('WebDriver:ExecuteScript', {
script: 'window.open()'
});
const pages = await this._send('WebDriver:GetWindowHandles');
const newPageId = pages[pages.length - 1];
await this._send('WebDriver:SwitchToWindow', {
name: newPageId,
focus: true
});
return new _Page.default({
browser: this,
id: newPageId,
send: this._send
});
}
async pages() {
const ids = await this._send('WebDriver:GetWindowHandles');
return ids.map(id => new _Page.default({
browser: this,
id,
send: this._send
}));
}
async _setContext(context) {
await this._send('Marionette:SetContext', {
value: context
});
}
async setPref(pref, value, defaultBranch = false) {
await this._setContext(_types.Context.CHROME);
const error = await this._send('WebDriver:ExecuteScript', {
script: `let [pref, value, defaultBranch] = arguments;
Cu.import('resource://gre/modules/Preferences.jsm');
let prefs = new Preferences({defaultBranch});
try {
prefs.set(pref,value);
return null;
} catch(e) {
return e;
}`,
args: [pref, value, defaultBranch]
}, 'value');
await this._setContext(_types.Context.CONTENT);
if (error) {
throw new Error(`SetPref failed: ${error.message}`);
}
}
async uninstall(id) {
await this._send('Addon:Uninstall', {
id
});
}
}
var _default = Browser;
exports.default = _default;