|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this file, |
|
3 * You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 "use strict"; |
|
6 |
|
7 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; |
|
8 |
|
9 Cu.import("resource://gre/modules/XPCOMUtils.jsm"); |
|
10 |
|
11 const NETWORKLISTSERVICE_CONTRACTID = |
|
12 "@mozilla.org/network/interface-list-service;1"; |
|
13 const NETWORKLISTSERVICE_CID = |
|
14 Components.ID("{3780be6e-7012-4e53-ade6-15212fb88a0d}"); |
|
15 |
|
16 XPCOMUtils.defineLazyServiceGetter(this, "cpmm", |
|
17 "@mozilla.org/childprocessmessagemanager;1", |
|
18 "nsISyncMessageSender"); |
|
19 |
|
20 function NetworkInterfaceListService () { |
|
21 } |
|
22 |
|
23 NetworkInterfaceListService.prototype = { |
|
24 classID: NETWORKLISTSERVICE_CID, |
|
25 |
|
26 QueryInterface: XPCOMUtils.generateQI([Ci.nsINetworkInterfaceListService]), |
|
27 |
|
28 getDataInterfaceList: function(aConditions) { |
|
29 return new NetworkInterfaceList( |
|
30 cpmm.sendSyncMessage( |
|
31 'NetworkInterfaceList:ListInterface', |
|
32 { |
|
33 excludeSupl: (aConditions & |
|
34 Ci.nsINetworkInterfaceListService. |
|
35 LIST_NOT_INCLUDE_SUPL_INTERFACES) != 0, |
|
36 excludeMms: (aConditions & |
|
37 Ci.nsINetworkInterfaceListService. |
|
38 LIST_NOT_INCLUDE_MMS_INTERFACES) != 0, |
|
39 excludeIms: (aConditions & |
|
40 Ci.nsINetworkInterfaceListService. |
|
41 LIST_NOT_INCLUDE_IMS_INTERFACES) != 0, |
|
42 excludeDun: (aConditions & |
|
43 Ci.nsINetworkInterfaceListService. |
|
44 LIST_NOT_INCLUDE_DUN_INTERFACES) != 0 |
|
45 } |
|
46 )[0]); |
|
47 } |
|
48 }; |
|
49 |
|
50 function FakeNetworkInterface(aAttributes) { |
|
51 this.state = aAttributes.state; |
|
52 this.type = aAttributes.type; |
|
53 this.name = aAttributes.name; |
|
54 this.ips = aAttributes.ips; |
|
55 this.prefixLengths = aAttributes.prefixLengths; |
|
56 this.gateways = aAttributes.gateways; |
|
57 this.dnses = aAttributes.dnses; |
|
58 this.httpProxyHost = aAttributes.httpProxyHost; |
|
59 this.httpProxyPort = aAttributes.httpProxyPort; |
|
60 } |
|
61 FakeNetworkInterface.prototype = { |
|
62 QueryInterface: XPCOMUtils.generateQI([Ci.nsINetworkInterface]), |
|
63 |
|
64 getAddresses: function (ips, prefixLengths) { |
|
65 ips.value = this.ips.slice(); |
|
66 prefixLengths.value = this.prefixLengths.slice(); |
|
67 |
|
68 return this.ips.length; |
|
69 }, |
|
70 |
|
71 getGateways: function (count) { |
|
72 if (count) { |
|
73 count.value = this.gateways.length; |
|
74 } |
|
75 return this.gateways.slice(); |
|
76 }, |
|
77 |
|
78 getDnses: function (count) { |
|
79 if (count) { |
|
80 count.value = this.dnses.length; |
|
81 } |
|
82 return this.dnses.slice(); |
|
83 } |
|
84 }; |
|
85 |
|
86 function NetworkInterfaceList (aInterfaceLiterals) { |
|
87 this._interfaces = []; |
|
88 for (let entry of aInterfaceLiterals) { |
|
89 this._interfaces.push(new FakeNetworkInterface(entry)); |
|
90 } |
|
91 } |
|
92 |
|
93 NetworkInterfaceList.prototype = { |
|
94 QueryInterface: XPCOMUtils.generateQI([Ci.nsINetworkInterfaceList]), |
|
95 |
|
96 getNumberOfInterface: function() { |
|
97 return this._interfaces.length; |
|
98 }, |
|
99 |
|
100 getInterface: function(index) { |
|
101 if (!this._interfaces) { |
|
102 return null; |
|
103 } |
|
104 return this._interfaces[index]; |
|
105 } |
|
106 }; |
|
107 |
|
108 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([NetworkInterfaceListService]); |
|
109 |