forked from mirrors/gecko-dev
129 lines
6.7 KiB
JavaScript
129 lines
6.7 KiB
JavaScript
/*
|
|
* Testing changes for Developer Edition theme.
|
|
* A special stylesheet should be added to the browser.xul document
|
|
* when the firefox-devedition@mozilla.org lightweight theme
|
|
* is applied.
|
|
*/
|
|
|
|
const PREF_LWTHEME_USED_THEMES = "lightweightThemes.usedThemes";
|
|
const PREF_DEVTOOLS_THEME = "devtools.theme";
|
|
const {LightweightThemeManager} = Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm", {});
|
|
|
|
LightweightThemeManager.clearBuiltInThemes();
|
|
LightweightThemeManager.addBuiltInTheme(dummyLightweightTheme("firefox-devedition@mozilla.org"));
|
|
|
|
registerCleanupFunction(() => {
|
|
// Set preferences back to their original values
|
|
LightweightThemeManager.currentTheme = null;
|
|
Services.prefs.clearUserPref(PREF_DEVTOOLS_THEME);
|
|
Services.prefs.clearUserPref(PREF_LWTHEME_USED_THEMES);
|
|
|
|
LightweightThemeManager.currentTheme = null;
|
|
LightweightThemeManager.clearBuiltInThemes();
|
|
});
|
|
|
|
add_task(function* startTests() {
|
|
Services.prefs.setCharPref(PREF_DEVTOOLS_THEME, "dark");
|
|
|
|
info ("Setting the current theme to null");
|
|
LightweightThemeManager.currentTheme = null;
|
|
ok (!DevEdition.isStyleSheetEnabled, "There is no devedition style sheet when no lw theme is applied.");
|
|
|
|
info ("Adding a lightweight theme.");
|
|
LightweightThemeManager.currentTheme = dummyLightweightTheme("preview0");
|
|
ok (!DevEdition.isStyleSheetEnabled, "The devedition stylesheet has been removed when a lightweight theme is applied.");
|
|
|
|
info ("Applying the devedition lightweight theme.");
|
|
let onAttributeAdded = waitForBrightTitlebarAttribute();
|
|
LightweightThemeManager.currentTheme = LightweightThemeManager.getUsedTheme("firefox-devedition@mozilla.org");
|
|
ok (DevEdition.isStyleSheetEnabled, "The devedition stylesheet has been added when the devedition lightweight theme is applied");
|
|
yield onAttributeAdded;
|
|
is (document.documentElement.getAttribute("brighttitlebarforeground"), "true",
|
|
"The brighttitlebarforeground attribute is set on the window.");
|
|
|
|
info ("Unapplying all themes.");
|
|
LightweightThemeManager.currentTheme = null;
|
|
ok (!DevEdition.isStyleSheetEnabled, "There is no devedition style sheet when no lw theme is applied.");
|
|
|
|
info ("Applying the devedition lightweight theme.");
|
|
onAttributeAdded = waitForBrightTitlebarAttribute();
|
|
LightweightThemeManager.currentTheme = LightweightThemeManager.getUsedTheme("firefox-devedition@mozilla.org");
|
|
ok (DevEdition.isStyleSheetEnabled, "The devedition stylesheet has been added when the devedition lightweight theme is applied");
|
|
yield onAttributeAdded;
|
|
ok (document.documentElement.hasAttribute("brighttitlebarforeground"),
|
|
"The brighttitlebarforeground attribute is set on the window with dark devtools theme.");
|
|
});
|
|
|
|
add_task(function* testDevtoolsTheme() {
|
|
info ("Checking stylesheet and :root attributes based on devtools theme.");
|
|
Services.prefs.setCharPref(PREF_DEVTOOLS_THEME, "light");
|
|
is (document.documentElement.getAttribute("devtoolstheme"), "light",
|
|
"The documentElement has an attribute based on devtools theme.");
|
|
ok (DevEdition.isStyleSheetEnabled, "The devedition stylesheet is still there with the light devtools theme.");
|
|
ok (!document.documentElement.hasAttribute("brighttitlebarforeground"),
|
|
"The brighttitlebarforeground attribute is not set on the window with light devtools theme.");
|
|
|
|
Services.prefs.setCharPref(PREF_DEVTOOLS_THEME, "dark");
|
|
is (document.documentElement.getAttribute("devtoolstheme"), "dark",
|
|
"The documentElement has an attribute based on devtools theme.");
|
|
ok (DevEdition.isStyleSheetEnabled, "The devedition stylesheet is still there with the dark devtools theme.");
|
|
is (document.documentElement.getAttribute("brighttitlebarforeground"), "true",
|
|
"The brighttitlebarforeground attribute is set on the window with dark devtools theme.");
|
|
|
|
Services.prefs.setCharPref(PREF_DEVTOOLS_THEME, "foobar");
|
|
is (document.documentElement.getAttribute("devtoolstheme"), "light",
|
|
"The documentElement has 'light' as a default for the devtoolstheme attribute");
|
|
ok (DevEdition.isStyleSheetEnabled, "The devedition stylesheet is still there with the foobar devtools theme.");
|
|
ok (!document.documentElement.hasAttribute("brighttitlebarforeground"),
|
|
"The brighttitlebarforeground attribute is not set on the window with light devtools theme.");
|
|
});
|
|
|
|
function dummyLightweightTheme(id) {
|
|
return {
|
|
id: id,
|
|
name: id,
|
|
headerURL: "resource:///chrome/browser/content/browser/defaultthemes/devedition.header.png",
|
|
iconURL: "resource:///chrome/browser/content/browser/defaultthemes/devedition.icon.png",
|
|
textcolor: "red",
|
|
accentcolor: "blue"
|
|
};
|
|
}
|
|
|
|
add_task(function* testLightweightThemePreview() {
|
|
info ("Setting devedition to current and the previewing others");
|
|
LightweightThemeManager.currentTheme = LightweightThemeManager.getUsedTheme("firefox-devedition@mozilla.org");
|
|
ok (DevEdition.isStyleSheetEnabled, "The devedition stylesheet is enabled.");
|
|
LightweightThemeManager.previewTheme(dummyLightweightTheme("preview0"));
|
|
ok (!DevEdition.isStyleSheetEnabled, "The devedition stylesheet is not enabled after a lightweight theme preview.");
|
|
LightweightThemeManager.resetPreview();
|
|
LightweightThemeManager.previewTheme(dummyLightweightTheme("preview1"));
|
|
ok (!DevEdition.isStyleSheetEnabled, "The devedition stylesheet is not enabled after a second lightweight theme preview.");
|
|
LightweightThemeManager.resetPreview();
|
|
ok (DevEdition.isStyleSheetEnabled, "The devedition stylesheet is enabled again after resetting the preview.");
|
|
LightweightThemeManager.currentTheme = null;
|
|
ok (!DevEdition.isStyleSheetEnabled, "The devedition stylesheet is gone after removing the current theme.");
|
|
|
|
info ("Previewing the devedition theme");
|
|
LightweightThemeManager.previewTheme(LightweightThemeManager.getUsedTheme("firefox-devedition@mozilla.org"));
|
|
ok (DevEdition.isStyleSheetEnabled, "The devedition stylesheet is enabled.");
|
|
LightweightThemeManager.previewTheme(dummyLightweightTheme("preview2"));
|
|
LightweightThemeManager.resetPreview();
|
|
ok (!DevEdition.isStyleSheetEnabled, "The devedition stylesheet is now disabled after resetting the preview.");
|
|
});
|
|
|
|
// Use a mutation observer to wait for the brighttitlebarforeground
|
|
// attribute to change. Using this instead of waiting for the load
|
|
// event on the DevEdition styleSheet.
|
|
function waitForBrightTitlebarAttribute() {
|
|
return new Promise((resolve, reject) => {
|
|
let mutationObserver = new MutationObserver(function (mutations) {
|
|
for (let mutation of mutations) {
|
|
if (mutation.attributeName == "brighttitlebarforeground") {
|
|
mutationObserver.disconnect();
|
|
resolve();
|
|
}
|
|
}
|
|
});
|
|
mutationObserver.observe(document.documentElement, { attributes: true });
|
|
});
|
|
}
|