forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			230 lines
		
	
	
	
		
			6.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			230 lines
		
	
	
	
		
			6.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| const PREF_UI_DENSITY = "browser.uidensity";
 | |
| const PREF_AUTO_TOUCH_MODE = "browser.touchmode.auto";
 | |
| 
 | |
| async function testModeMenuitem(mode, modePref) {
 | |
|   await startCustomizing();
 | |
| 
 | |
|   let win = document.getElementById("main-window");
 | |
|   let popupButton = document.getElementById("customization-uidensity-button");
 | |
|   let popup = document.getElementById("customization-uidensity-menu");
 | |
| 
 | |
|   // Show the popup.
 | |
|   let popupShownPromise = popupShown(popup);
 | |
|   EventUtils.synthesizeMouseAtCenter(popupButton, {});
 | |
|   await popupShownPromise;
 | |
| 
 | |
|   let item = document.getElementById(
 | |
|     "customization-uidensity-menuitem-" + mode
 | |
|   );
 | |
|   let normalItem = document.getElementById(
 | |
|     "customization-uidensity-menuitem-normal"
 | |
|   );
 | |
| 
 | |
|   is(
 | |
|     normalItem.getAttribute("active"),
 | |
|     "true",
 | |
|     "Normal mode menuitem should be active by default"
 | |
|   );
 | |
| 
 | |
|   // Hover over the mode menuitem and wait for the event that updates the UI
 | |
|   // density.
 | |
|   let mouseoverPromise = BrowserTestUtils.waitForEvent(item, "mouseover");
 | |
|   EventUtils.synthesizeMouseAtCenter(item, { type: "mouseover" });
 | |
|   await mouseoverPromise;
 | |
| 
 | |
|   is(
 | |
|     win.getAttribute("uidensity"),
 | |
|     mode,
 | |
|     `UI Density should be set to ${mode} on ${mode} menuitem hover`
 | |
|   );
 | |
| 
 | |
|   is(
 | |
|     Services.prefs.getIntPref(PREF_UI_DENSITY),
 | |
|     window.gUIDensity.MODE_NORMAL,
 | |
|     `UI Density pref should still be set to normal on ${mode} menuitem hover`
 | |
|   );
 | |
| 
 | |
|   // Hover the normal menuitem again and check that the UI density reset to normal.
 | |
|   EventUtils.synthesizeMouseAtCenter(normalItem, { type: "mouseover" });
 | |
|   await BrowserTestUtils.waitForCondition(() => !win.hasAttribute("uidensity"));
 | |
| 
 | |
|   ok(
 | |
|     !win.hasAttribute("uidensity"),
 | |
|     `UI Density should be reset when no longer hovering the ${mode} menuitem`
 | |
|   );
 | |
| 
 | |
|   // Select the custom UI density and wait for the popup to be hidden.
 | |
|   let popupHiddenPromise = popupHidden(popup);
 | |
|   EventUtils.synthesizeMouseAtCenter(item, {});
 | |
|   await popupHiddenPromise;
 | |
| 
 | |
|   // Check that the click permanently changed the UI density.
 | |
|   is(
 | |
|     win.getAttribute("uidensity"),
 | |
|     mode,
 | |
|     `UI Density should be set to ${mode} on ${mode} menuitem click`
 | |
|   );
 | |
|   is(
 | |
|     Services.prefs.getIntPref(PREF_UI_DENSITY),
 | |
|     modePref,
 | |
|     `UI Density pref should be set to ${mode} when clicking the ${mode} menuitem`
 | |
|   );
 | |
| 
 | |
|   // Open the popup again.
 | |
|   popupShownPromise = popupShown(popup);
 | |
|   EventUtils.synthesizeMouseAtCenter(popupButton, {});
 | |
|   await popupShownPromise;
 | |
| 
 | |
|   // Check that the menuitem is still active after opening and closing the popup.
 | |
|   is(
 | |
|     item.getAttribute("active"),
 | |
|     "true",
 | |
|     `${mode} mode menuitem should be active`
 | |
|   );
 | |
| 
 | |
|   // Hide the popup again.
 | |
|   popupHiddenPromise = popupHidden(popup);
 | |
|   EventUtils.synthesizeMouseAtCenter(popupButton, {});
 | |
|   await popupHiddenPromise;
 | |
| 
 | |
|   // Check that the menuitem is still active after re-opening customize mode.
 | |
|   await endCustomizing();
 | |
|   await startCustomizing();
 | |
| 
 | |
|   popupShownPromise = popupShown(popup);
 | |
|   EventUtils.synthesizeMouseAtCenter(popupButton, {});
 | |
|   await popupShownPromise;
 | |
| 
 | |
|   is(
 | |
|     item.getAttribute("active"),
 | |
|     "true",
 | |
|     `${mode} mode menuitem should be active after entering and exiting customize mode`
 | |
|   );
 | |
| 
 | |
|   // Click the normal menuitem and check that the density is reset.
 | |
|   popupHiddenPromise = popupHidden(popup);
 | |
|   EventUtils.synthesizeMouseAtCenter(normalItem, {});
 | |
|   await popupHiddenPromise;
 | |
| 
 | |
|   ok(
 | |
|     !win.hasAttribute("uidensity"),
 | |
|     "UI Density should be reset when clicking the normal menuitem"
 | |
|   );
 | |
| 
 | |
|   is(
 | |
|     Services.prefs.getIntPref(PREF_UI_DENSITY),
 | |
|     window.gUIDensity.MODE_NORMAL,
 | |
|     "UI Density pref should be set to normal."
 | |
|   );
 | |
| 
 | |
|   // Show the popup and click on the mode menuitem again to test the
 | |
|   // reset default feature.
 | |
|   popupShownPromise = popupShown(popup);
 | |
|   EventUtils.synthesizeMouseAtCenter(popupButton, {});
 | |
|   await popupShownPromise;
 | |
| 
 | |
|   popupHiddenPromise = popupHidden(popup);
 | |
|   EventUtils.synthesizeMouseAtCenter(item, {});
 | |
|   await popupHiddenPromise;
 | |
| 
 | |
|   is(
 | |
|     win.getAttribute("uidensity"),
 | |
|     mode,
 | |
|     `UI Density should be set to ${mode} on ${mode} menuitem click`
 | |
|   );
 | |
| 
 | |
|   is(
 | |
|     Services.prefs.getIntPref(PREF_UI_DENSITY),
 | |
|     modePref,
 | |
|     `UI Density pref should be set to ${mode} when clicking the ${mode} menuitem`
 | |
|   );
 | |
| 
 | |
|   await gCustomizeMode.reset();
 | |
| 
 | |
|   ok(
 | |
|     !win.hasAttribute("uidensity"),
 | |
|     "UI Density should be reset when clicking the normal menuitem"
 | |
|   );
 | |
| 
 | |
|   is(
 | |
|     Services.prefs.getIntPref(PREF_UI_DENSITY),
 | |
|     window.gUIDensity.MODE_NORMAL,
 | |
|     "UI Density pref should be set to normal."
 | |
|   );
 | |
| 
 | |
|   await endCustomizing();
 | |
| }
 | |
