forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			126 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Tests that the identity block can be reached via keyboard
 | 
						|
 * shortcuts and that it has the correct tab order.
 | 
						|
 */
 | 
						|
 | 
						|
const TEST_PATH = getRootDirectory(gTestPath).replace(
 | 
						|
  "chrome://mochitests/content",
 | 
						|
  "https://example.com"
 | 
						|
);
 | 
						|
const PERMISSIONS_PAGE = TEST_PATH + "permissions.html";
 | 
						|
 | 
						|
// The DevEdition has the DevTools button in the toolbar by default. Remove it
 | 
						|
// to prevent branch-specific rules what button should be focused.
 | 
						|
CustomizableUI.removeWidgetFromArea("developer-button");
 | 
						|
 | 
						|
registerCleanupFunction(async function resetToolbar() {
 | 
						|
  await CustomizableUI.reset();
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function setupHomeButton() {
 | 
						|
  // Put the home button in the pre-proton placement to test focus states.
 | 
						|
  CustomizableUI.addWidgetToArea(
 | 
						|
    "home-button",
 | 
						|
    "nav-bar",
 | 
						|
    CustomizableUI.getPlacementOfWidget("stop-reload-button").position + 1
 | 
						|
  );
 | 
						|
});
 | 
						|
 | 
						|
function synthesizeKeyAndWaitForFocus(element, keyCode, options) {
 | 
						|
  let focused = BrowserTestUtils.waitForEvent(element, "focus");
 | 
						|
  EventUtils.synthesizeKey(keyCode, options);
 | 
						|
  return focused;
 | 
						|
}
 | 
						|
 | 
						|
// Checks that the tracking protection icon container is the next element after
 | 
						|
// the urlbar to be focused if there are no active notification anchors.
 | 
						|
add_task(async function testWithoutNotifications() {
 | 
						|
  await SpecialPowers.pushPrefEnv({ set: [["accessibility.tabfocus", 7]] });
 | 
						|
  await BrowserTestUtils.withNewTab("https://example.com", async function () {
 | 
						|
    await synthesizeKeyAndWaitForFocus(gURLBar, "l", { accelKey: true });
 | 
						|
    is(document.activeElement, gURLBar.inputField, "urlbar should be focused");
 | 
						|
    await synthesizeKeyAndWaitForFocus(
 | 
						|
      gProtectionsHandler._trackingProtectionIconContainer,
 | 
						|
      "VK_TAB",
 | 
						|
      { shiftKey: true }
 | 
						|
    );
 | 
						|
    is(
 | 
						|
      document.activeElement,
 | 
						|
      gProtectionsHandler._trackingProtectionIconContainer,
 | 
						|
      "tracking protection icon container should be focused"
 | 
						|
    );
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
// Checks that when there is a notification anchor, it will receive
 | 
						|
// focus before the identity block.
 | 
						|
add_task(async function testWithNotifications() {
 | 
						|
  await SpecialPowers.pushPrefEnv({ set: [["accessibility.tabfocus", 7]] });
 | 
						|
  await BrowserTestUtils.withNewTab(PERMISSIONS_PAGE, async function (browser) {
 | 
						|
    let popupshown = BrowserTestUtils.waitForEvent(
 | 
						|
      PopupNotifications.panel,
 | 
						|
      "popupshown"
 | 
						|
    );
 | 
						|
    // Request a permission;
 | 
						|
    BrowserTestUtils.synthesizeMouseAtCenter("#geo", {}, browser);
 | 
						|
    await popupshown;
 | 
						|
 | 
						|
    await synthesizeKeyAndWaitForFocus(gURLBar, "l", { accelKey: true });
 | 
						|
    is(document.activeElement, gURLBar.inputField, "urlbar should be focused");
 | 
						|
    await synthesizeKeyAndWaitForFocus(
 | 
						|
      gProtectionsHandler._trackingProtectionIconContainer,
 | 
						|
      "VK_TAB",
 | 
						|
      { shiftKey: true }
 | 
						|
    );
 | 
						|
    is(
 | 
						|
      document.activeElement,
 | 
						|
      gProtectionsHandler._trackingProtectionIconContainer,
 | 
						|
      "tracking protection icon container should be focused"
 | 
						|
    );
 | 
						|
    await synthesizeKeyAndWaitForFocus(
 | 
						|
      gIdentityHandler._identityIconBox,
 | 
						|
      "ArrowRight"
 | 
						|
    );
 | 
						|
    is(
 | 
						|
      document.activeElement,
 | 
						|
      gIdentityHandler._identityIconBox,
 | 
						|
      "identity block should be focused"
 | 
						|
    );
 | 
						|
    let geoIcon = document.getElementById("geo-notification-icon");
 | 
						|
    await synthesizeKeyAndWaitForFocus(geoIcon, "ArrowRight");
 | 
						|
    is(
 | 
						|
      document.activeElement,
 | 
						|
      geoIcon,
 | 
						|
      "notification anchor should be focused"
 | 
						|
    );
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
// Checks that with invalid pageproxystate the identity block is ignored.
 | 
						|
add_task(async function testInvalidPageProxyState() {
 | 
						|
  await SpecialPowers.pushPrefEnv({ set: [["accessibility.tabfocus", 7]] });
 | 
						|
  await BrowserTestUtils.withNewTab("about:blank", async function (browser) {
 | 
						|
    // Loading about:blank will automatically focus the urlbar, which, however, can
 | 
						|
    // race with the test code. So we only send the shortcut if the urlbar isn't focused yet.
 | 
						|
    if (document.activeElement != gURLBar.inputField) {
 | 
						|
      await synthesizeKeyAndWaitForFocus(gURLBar, "l", { accelKey: true });
 | 
						|
    }
 | 
						|
    is(document.activeElement, gURLBar.inputField, "urlbar should be focused");
 | 
						|
    await synthesizeKeyAndWaitForFocus(
 | 
						|
      document.getElementById("home-button"),
 | 
						|
      "VK_TAB",
 | 
						|
      { shiftKey: true }
 | 
						|
    );
 | 
						|
    await synthesizeKeyAndWaitForFocus(
 | 
						|
      document.getElementById("tabs-newtab-button"),
 | 
						|
      "VK_TAB",
 | 
						|
      { shiftKey: true }
 | 
						|
    );
 | 
						|
    isnot(
 | 
						|
      document.activeElement,
 | 
						|
      gProtectionsHandler._trackingProtectionIconContainer,
 | 
						|
      "tracking protection icon container should not be focused"
 | 
						|
    );
 | 
						|
    // Restore focus to the url bar.
 | 
						|
    gURLBar.focus();
 | 
						|
  });
 | 
						|
});
 |