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 loader
.lazyRequireGetter(
9 "resource://devtools/server/devtools-server.js",
13 ChromeUtils
.defineESModuleGetters(
16 AppConstants
: "resource://gre/modules/AppConstants.sys.mjs",
18 { global
: "contextual" }
20 loader
.lazyGetter(this, "hostname", () => {
22 // On some platforms (Linux according to try), this service does not exist and fails.
23 return Services
.dns
.myHostName
;
28 loader
.lazyGetter(this, "endianness", () => {
29 if (new Uint32Array(new Uint8Array([1, 2, 3, 4]).buffer
)[0] === 0x04030201) {
36 "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}": "firefox",
37 "{3550f703-e582-4d05-9a08-453d09bdfdc6}": "thunderbird",
38 "{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}": "seamonkey",
39 "{718e30fb-e89b-41dd-9da7-e25a45638b28}": "sunbird",
40 "{aa3c5121-dab2-40e2-81ca-7ea25febc110}": "mobile/android",
43 var CACHED_INFO
= null;
45 function getSystemInfo() {
50 const appInfo
= Services
.appinfo
;
51 const win
= Services
.wm
.getMostRecentWindow(DevToolsServer
.chromeWindowType
);
52 const [processor
, compiler
] = appInfo
.XPCOMABI
.split("-");
53 let dpi
, useragent
, width
, height
, physicalWidth
, physicalHeight
, brandName
;
54 const appid
= appInfo
.ID
;
55 const apptype
= APP_MAP
[appid
];
56 const geckoVersion
= appInfo
.platformVersion
;
57 const hardware
= "unknown";
58 let version
= "unknown";
60 const os
= appInfo
.OS
;
61 version
= appInfo
.version
;
63 const bundle
= Services
.strings
.createBundle(
64 "chrome://branding/locale/brand.properties"
67 brandName
= bundle
.GetStringFromName("brandFullName");
73 const utils
= win
.windowUtils
;
74 dpi
= utils
.displayDPI
;
75 useragent
= win
.navigator
.userAgent
;
76 width
= win
.screen
.width
;
77 height
= win
.screen
.height
;
78 physicalWidth
= win
.screen
.width
* win
.devicePixelRatio
;
79 physicalHeight
= win
.screen
.height
* win
.devicePixelRatio
;
84 * Information from nsIXULAppInfo, regarding
85 * the application itself.
88 // The XUL application's UUID.
91 // Name of the app, "firefox", "thunderbird", etc., listed in APP_MAP
94 // Mixed-case or empty string of vendor, like "Mozilla"
95 vendor
: appInfo
.vendor
,
97 // Name of the application, like "Firefox", "Thunderbird".
100 // The application's version, for example "0.8.0+" or "3.7a1pre".
101 // Typically, the version of Firefox, for example.
102 // It is different than the version of Gecko or the XULRunner platform.
105 // The application's build ID/date, for example "2004051604".
106 appbuildid
: appInfo
.appBuildID
,
108 // The build ID/date of Gecko and the XULRunner platform.
109 platformbuildid
: appInfo
.platformBuildID
,
110 geckobuildid
: appInfo
.platformBuildID
,
112 // The version of Gecko or XULRunner platform, for example "1.8.1.19" or
113 // "1.9.3pre". In "Firefox 3.7 alpha 1" the application version is "3.7a1pre"
114 // while the platform version is "1.9.3pre"
115 platformversion
: geckoVersion
,
116 geckoversion
: geckoVersion
,
118 // Locale used in this build
119 locale
: Services
.locale
.appLocaleAsBCP47
,
122 * Information regarding the operating system.
125 // Returns the endianness of the architecture: either "LE" or "BE"
128 // Returns the hostname of the machine
131 // Name of the OS type. Typically the same as `uname -s`. Possible values:
132 // https://developer.mozilla.org/en/OS_TARGET
136 // hardware and version info from `deviceinfo.hardware`
137 // and `deviceinfo.os`.
140 // Device name. This property is only available on Android.
142 deviceName
: getDeviceName(),
144 // Type of process architecture running:
145 // "arm", "ia32", "x86", "x64"
146 // Alias to both `arch` and `processor` for node/deviceactor compat
150 // Name of compiler used for build:
151 // `'msvc', 'n32', 'gcc2', 'gcc3', 'sunc', 'ibmc'...`
154 // Location for the current profile
155 profile
: getProfileLocation(),
158 channel
: lazy
.AppConstants
.MOZ_UPDATE_CHANNEL
,
173 function getDeviceName() {
175 // Will throw on other platforms than Firefox for Android.
176 return Services
.sysinfo
.getProperty("device");
182 function getProfileLocation() {
183 // In child processes, we cannot access the profile location.
185 // For some reason this line must come first or in xpcshell tests
186 // nsXREDirProvider never gets initialised and so the profile service
187 // crashes on initialisation.
188 const profd
= Services
.dirsvc
.get("ProfD", Ci
.nsIFile
);
189 const profservice
= Cc
["@mozilla.org/toolkit/profile-service;1"].getService(
190 Ci
.nsIToolkitProfileService
192 if (profservice
.currentProfile
) {
193 return profservice
.currentProfile
.name
;
196 return profd
.leafName
;
202 exports
.getSystemInfo
= getSystemInfo
;