mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-12 06:08:24 +02:00
The current properties selectedProfile and defaultProfile are somewhat confusing selectedProfile actually returns the default profile for the build and defaultProfile returns the default profile for non-dev-edition builds. This confusion leads to callers doing the wrong thing in some places. What most code actually cares about is being able to set/get the default profile for this build and getting the current profile in use. So this patch replaces the previous properties with currentProfile and defaultProfile which do what makes more sense. This patch also switches from using the preprocessor to change behaviour for dev-edition builds to using a boolean flag since some code was incorrectly ignoring the setting to make dev-edition use the same profile as normal builds. In order to make currentProfile correct when resetting a profile I had to move CreateResetProfile into nsToolkitProfileService. Differential Revision: https://phabricator.services.mozilla.com/D16118 --HG-- extra : rebase_source : cefe252618cd3a1b0e0cd5a71b056dd2b557f1a3 extra : intermediate-source : 35af79575f54f75d22e213fdac7ddd704b40807a extra : source : 732d1ce192408d4f595f2fce16f45c7354ce3097
199 lines
5.6 KiB
JavaScript
199 lines
5.6 KiB
JavaScript
/* 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 { Cc, Ci } = require("chrome");
|
|
|
|
loader.lazyRequireGetter(this, "Services");
|
|
loader.lazyRequireGetter(this, "DebuggerServer", "devtools/server/main", true);
|
|
loader.lazyRequireGetter(this, "AppConstants",
|
|
"resource://gre/modules/AppConstants.jsm", true);
|
|
loader.lazyGetter(this, "hostname", () => {
|
|
try {
|
|
// On some platforms (Linux according to try), this service does not exist and fails.
|
|
return Cc["@mozilla.org/network/dns-service;1"]
|
|
.getService(Ci.nsIDNSService).myHostName;
|
|
} catch (e) {
|
|
return "";
|
|
}
|
|
});
|
|
loader.lazyGetter(this, "endianness", () => {
|
|
if ((new Uint32Array((new Uint8Array([1, 2, 3, 4])).buffer))[0] === 0x04030201) {
|
|
return "LE";
|
|
}
|
|
return "BE";
|
|
});
|
|
|
|
const APP_MAP = {
|
|
"{ec8030f7-c20a-464f-9b0e-13a3a9e97384}": "firefox",
|
|
"{3550f703-e582-4d05-9a08-453d09bdfdc6}": "thunderbird",
|
|
"{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}": "seamonkey",
|
|
"{718e30fb-e89b-41dd-9da7-e25a45638b28}": "sunbird",
|
|
"{aa3c5121-dab2-40e2-81ca-7ea25febc110}": "mobile/android",
|
|
};
|
|
|
|
var CACHED_INFO = null;
|
|
|
|
function getSystemInfo() {
|
|
if (CACHED_INFO) {
|
|
return CACHED_INFO;
|
|
}
|
|
|
|
const appInfo = Services.appinfo;
|
|
const win = Services.wm.getMostRecentWindow(DebuggerServer.chromeWindowType);
|
|
const [processor, compiler] = appInfo.XPCOMABI.split("-");
|
|
let dpi,
|
|
useragent,
|
|
width,
|
|
height,
|
|
physicalWidth,
|
|
physicalHeight,
|
|
brandName;
|
|
const appid = appInfo.ID;
|
|
const apptype = APP_MAP[appid];
|
|
const geckoVersion = appInfo.platformVersion;
|
|
const hardware = "unknown";
|
|
let version = "unknown";
|
|
|
|
const os = appInfo.OS;
|
|
version = appInfo.version;
|
|
|
|
const bundle = Services.strings.createBundle("chrome://branding/locale/brand.properties");
|
|
if (bundle) {
|
|
brandName = bundle.GetStringFromName("brandFullName");
|
|
} else {
|
|
brandName = null;
|
|
}
|
|
|
|
if (win) {
|
|
const utils = win.windowUtils;
|
|
dpi = utils.displayDPI;
|
|
useragent = win.navigator.userAgent;
|
|
width = win.screen.width;
|
|
height = win.screen.height;
|
|
physicalWidth = win.screen.width * win.devicePixelRatio;
|
|
physicalHeight = win.screen.height * win.devicePixelRatio;
|
|
}
|
|
|
|
const info = {
|
|
|
|
/**
|
|
* Information from nsIXULAppInfo, regarding
|
|
* the application itself.
|
|
*/
|
|
|
|
// The XUL application's UUID.
|
|
appid,
|
|
|
|
// Name of the app, "firefox", "thunderbird", etc., listed in APP_MAP
|
|
apptype,
|
|
|
|
// Mixed-case or empty string of vendor, like "Mozilla"
|
|
vendor: appInfo.vendor,
|
|
|
|
// Name of the application, like "Firefox", "Thunderbird".
|
|
name: appInfo.name,
|
|
|
|
// The application's version, for example "0.8.0+" or "3.7a1pre".
|
|
// Typically, the version of Firefox, for example.
|
|
// It is different than the version of Gecko or the XULRunner platform.
|
|
version,
|
|
|
|
// The application's build ID/date, for example "2004051604".
|
|
appbuildid: appInfo.appBuildID,
|
|
|
|
// The build ID/date of Gecko and the XULRunner platform.
|
|
platformbuildid: appInfo.platformBuildID,
|
|
geckobuildid: appInfo.platformBuildID,
|
|
|
|
// The version of Gecko or XULRunner platform, for example "1.8.1.19" or
|
|
// "1.9.3pre". In "Firefox 3.7 alpha 1" the application version is "3.7a1pre"
|
|
// while the platform version is "1.9.3pre"
|
|
platformversion: geckoVersion,
|
|
geckoversion: geckoVersion,
|
|
|
|
// Locale used in this build
|
|
locale: Services.locale.appLocaleAsLangTag,
|
|
|
|
/**
|
|
* Information regarding the operating system.
|
|
*/
|
|
|
|
// Returns the endianness of the architecture: either "LE" or "BE"
|
|
endianness: endianness,
|
|
|
|
// Returns the hostname of the machine
|
|
hostname: hostname,
|
|
|
|
// Name of the OS type. Typically the same as `uname -s`. Possible values:
|
|
// https://developer.mozilla.org/en/OS_TARGET
|
|
os,
|
|
platform: os,
|
|
|
|
// hardware and version info from `deviceinfo.hardware`
|
|
// and `deviceinfo.os`.
|
|
hardware,
|
|
|
|
// Device name. This property is only available on Android.
|
|
// e.g. "Pixel 2"
|
|
deviceName: getDeviceName(),
|
|
|
|
// Type of process architecture running:
|
|
// "arm", "ia32", "x86", "x64"
|
|
// Alias to both `arch` and `processor` for node/deviceactor compat
|
|
arch: processor,
|
|
processor,
|
|
|
|
// Name of compiler used for build:
|
|
// `'msvc', 'n32', 'gcc2', 'gcc3', 'sunc', 'ibmc'...`
|
|
compiler,
|
|
|
|
// Location for the current profile
|
|
profile: getProfileLocation(),
|
|
|
|
// Update channel
|
|
channel: AppConstants.MOZ_UPDATE_CHANNEL,
|
|
|
|
dpi,
|
|
useragent,
|
|
width,
|
|
height,
|
|
physicalWidth,
|
|
physicalHeight,
|
|
brandName,
|
|
};
|
|
|
|
CACHED_INFO = info;
|
|
return info;
|
|
}
|
|
|
|
function getDeviceName() {
|
|
try {
|
|
// Will throw on other platforms than Firefox for Android.
|
|
return Services.sysinfo.getProperty("device");
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function getProfileLocation() {
|
|
// In child processes, we cannot access the profile location.
|
|
try {
|
|
// For some reason this line must come first or in xpcshell tests
|
|
// nsXREDirProvider never gets initialised and so the profile service
|
|
// crashes on initialisation.
|
|
const profd = Services.dirsvc.get("ProfD", Ci.nsIFile);
|
|
const profservice = Cc["@mozilla.org/toolkit/profile-service;1"]
|
|
.getService(Ci.nsIToolkitProfileService);
|
|
if (profservice.currentProfile) {
|
|
return profservice.currentProfile.name;
|
|
}
|
|
|
|
return profd.leafName;
|
|
} catch (e) {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
exports.getSystemInfo = getSystemInfo;
|