forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * 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();
 | 
						|
}
 |