summaryrefslogtreecommitdiffstats
path: root/browser/components/preferences/tests/browser_media_control.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/preferences/tests/browser_media_control.js')
-rw-r--r--browser/components/preferences/tests/browser_media_control.js83
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();
+}