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
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 const { Cc, Ci } = require("chrome");
8 loader.lazyRequireGetter(this, "Services");
9 loader.lazyRequireGetter(this, "DebuggerServer", "devtools/server/main", true);
10 loader.lazyRequireGetter(
13 "resource://gre/modules/AppConstants.jsm",
16 loader.lazyGetter(this, "hostname", () => {
18 // On some platforms (Linux according to try), this service does not exist and fails.
19 return Cc["@mozilla.org/network/dns-service;1"].getService(Ci.nsIDNSService)
25 loader.lazyGetter(this, "endianness", () => {
26 if (new Uint32Array(new Uint8Array([1, 2, 3, 4]).buffer)[0] === 0x04030201) {
33 "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}": "firefox",
34 "{3550f703-e582-4d05-9a08-453d09bdfdc6}": "thunderbird",
35 "{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}": "seamonkey",
36 "{718e30fb-e89b-41dd-9da7-e25a45638b28}": "sunbird",
37 "{aa3c5121-dab2-40e2-81ca-7ea25febc110}": "mobile/android",
40 var CACHED_INFO = null;
42 function getSystemInfo() {
47 const appInfo = Services.appinfo;
48 const win = Services.wm.getMostRecentWindow(DebuggerServer.chromeWindowType);
49 const [processor, compiler] = appInfo.XPCOMABI.split("-");
50 let dpi, useragent, width, height, physicalWidth, physicalHeight, brandName;
51 const appid = appInfo.ID;
52 const apptype = APP_MAP[appid];
53 const geckoVersion = appInfo.platformVersion;
54 const hardware = "unknown";
55 let version = "unknown";
57 const os = appInfo.OS;
58 version = appInfo.version;
60 const bundle = Services.strings.createBundle(
61 "chrome://branding/locale/brand.properties"
64 brandName = bundle.GetStringFromName("brandFullName");
70 const utils = win.windowUtils;
71 dpi = utils.displayDPI;
72 useragent = win.navigator.userAgent;
73 width = win.screen.width;
74 height = win.screen.height;
75 physicalWidth = win.screen.width * win.devicePixelRatio;
76 physicalHeight = win.screen.height * win.devicePixelRatio;
81 * Information from nsIXULAppInfo, regarding
82 * the application itself.
85 // The XUL application's UUID.
88 // Name of the app, "firefox", "thunderbird", etc., listed in APP_MAP
91 // Mixed-case or empty string of vendor, like "Mozilla"
92 vendor: appInfo.vendor,
94 // Name of the application, like "Firefox", "Thunderbird".
97 // The application's version, for example "0.8.0+" or "3.7a1pre".
98 // Typically, the version of Firefox, for example.
99 // It is different than the version of Gecko or the XULRunner platform.
102 // The application's build ID/date, for example "2004051604".
103 appbuildid: appInfo.appBuildID,
105 // The build ID/date of Gecko and the XULRunner platform.
106 platformbuildid: appInfo.platformBuildID,
107 geckobuildid: appInfo.platformBuildID,
109 // The version of Gecko or XULRunner platform, for example "1.8.1.19" or
110 // "1.9.3pre". In "Firefox 3.7 alpha 1" the application version is "3.7a1pre"
111 // while the platform version is "1.9.3pre"
112 platformversion: geckoVersion,
113 geckoversion: geckoVersion,
115 // Locale used in this build
116 locale: Services.locale.appLocaleAsLangTag,
119 * Information regarding the operating system.
122 // Returns the endianness of the architecture: either "LE" or "BE"
123 endianness: endianness,
125 // Returns the hostname of the machine
128 // Name of the OS type. Typically the same as `uname -s`. Possible values:
129 // https://developer.mozilla.org/en/OS_TARGET
133 // hardware and version info from `deviceinfo.hardware`
134 // and `deviceinfo.os`.
137 // Device name. This property is only available on Android.
139 deviceName: getDeviceName(),
141 // Type of process architecture running:
142 // "arm", "ia32", "x86", "x64"
143 // Alias to both `arch` and `processor` for node/deviceactor compat
147 // Name of compiler used for build:
148 // `'msvc', 'n32', 'gcc2', 'gcc3', 'sunc', 'ibmc'...`
151 // Location for the current profile
152 profile: getProfileLocation(),
155 channel: AppConstants.MOZ_UPDATE_CHANNEL,
170 function getDeviceName() {
172 // Will throw on other platforms than Firefox for Android.
173 return Services.sysinfo.getProperty("device");
179 function getProfileLocation() {
180 // In child processes, we cannot access the profile location.
182 // For some reason this line must come first or in xpcshell tests
183 // nsXREDirProvider never gets initialised and so the profile service
184 // crashes on initialisation.
185 const profd = Services.dirsvc.get("ProfD", Ci.nsIFile);
186 const profservice = Cc["@mozilla.org/toolkit/profile-service;1"].getService(
187 Ci.nsIToolkitProfileService
189 if (profservice.currentProfile) {
190 return profservice.currentProfile.name;
193 return profd.leafName;
199 exports.getSystemInfo = getSystemInfo;