blob: 2e52220ba66567cd898bd639e948eb07d59e7e82 [file] [log] [blame]
var extend = require("./extend"),
ClientMethods = require("./client-methods"),
Client = require("./client"),
Tab = require("./tab"),
Webapps = require("./webapps"),
Device = require("./device"),
SimulatorApps = require("./simulator");
const DEFAULT_PORT = 6000;
const DEFAULT_HOST = "localhost";
module.exports = FirefoxClient;
function FirefoxClient(options) {
var client = new Client(options);
var actor = 'root';
client.on("error", this.onError.bind(this));
client.on("end", this.onEnd.bind(this));
client.on("timeout", this.onTimeout.bind(this));
this.initialize(client, actor);
}
FirefoxClient.prototype = extend(ClientMethods, {
connect: function(port, host, cb) {
if (typeof port == "function") {
// (cb)
cb = port;
port = DEFAULT_PORT;
host = DEFAULT_HOST;
}
if (typeof host == "function") {
// (port, cb)
cb = host;
host = DEFAULT_HOST;
}
// (port, host, cb)
this.client.connect(port, host, cb);
this.client.expectReply(this.actor, function(packet) {
// root message
});
},
disconnect: function() {
this.client.disconnect();
},
onError: function(error) {
this.emit("error", error);
},
onEnd: function() {
this.emit("end");
},
onTimeout: function() {
this.emit("timeout");
},
selectedTab: function(cb) {
this.request("listTabs", function(resp) {
var tab = resp.tabs[resp.selected];
return new Tab(this.client, tab);
}.bind(this), cb);
},
listTabs: function(cb) {
this.request("listTabs", function(err, resp) {
if (err) {
return cb(err);
}
if (resp.simulatorWebappsActor) {
// the server is the Firefox OS Simulator, return apps as "tabs"
var apps = new SimulatorApps(this.client, resp.simulatorWebappsActor);
apps.listApps(cb);
}
else {
var tabs = resp.tabs.map(function(tab) {
return new Tab(this.client, tab);
}.bind(this));
cb(null, tabs);
}
}.bind(this));
},
getWebapps: function(cb) {
this.request("listTabs", (function(err, resp) {
if (err) {
return cb(err);
}
var webapps = new Webapps(this.client, resp);
cb(null, webapps);
}).bind(this));
},
getDevice: function(cb) {
this.request("listTabs", (function(err, resp) {
if (err) {
return cb(err);
}
var device = new Device(this.client, resp);
cb(null, device);
}).bind(this));
},
getRoot: function(cb) {
this.request("listTabs", (function(err, resp) {
if (err) {
return cb(err);
}
if (!resp.consoleActor) {
return cb("No root actor being available.");
}
var root = new Tab(this.client, resp);
cb(null, root);
}).bind(this));
}
})