136 lines
4.5 KiB
JavaScript
136 lines
4.5 KiB
JavaScript
ChromeUtils.defineESModuleGetters(this, {
|
|
WindowsRegistry: "resource://gre/modules/WindowsRegistry.sys.mjs",
|
|
});
|
|
|
|
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.setIntPref("browser.tabs.inTitlebar", 0);
|
|
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);
|
|
});
|