diff --git a/browser/base/content/moz.build b/browser/base/content/moz.build index 8efe140ef0f7..8e2914502952 100644 --- a/browser/base/content/moz.build +++ b/browser/base/content/moz.build @@ -79,6 +79,9 @@ with Files("test/siteIdentity/**"): with Files("test/sidebar/**"): BUG_COMPONENT = ("Firefox", "General") +with Files("test/startup/**"): + BUG_COMPONENT = ("Firefox", "General") + with Files("test/static/**"): BUG_COMPONENT = ("Firefox", "General") diff --git a/browser/base/content/test/startup/.eslintrc.js b/browser/base/content/test/startup/.eslintrc.js new file mode 100644 index 000000000000..1779fd7f1cf8 --- /dev/null +++ b/browser/base/content/test/startup/.eslintrc.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = { + extends: ["plugin:mozilla/browser-test"], +}; diff --git a/browser/base/content/test/startup/browser.ini b/browser/base/content/test/startup/browser.ini new file mode 100644 index 000000000000..0924965c2e9d --- /dev/null +++ b/browser/base/content/test/startup/browser.ini @@ -0,0 +1,2 @@ +[browser_preXULSkeletonUIRegistry.js] +skip-if = os != 'win' \ No newline at end of file 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 000000000000..5d3e8d36f912 --- /dev/null +++ b/browser/base/content/test/startup/browser_preXULSkeletonUIRegistry.js @@ -0,0 +1,107 @@ +ChromeUtils.defineModuleGetter( + this, + "WindowsRegistry", + "resource://gre/modules/WindowsRegistry.jsm" +); + +// 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); + let enabled = WindowsRegistry.readRegKey( + Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, + "Software\\Mozilla\\Firefox\\PreXULSkeletonUISettings", + "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", + "enabled" + ); + is(enabled, 0, "Pre-XUL skeleton UI is disabled in the Windows registry"); +}); + +add_task(async function testWritesSizeValuesOnChange() { + // 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", + "cssToDevPixelScaling", + ]; + + // 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(); + for (let key of regKeys) { + let value = readRegKeyExtended( + Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, + "Software\\Mozilla\\Firefox\\PreXULSkeletonUISettings", + key + ); + ok( + value, + `Skeleton UI registry values should have a non-zero 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); +}); diff --git a/browser/base/moz.build b/browser/base/moz.build index fdfa93d4623a..7d12024f2516 100644 --- a/browser/base/moz.build +++ b/browser/base/moz.build @@ -49,6 +49,7 @@ BROWSER_CHROME_MANIFESTS += [ 'content/test/sanitize/browser.ini', 'content/test/sidebar/browser.ini', 'content/test/siteIdentity/browser.ini', + 'content/test/startup/browser.ini', 'content/test/static/browser.ini', 'content/test/statuspanel/browser.ini', 'content/test/sync/browser.ini',