diff options
Diffstat (limited to 'dom/system/gonk/NetworkInterfaceListService.js')
-rw-r--r-- | dom/system/gonk/NetworkInterfaceListService.js | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/dom/system/gonk/NetworkInterfaceListService.js b/dom/system/gonk/NetworkInterfaceListService.js new file mode 100644 index 000000000..62fe046aa --- /dev/null +++ b/dom/system/gonk/NetworkInterfaceListService.js @@ -0,0 +1,110 @@ +/* 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 {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; + +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); + +const NETWORKLISTSERVICE_CONTRACTID = + "@mozilla.org/network/interface-list-service;1"; +const NETWORKLISTSERVICE_CID = + Components.ID("{3780be6e-7012-4e53-ade6-15212fb88a0d}"); + +XPCOMUtils.defineLazyServiceGetter(this, "cpmm", + "@mozilla.org/childprocessmessagemanager;1", + "nsISyncMessageSender"); + +function NetworkInterfaceListService () { +} + +NetworkInterfaceListService.prototype = { + classID: NETWORKLISTSERVICE_CID, + + QueryInterface: XPCOMUtils.generateQI([Ci.nsINetworkInterfaceListService]), + + getDataInterfaceList: function(aConditions) { + return new NetworkInterfaceList( + cpmm.sendSyncMessage( + 'NetworkInterfaceList:ListInterface', + { + excludeSupl: (aConditions & + Ci.nsINetworkInterfaceListService. + LIST_NOT_INCLUDE_SUPL_INTERFACES) != 0, + excludeMms: (aConditions & + Ci.nsINetworkInterfaceListService. + LIST_NOT_INCLUDE_MMS_INTERFACES) != 0, + excludeIms: (aConditions & + Ci.nsINetworkInterfaceListService. + LIST_NOT_INCLUDE_IMS_INTERFACES) != 0, + excludeDun: (aConditions & + Ci.nsINetworkInterfaceListService. + LIST_NOT_INCLUDE_DUN_INTERFACES) != 0, + excludeFota: (aConditions & + Ci.nsINetworkInterfaceListService. + LIST_NOT_INCLUDE_FOTA_INTERFACES) != 0 + } + )[0]); + } +}; + +function FakeNetworkInfo(aAttributes) { + this.state = aAttributes.state; + this.type = aAttributes.type; + this.name = aAttributes.name; + this.ips = aAttributes.ips; + this.prefixLengths = aAttributes.prefixLengths; + this.gateways = aAttributes.gateways; + this.dnses = aAttributes.dnses; +} +FakeNetworkInfo.prototype = { + QueryInterface: XPCOMUtils.generateQI([Ci.nsINetworkInfo]), + + getAddresses: function (ips, prefixLengths) { + ips.value = this.ips.slice(); + prefixLengths.value = this.prefixLengths.slice(); + + return this.ips.length; + }, + + getGateways: function (count) { + if (count) { + count.value = this.gateways.length; + } + return this.gateways.slice(); + }, + + getDnses: function (count) { + if (count) { + count.value = this.dnses.length; + } + return this.dnses.slice(); + } +}; + +function NetworkInterfaceList (aInterfaceLiterals) { + this._interfaces = []; + for (let entry of aInterfaceLiterals) { + this._interfaces.push(new FakeNetworkInfo(entry)); + } +} + +NetworkInterfaceList.prototype = { + QueryInterface: XPCOMUtils.generateQI([Ci.nsINetworkInterfaceList]), + + getNumberOfInterface: function() { + return this._interfaces.length; + }, + + getInterfaceInfo: function(index) { + if (!this._interfaces) { + return null; + } + return this._interfaces[index]; + } +}; + +this.NSGetFactory = XPCOMUtils.generateNSGetFactory([NetworkInterfaceListService]); + |