/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const gDashboard = Cc[
"@mozilla.org/network/dashboard;1"].getService(
Ci.nsIDashboard
);
function connectionFailed(status) {
let status_ok = [
"NS_NET_STATUS_RESOLVING_HOST",
"NS_NET_STATUS_RESOLVED_HOST",
"NS_NET_STATUS_CONNECTING_TO",
"NS_NET_STATUS_CONNECTED_TO",
];
for (let i = 0; i < status_ok.length; i++) {
if (status == status_ok[i]) {
return false;
}
}
return true;
}
function test_sockets(serverSocket) {
// TODO: enable this test in bug 1581892.
if (mozinfo.socketprocess_networking) {
info(
"skip test_sockets");
do_test_finished();
return;
}
do_test_pending();
gDashboard.requestSockets(
function (data) {
let index = -1;
info(
"requestSockets: " + JSON.stringify(data.sockets));
for (let i = 0; i < data.sockets.length; i++) {
if (data.sockets[i].host ==
"127.0.0.1") {
index = i;
break;
}
}
Assert.notEqual(index, -1);
Assert.equal(data.sockets[index].port, serverSocket.port);
Assert.equal(data.sockets[index].type,
"TCP");
do_test_finished();
});
}
function run_test() {
var ps = Services.prefs;
// disable network changed events to avoid the the risk of having the dns
// cache getting flushed behind our back
ps.setBoolPref(
"network.notify.changed",
false);
// Localhost is hardcoded to loopback and isn't cached, disable that with this pref
ps.setBoolPref(
"network.proxy.allow_hijacking_localhost",
true);
registerCleanupFunction(
function () {
ps.clearUserPref(
"network.notify.changed");
ps.clearUserPref(
"network.proxy.allow_hijacking_localhost");
});
let serverSocket = Cc[
"@mozilla.org/network/server-socket;1"].createInstance(
Ci.nsIServerSocket
);
serverSocket.init(-1,
true, -1);
do_test_pending();
gDashboard.requestConnection(
"localhost",
serverSocket.port,
"tcp",
15,
function (connInfo) {
if (connInfo.status ==
"NS_NET_STATUS_CONNECTED_TO") {
do_test_pending();
gDashboard.requestDNSInfo(
function (data) {
let found =
false;
info(
"requestDNSInfo: " + JSON.stringify(data.entries));
for (let i = 0; i < data.entries.length; i++) {
if (data.entries[i].hostname ==
"localhost") {
found =
true;
break;
}
}
Assert.equal(found,
true);
do_test_finished();
test_sockets(serverSocket);
});
do_test_finished();
}
if (connectionFailed(connInfo.status)) {
do_throw(connInfo.status);
}
}
);
}