mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-08 20:28:42 +02:00
This will disable the skeleton UI if we crash while setting it up, and further the error will propagate up and get reported via telemetry on the next run. This is important because we don't have anything like the crash reporter set up by the time we want to start showing the skeleton UI. Differential Revision: https://phabricator.services.mozilla.com/D102355
138 lines
4.5 KiB
JavaScript
138 lines
4.5 KiB
JavaScript
ChromeUtils.defineModuleGetter(
|
|
this,
|
|
"WindowsRegistry",
|
|
"resource://gre/modules/WindowsRegistry.jsm"
|
|
);
|
|
|
|
function getFirefoxExecutableFile() {
|
|
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
|
|
file = Services.dirsvc.get("GreBinD", Ci.nsIFile);
|
|
|
|
file.append(AppConstants.MOZ_APP_NAME + ".exe");
|
|
return file;
|
|
}
|
|
|
|
// This is copied from WindowsRegistry.jsm, but extended to support
|
|
// TYPE_BINARY, as that is how we represent doubles in the registry for
|
|
// the skeleton UI. However, we didn't extend WindowsRegistry.jsm itself,
|
|
// because TYPE_BINARY is kind of a footgun for javascript callers - our
|
|
// use case is just trivial (checking that the value is non-zero).
|
|
function readRegKeyExtended(aRoot, aPath, aKey, aRegistryNode = 0) {
|
|
const kRegMultiSz = 7;
|
|
const kMode = Ci.nsIWindowsRegKey.ACCESS_READ | aRegistryNode;
|
|
let registry = Cc["@mozilla.org/windows-registry-key;1"].createInstance(
|
|
Ci.nsIWindowsRegKey
|
|
);
|
|
try {
|
|
registry.open(aRoot, aPath, kMode);
|
|
if (registry.hasValue(aKey)) {
|
|
let type = registry.getValueType(aKey);
|
|
switch (type) {
|
|
case kRegMultiSz:
|
|
// nsIWindowsRegKey doesn't support REG_MULTI_SZ type out of the box.
|
|
let str = registry.readStringValue(aKey);
|
|
return str.split("\0").filter(v => v);
|
|
case Ci.nsIWindowsRegKey.TYPE_STRING:
|
|
return registry.readStringValue(aKey);
|
|
case Ci.nsIWindowsRegKey.TYPE_INT:
|
|
return registry.readIntValue(aKey);
|
|
case Ci.nsIWindowsRegKey.TYPE_BINARY:
|
|
return registry.readBinaryValue(aKey);
|
|
default:
|
|
throw new Error("Unsupported registry value.");
|
|
}
|
|
}
|
|
} catch (ex) {
|
|
} finally {
|
|
registry.close();
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
add_task(async function testWritesEnabledOnPrefChange() {
|
|
Services.prefs.setBoolPref("browser.startup.preXulSkeletonUI", true);
|
|
|
|
const win = await BrowserTestUtils.openNewBrowserWindow();
|
|
|
|
const firefoxPath = getFirefoxExecutableFile().path;
|
|
let enabled = WindowsRegistry.readRegKey(
|
|
Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER,
|
|
"Software\\Mozilla\\Firefox\\PreXULSkeletonUISettings",
|
|
`${firefoxPath}|Enabled`
|
|
);
|
|
is(enabled, 1, "Pre-XUL skeleton UI is enabled in the Windows registry");
|
|
|
|
Services.prefs.setBoolPref("browser.startup.preXulSkeletonUI", false);
|
|
enabled = WindowsRegistry.readRegKey(
|
|
Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER,
|
|
"Software\\Mozilla\\Firefox\\PreXULSkeletonUISettings",
|
|
`${firefoxPath}|Enabled`
|
|
);
|
|
is(enabled, 0, "Pre-XUL skeleton UI is disabled in the Windows registry");
|
|
|
|
Services.prefs.setBoolPref("browser.startup.preXulSkeletonUI", true);
|
|
Services.prefs.setBoolPref("browser.tabs.drawInTitlebar", false);
|
|
enabled = WindowsRegistry.readRegKey(
|
|
Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER,
|
|
"Software\\Mozilla\\Firefox\\PreXULSkeletonUISettings",
|
|
`${firefoxPath}|Enabled`
|
|
);
|
|
is(enabled, 0, "Pre-XUL skeleton UI is disabled in the Windows registry");
|
|
|
|
await BrowserTestUtils.closeWindow(win);
|
|
});
|
|
|
|
add_task(async function testPersistsNecessaryValuesOnChange() {
|
|
// Enable the skeleton UI, since if it's disabled we won't persist the size values
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [["browser.startup.preXulSkeletonUI", true]],
|
|
});
|
|
|
|
const regKeys = [
|
|
"Width",
|
|
"Height",
|
|
"ScreenX",
|
|
"ScreenY",
|
|
"UrlbarCSSSpan",
|
|
"CssToDevPixelScaling",
|
|
"SpringsCSSSpan",
|
|
"SearchbarCSSSpan",
|
|
"Theme",
|
|
"Flags",
|
|
"Progress",
|
|
];
|
|
|
|
// Remove all of the registry values to ensure old tests aren't giving us false
|
|
// positives
|
|
for (let key of regKeys) {
|
|
WindowsRegistry.removeRegKey(
|
|
Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER,
|
|
"Software\\Mozilla\\Firefox\\PreXULSkeletonUISettings",
|
|
key
|
|
);
|
|
}
|
|
|
|
const win = await BrowserTestUtils.openNewBrowserWindow();
|
|
const firefoxPath = getFirefoxExecutableFile().path;
|
|
for (let key of regKeys) {
|
|
let value = readRegKeyExtended(
|
|
Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER,
|
|
"Software\\Mozilla\\Firefox\\PreXULSkeletonUISettings",
|
|
`${firefoxPath}|${key}`
|
|
);
|
|
isnot(
|
|
typeof value,
|
|
"undefined",
|
|
`Skeleton UI registry values should have a defined value for ${key}`
|
|
);
|
|
if (value.length) {
|
|
let hasNonZero = false;
|
|
for (var i = 0; i < value.length; i++) {
|
|
hasNonZero = hasNonZero || value[i];
|
|
}
|
|
ok(hasNonZero, `Value should have non-zero components for ${key}`);
|
|
}
|
|
}
|
|
|
|
await BrowserTestUtils.closeWindow(win);
|
|
});
|