| 
 | |
| add_task(async function test_touch_mode_menuitem() {
 | |
|   // OSX doesn't get touch mode for now.
 | |
|   if (AppConstants.platform == "macosx") {
 | |
|     is(
 | |
|       document.getElementById("customization-uidensity-menuitem-touch"),
 | |
|       null,
 | |
|       "There's no touch option on Mac OSX"
 | |
|     );
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   await testModeMenuitem("touch", window.gUIDensity.MODE_TOUCH);
 | |
| 
 | |
|   // Test the checkbox for automatic Touch Mode transition
 | |
|   // in Windows Tablet Mode.
 | |
|   if (AppConstants.platform == "win") {
 | |
|     await startCustomizing();
 | |
| 
 | |
|     let popupButton = document.getElementById("customization-uidensity-button");
 | |
|     let popup = document.getElementById("customization-uidensity-menu");
 | |
|     let popupShownPromise = popupShown(popup);
 | |
|     EventUtils.synthesizeMouseAtCenter(popupButton, {});
 | |
|     await popupShownPromise;
 | |
| 
 | |
|     let checkbox = document.getElementById(
 | |
|       "customization-uidensity-autotouchmode-checkbox"
 | |
|     );
 | |
|     ok(checkbox.checked, "Checkbox should be checked by default");
 | |
| 
 | |
|     // Test toggling the checkbox.
 | |
|     EventUtils.synthesizeMouseAtCenter(checkbox, {});
 | |
|     is(
 | |
|       Services.prefs.getBoolPref(PREF_AUTO_TOUCH_MODE),
 | |
|       false,
 | |
|       "Automatic Touch Mode is off when the checkbox is unchecked."
 | |
|     );
 | |
| 
 | |
|     EventUtils.synthesizeMouseAtCenter(checkbox, {});
 | |
|     is(
 | |
|       Services.prefs.getBoolPref(PREF_AUTO_TOUCH_MODE),
 | |
|       true,
 | |
|       "Automatic Touch Mode is on when the checkbox is checked."
 | |
|     );
 | |
| 
 | |
|     // Test reset to defaults.
 | |
|     EventUtils.synthesizeMouseAtCenter(checkbox, {});
 | |
|     is(
 | |
|       Services.prefs.getBoolPref(PREF_AUTO_TOUCH_MODE),
 | |
|       false,
 | |
|       "Automatic Touch Mode is off when the checkbox is unchecked."
 | |
|     );
 | |
| 
 | |
|     await gCustomizeMode.reset();
 | |
|     is(
 | |
|       Services.prefs.getBoolPref(PREF_AUTO_TOUCH_MODE),
 | |
|       true,
 | |
|       "Automatic Touch Mode is on when the checkbox is checked."
 | |
|     );
 | |
|   }
 | |
| });
 | |
| 
 | |
| add_task(async function cleanup() {
 | |
|   await endCustomizing();
 | |
| 
 | |
|   Services.prefs.clearUserPref(PREF_UI_DENSITY);
 | |
|   Services.prefs.clearUserPref(PREF_AUTO_TOUCH_MODE);
 | |
| });
 | 
