diff options
Diffstat (limited to 'browser/components/preferences/tests/browser_media_control.js')
-rw-r--r-- | browser/components/preferences/tests/browser_media_control.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/browser/components/preferences/tests/browser_media_control.js b/browser/components/preferences/tests/browser_media_control.js new file mode 100644 index 0000000000..6512fb9e74 --- /dev/null +++ b/browser/components/preferences/tests/browser_media_control.js @@ -0,0 +1,83 @@ +/** + * Media control check box should change the media control pref, vice versa. + */ +const MEDIA_CONTROL_PREF = "media.hardwaremediakeys.enabled"; + +add_task(async function testMediaControlCheckBox() { + const prefs = await openPreferencesViaOpenPreferencesAPI("paneGeneral", { + leaveOpen: true, + }); + is(prefs.selectedPane, "paneGeneral", "General pane was selected"); + + const checkBox = gBrowser.contentDocument.getElementById( + "mediaControlToggleEnabled" + ); + ok(checkBox, "check box exists"); + + // The pref is true by default. + await modifyPrefAndWaitUntilCheckBoxChanges(false); + await modifyPrefAndWaitUntilCheckBoxChanges(true); + await toggleCheckBoxAndWaitUntilPrefValueChanges(false); + await toggleCheckBoxAndWaitUntilPrefValueChanges(true); + BrowserTestUtils.removeTab(gBrowser.selectedTab); +}); + +async function modifyPrefAndWaitUntilCheckBoxChanges(isEnabled) { + info((isEnabled ? "enable" : "disable") + " the pref"); + const checkBox = gBrowser.contentDocument.getElementById( + "mediaControlToggleEnabled" + ); + await SpecialPowers.pushPrefEnv({ + set: [[MEDIA_CONTROL_PREF, isEnabled]], + }); + await TestUtils.waitForCondition( + _ => checkBox.checked == isEnabled, + "Waiting for the checkbox gets checked" + ); + is(checkBox.checked, isEnabled, `check box status is correct`); + checkAndClearTelemetryProbe(isEnabled); +} + +async function toggleCheckBoxAndWaitUntilPrefValueChanges(isChecked) { + info((isChecked ? "check" : "uncheck") + " the check box"); + const checkBox = gBrowser.contentDocument.getElementById( + "mediaControlToggleEnabled" + ); + checkBox.click(); + is( + Services.prefs.getBoolPref(MEDIA_CONTROL_PREF), + isChecked, + "the pref's value is correct" + ); + checkAndClearTelemetryProbe(isChecked, true /* check UI */); +} + +/** + * These telemetry related variable and method should be removed after the + * telemetry probe `MEDIA_CONTROL_SETTING_CHANGE` gets expired. + */ +const HISTOGRAM_ID = "MEDIA_CONTROL_SETTING_CHANGE"; +const HISTOGRAM_KEYS = { + EnableFromUI: 0, + EnableTotal: 1, + DisableFromUI: 2, + DisableTotal: 3, +}; + +function checkAndClearTelemetryProbe(isEnable, checkUI = false) { + const histogram = Services.telemetry.getHistogramById(HISTOGRAM_ID); + let keyTotal = isEnable ? "EnableTotal" : "DisableTotal"; + let keyUI = null; + if (checkUI) { + keyUI = isEnable ? "EnableFromUI" : "DisableFromUI"; + } + for (let [key, val] of Object.entries(histogram.snapshot().values)) { + if (key == HISTOGRAM_KEYS[keyTotal]) { + ok(val, "Increase the amount for the probe 'changeing total setting'"); + } + if (keyUI && key == HISTOGRAM_KEYS[keyUI]) { + ok(val, "Increase the amount for the probe 'changeing setting from UI'"); + } + } + histogram.clear(); +} |