mirror of
				https://github.com/mozilla/gecko-dev.git
				synced 2025-11-04 02:09:05 +02:00 
			
		
		
		
	Renames all instances of the snake_case identifier to camelCase to match more closely to idiomatic JavaScript and to existing conventions throughout the code base. Differential Revision: https://phabricator.services.mozilla.com/D198826
		
			
				
	
	
		
			257 lines
		
	
	
	
		
			8.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			257 lines
		
	
	
	
		
			8.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Any copyright is dedicated to the Public Domain.
 | 
						|
 * https://creativecommons.org/publicdomain/zero/1.0/ */
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
add_task(async function test() {
 | 
						|
  // We use an extension that shows a page action. We must add this additional
 | 
						|
  // action because otherwise the meatball menu would not appear as an overflow
 | 
						|
  // for a single action.
 | 
						|
  let extension = ExtensionTestUtils.loadExtension({
 | 
						|
    manifest: {
 | 
						|
      name: "Test contextMenu",
 | 
						|
      page_action: { show_matches: ["<all_urls>"] },
 | 
						|
    },
 | 
						|
 | 
						|
    useAddonManager: "temporary",
 | 
						|
  });
 | 
						|
 | 
						|
  await extension.startup();
 | 
						|
  let actionId = ExtensionCommon.makeWidgetId(extension.id);
 | 
						|
 | 
						|
  let win = await BrowserTestUtils.openNewBrowserWindow();
 | 
						|
  await SimpleTest.promiseFocus(win);
 | 
						|
  Assert.greater(win.outerWidth, 700, "window is bigger than 700px");
 | 
						|
  BrowserTestUtils.startLoadingURIString(
 | 
						|
    win.gBrowser,
 | 
						|
    "data:text/html,<h1>A Page</h1>"
 | 
						|
  );
 | 
						|
  await BrowserTestUtils.browserLoaded(win.gBrowser.selectedBrowser);
 | 
						|
 | 
						|
  // The pageAction implementation enables the button at the next animation
 | 
						|
  // frame, so before we look for the button we should wait one animation frame
 | 
						|
  // as well.
 | 
						|
  await promiseAnimationFrame(win);
 | 
						|
 | 
						|
  info("Check page action buttons are visible, the meatball button is not");
 | 
						|
  let addonButton =
 | 
						|
    win.BrowserPageActions.urlbarButtonNodeForActionID(actionId);
 | 
						|
  Assert.ok(BrowserTestUtils.isVisible(addonButton));
 | 
						|
  let starButton =
 | 
						|
    win.BrowserPageActions.urlbarButtonNodeForActionID("bookmark");
 | 
						|
  Assert.ok(BrowserTestUtils.isVisible(starButton));
 | 
						|
  let meatballButton = win.document.getElementById("pageActionButton");
 | 
						|
  Assert.ok(!BrowserTestUtils.isVisible(meatballButton));
 | 
						|
 | 
						|
  info(
 | 
						|
    "Shrink the window, check page action buttons are not visible, the meatball menu is visible"
 | 
						|
  );
 | 
						|
  let originalOuterWidth = win.outerWidth;
 | 
						|
  await promiseStableResize(500, win);
 | 
						|
  Assert.ok(!BrowserTestUtils.isVisible(addonButton));
 | 
						|
  Assert.ok(!BrowserTestUtils.isVisible(starButton));
 | 
						|
  Assert.ok(BrowserTestUtils.isVisible(meatballButton));
 | 
						|
 | 
						|
  info(
 | 
						|
    "Remove the extension, check the only page action button is visible, the meatball menu is not visible"
 | 
						|
  );
 | 
						|
  let promiseUninstalled = promiseAddonUninstalled(extension.id);
 | 
						|
  await extension.unload();
 | 
						|
  await promiseUninstalled;
 | 
						|
  Assert.ok(BrowserTestUtils.isVisible(starButton));
 | 
						|
  Assert.ok(!BrowserTestUtils.isVisible(meatballButton));
 | 
						|
  Assert.deepEqual(
 | 
						|
    win.BrowserPageActions.urlbarButtonNodeForActionID(actionId),
 | 
						|
    null
 | 
						|
  );
 | 
						|
 | 
						|
  await promiseStableResize(originalOuterWidth, win);
 | 
						|
  await BrowserTestUtils.closeWindow(win);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function bookmark() {
 | 
						|
  // We use an extension that shows a page action. We must add this additional
 | 
						|
  // action because otherwise the meatball menu would not appear as an overflow
 | 
						|
  // for a single action.
 | 
						|
  let extension = ExtensionTestUtils.loadExtension({
 | 
						|
    manifest: {
 | 
						|
      name: "Test contextMenu",
 | 
						|
      page_action: { show_matches: ["<all_urls>"] },
 | 
						|
    },
 | 
						|
 | 
						|
    useAddonManager: "temporary",
 | 
						|
  });
 | 
						|
 | 
						|
  await extension.startup();
 | 
						|
  const url = "data:text/html,<h1>A Page</h1>";
 | 
						|
  let win = await BrowserTestUtils.openNewBrowserWindow();
 | 
						|
  await SimpleTest.promiseFocus(win);
 | 
						|
  BrowserTestUtils.startLoadingURIString(win.gBrowser, url);
 | 
						|
  await BrowserTestUtils.browserLoaded(win.gBrowser.selectedBrowser);
 | 
						|
 | 
						|
  // The pageAction implementation enables the button at the next animation
 | 
						|
  // frame, so before we look for the button we should wait one animation frame
 | 
						|
  // as well.
 | 
						|
  await promiseAnimationFrame(win);
 | 
						|
 | 
						|
  info("Shrink the window if necessary, check the meatball menu is visible");
 | 
						|
  let originalOuterWidth = win.outerWidth;
 | 
						|
  await promiseStableResize(500, win);
 | 
						|
 | 
						|
  let meatballButton = win.document.getElementById("pageActionButton");
 | 
						|
  Assert.ok(BrowserTestUtils.isVisible(meatballButton));
 | 
						|
 | 
						|
  // Open the panel.
 | 
						|
  await promisePageActionPanelOpen(win);
 | 
						|
 | 
						|
  // The bookmark button should read "Bookmark Current Tab…" and not be starred.
 | 
						|
  let bookmarkButton = win.document.getElementById("pageAction-panel-bookmark");
 | 
						|
  await TestUtils.waitForCondition(
 | 
						|
    () => bookmarkButton.label === "Bookmark Current Tab…"
 | 
						|
  );
 | 
						|
  Assert.ok(!bookmarkButton.hasAttribute("starred"));
 | 
						|
 | 
						|
  // Click the button.
 | 
						|
  let hiddenPromise = promisePageActionPanelHidden(win);
 | 
						|
  let showPromise = BrowserTestUtils.waitForPopupEvent(
 | 
						|
    win.StarUI.panel,
 | 
						|
    "shown"
 | 
						|
  );
 | 
						|
  EventUtils.synthesizeMouseAtCenter(bookmarkButton, {}, win);
 | 
						|
  await hiddenPromise;
 | 
						|
  await showPromise;
 | 
						|
  win.StarUI.panel.hidePopup();
 | 
						|
 | 
						|
  // Open the panel again.
 | 
						|
  await promisePageActionPanelOpen(win);
 | 
						|
 | 
						|
  // The bookmark button should now read "Edit This Bookmark…" and be starred.
 | 
						|
  await TestUtils.waitForCondition(
 | 
						|
    () => bookmarkButton.label === "Edit This Bookmark…"
 | 
						|
  );
 | 
						|
  Assert.ok(bookmarkButton.hasAttribute("starred"));
 | 
						|
  Assert.equal(bookmarkButton.getAttribute("starred"), "true");
 | 
						|
 | 
						|
  // Click it again.
 | 
						|
  hiddenPromise = promisePageActionPanelHidden(win);
 | 
						|
  showPromise = BrowserTestUtils.waitForPopupEvent(win.StarUI.panel, "shown");
 | 
						|
  EventUtils.synthesizeMouseAtCenter(bookmarkButton, {}, win);
 | 
						|
  await hiddenPromise;
 | 
						|
  await showPromise;
 | 
						|
 | 
						|
  let onItemRemovedPromise = PlacesTestUtils.waitForNotification(
 | 
						|
    "bookmark-removed",
 | 
						|
    events => events.some(event => event.url == url)
 | 
						|
  );
 | 
						|
 | 
						|
  // Click the remove-bookmark button in the panel.
 | 
						|
  win.StarUI._element("editBookmarkPanelRemoveButton").click();
 | 
						|
 | 
						|
  // Wait for the bookmark to be removed before continuing.
 | 
						|
  await onItemRemovedPromise;
 | 
						|
 | 
						|
  // Open the panel again.
 | 
						|
  await promisePageActionPanelOpen(win);
 | 
						|
 | 
						|
  // The bookmark button should read "Bookmark Current Tab…" and not be starred.
 | 
						|
  await TestUtils.waitForCondition(
 | 
						|
    () => bookmarkButton.label === "Bookmark Current Tab…"
 | 
						|
  );
 | 
						|
  Assert.ok(!bookmarkButton.hasAttribute("starred"));
 | 
						|
 | 
						|
  // Done.
 | 
						|
  hiddenPromise = promisePageActionPanelHidden();
 | 
						|
  win.BrowserPageActions.panelNode.hidePopup();
 | 
						|
  await hiddenPromise;
 | 
						|
 | 
						|
  info("Remove the extension");
 | 
						|
  let promiseUninstalled = promiseAddonUninstalled(extension.id);
 | 
						|
  await extension.unload();
 | 
						|
  await promiseUninstalled;
 | 
						|
 | 
						|
  await promiseStableResize(originalOuterWidth, win);
 | 
						|
  await BrowserTestUtils.closeWindow(win);
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function test_disabledPageAction_hidden_in_protonOverflowMenu() {
 | 
						|
  // Make sure the overflow menu urlbar button is visible (indipendently from
 | 
						|
  // the current size of the Firefox window).
 | 
						|
  BrowserPageActions.mainButtonNode.style.visibility = "visible";
 | 
						|
  registerCleanupFunction(() => {
 | 
						|
    BrowserPageActions.mainButtonNode.style.removeProperty("visibility");
 | 
						|
  });
 | 
						|
 | 
						|
  const extension = ExtensionTestUtils.loadExtension({
 | 
						|
    manifest: { page_action: {} },
 | 
						|
    async background() {
 | 
						|
      const { browser } = this;
 | 
						|
      const [tab] = await browser.tabs.query({
 | 
						|
        active: true,
 | 
						|
        currentWindow: true,
 | 
						|
      });
 | 
						|
      browser.test.assertTrue(tab, "Got an active tab as expected");
 | 
						|
      browser.test.onMessage.addListener(async msg => {
 | 
						|
        switch (msg) {
 | 
						|
          case "show-pageAction":
 | 
						|
            await browser.pageAction.show(tab.id);
 | 
						|
            break;
 | 
						|
          case "hide-pageAction":
 | 
						|
            await browser.pageAction.hide(tab.id);
 | 
						|
            break;
 | 
						|
          default:
 | 
						|
            browser.test.fail(`Unexpected message received: ${msg}`);
 | 
						|
        }
 | 
						|
        browser.test.sendMessage(`${msg}:done`);
 | 
						|
      });
 | 
						|
    },
 | 
						|
  });
 | 
						|
 | 
						|
  // eslint-disable-next-line @microsoft/sdl/no-insecure-url
 | 
						|
  await BrowserTestUtils.withNewTab("http://example.com", async browser => {
 | 
						|
    const win = browser.ownerGlobal;
 | 
						|
    const promisePageActionPanelClosed = async () => {
 | 
						|
      let popupHiddenPromise = promisePageActionPanelHidden(win);
 | 
						|
      win.BrowserPageActions.panelNode.hidePopup();
 | 
						|
      await popupHiddenPromise;
 | 
						|
    };
 | 
						|
 | 
						|
    await extension.startup();
 | 
						|
    const widgetId = ExtensionCommon.makeWidgetId(extension.id);
 | 
						|
 | 
						|
    info(
 | 
						|
      "Show pageAction and verify it is visible in the urlbar overflow menu"
 | 
						|
    );
 | 
						|
    extension.sendMessage("show-pageAction");
 | 
						|
    await extension.awaitMessage("show-pageAction:done");
 | 
						|
    await promisePageActionPanelOpen(win);
 | 
						|
    let pageActionNode =
 | 
						|
      win.BrowserPageActions.panelButtonNodeForActionID(widgetId);
 | 
						|
    ok(
 | 
						|
      pageActionNode && BrowserTestUtils.isVisible(pageActionNode),
 | 
						|
      "enabled pageAction should be visible in the urlbar overflow menu"
 | 
						|
    );
 | 
						|
 | 
						|
    info("Hide pageAction and verify it is hidden in the urlbar overflow menu");
 | 
						|
    extension.sendMessage("hide-pageAction");
 | 
						|
    await extension.awaitMessage("hide-pageAction:done");
 | 
						|
 | 
						|
    await BrowserTestUtils.waitForCondition(
 | 
						|
      () => !win.BrowserPageActions.panelButtonNodeForActionID(widgetId),
 | 
						|
      "Wait for the disabled pageAction to be removed from the urlbar overflow menu"
 | 
						|
    );
 | 
						|
 | 
						|
    await promisePageActionPanelClosed();
 | 
						|
 | 
						|
    info("Reopen the urlbar overflow menu");
 | 
						|
    await promisePageActionPanelOpen(win);
 | 
						|
    ok(
 | 
						|
      !win.BrowserPageActions.panelButtonNodeForActionID(widgetId),
 | 
						|
      "Disabled pageAction is still removed as expected"
 | 
						|
    );
 | 
						|
 | 
						|
    await promisePageActionPanelClosed();
 | 
						|
    await extension.unload();
 | 
						|
  });
 | 
						|
 | 
						|
  await SpecialPowers.popPrefEnv();
 | 
						|
});
 |