From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../startup/browser_preXULSkeletonUIRegistry.js | 136 +++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 browser/base/content/test/startup/browser_preXULSkeletonUIRegistry.js (limited to 'browser/base/content/test/startup/browser_preXULSkeletonUIRegistry.js') diff --git a/browser/base/content/test/startup/browser_preXULSkeletonUIRegistry.js b/browser/base/content/test/startup/browser_preXULSkeletonUIRegistry.js new file mode 100644 index 0000000000..7b96764eba --- /dev/null +++ b/browser/base/content/test/startup/browser_preXULSkeletonUIRegistry.js @@ -0,0 +1,136 @@ +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.sys.mjs, 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.sys.mjs 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); +}); -- cgit v1.2.3