85 lines
2.2 KiB
JavaScript
85 lines
2.2 KiB
JavaScript
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
/* vim: set sts=2 sw=2 et tw=80: */
|
|
/* 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";
|
|
|
|
XPCOMUtils.defineLazyServiceGetter(
|
|
this,
|
|
"gNetworkLinkService",
|
|
"@mozilla.org/network/network-link-service;1",
|
|
"nsINetworkLinkService"
|
|
);
|
|
|
|
function getLinkType() {
|
|
switch (gNetworkLinkService.linkType) {
|
|
case gNetworkLinkService.LINK_TYPE_UNKNOWN:
|
|
return "unknown";
|
|
case gNetworkLinkService.LINK_TYPE_ETHERNET:
|
|
return "ethernet";
|
|
case gNetworkLinkService.LINK_TYPE_USB:
|
|
return "usb";
|
|
case gNetworkLinkService.LINK_TYPE_WIFI:
|
|
return "wifi";
|
|
case gNetworkLinkService.LINK_TYPE_WIMAX:
|
|
return "wimax";
|
|
case gNetworkLinkService.LINK_TYPE_MOBILE:
|
|
return "mobile";
|
|
default:
|
|
return "unknown";
|
|
}
|
|
}
|
|
|
|
function getLinkStatus() {
|
|
if (!gNetworkLinkService.linkStatusKnown) {
|
|
return "unknown";
|
|
}
|
|
return gNetworkLinkService.isLinkUp ? "up" : "down";
|
|
}
|
|
|
|
function getLinkInfo() {
|
|
return {
|
|
id: gNetworkLinkService.networkID || undefined,
|
|
status: getLinkStatus(),
|
|
type: getLinkType(),
|
|
};
|
|
}
|
|
|
|
this.networkStatus = class extends ExtensionAPI {
|
|
getAPI(context) {
|
|
return {
|
|
networkStatus: {
|
|
getLinkInfo,
|
|
onConnectionChanged: new EventManager({
|
|
context,
|
|
name: "networkStatus.onConnectionChanged",
|
|
register: fire => {
|
|
let observerStatus = () => {
|
|
fire.async(getLinkInfo());
|
|
};
|
|
|
|
Services.obs.addObserver(
|
|
observerStatus,
|
|
"network:link-status-changed"
|
|
);
|
|
Services.obs.addObserver(
|
|
observerStatus,
|
|
"network:link-type-changed"
|
|
);
|
|
return () => {
|
|
Services.obs.removeObserver(
|
|
observerStatus,
|
|
"network:link-status-changed"
|
|
);
|
|
Services.obs.removeObserver(
|
|
observerStatus,
|
|
"network:link-type-changed"
|
|
);
|
|
};
|
|
},
|
|
}).api(),
|
|
},
|
|
};
|
|
}
|
|
};
|