Backed out changeset 6c464eede88a (bug 1405031) for browser_ext_pageAction_click_types.js failures CLOSED TREE

This commit is contained in:
Bogdan Tara 2019-09-20 01:03:17 +03:00
parent 3017be71f8
commit ecffbb2d40
14 changed files with 35 additions and 700 deletions

View File

@ -9,7 +9,6 @@ module.exports = {
"Window": true,
"actionContextMenu": true,
"browserActionFor": true,
"clickModifiersFromEvent": true,
"getContainerForCookieStoreId": true,
"getDevToolsTargetForContext": true,
"getInspectedWindowFront": true,

View File

@ -125,24 +125,6 @@ global.makeWidgetId = id => {
return id.replace(/[^a-z0-9_-]/g, "_");
};
global.clickModifiersFromEvent = event => {
const map = {
shiftKey: "Shift",
altKey: "Alt",
metaKey: "Command",
ctrlKey: "Ctrl",
};
let modifiers = Object.keys(map)
.filter(key => event[key])
.map(key => map[key]);
if (event.ctrlKey && AppConstants.platform === "macosx") {
modifiers.push("MacCtrl");
}
return modifiers;
};
global.waitForTabLoaded = (tab, url) => {
return new Promise(resolve => {
windowTracker.addListener("progress", {

View File

@ -200,8 +200,6 @@ this.browserAction = class extends ExtensionAPI {
node.onmousedown = event => this.handleEvent(event);
node.onmouseover = event => this.handleEvent(event);
node.onmouseout = event => this.handleEvent(event);
node.onkeypress = event => this.handleEvent(event);
node.onmouseup = event => this.handleMouseUp(event);
this.updateButton(node, this.globals, true);
},
@ -282,7 +280,7 @@ this.browserAction = class extends ExtensionAPI {
*/
async triggerAction(window) {
let popup = ViewPopup.for(this.extension, window);
if (!this.pendingPopup && popup) {
if (popup) {
popup.closePopup();
return;
}
@ -309,27 +307,10 @@ this.browserAction = class extends ExtensionAPI {
widget.node.dispatchEvent(event);
} else {
this.tabManager.addActiveTabPermission(tab);
this.lastClickInfo = { button: 0, modifiers: [] };
this.emit("click");
}
}
handleMouseUp(event) {
let window = event.target.ownerGlobal;
this.lastClickInfo = {
button: event.button,
modifiers: clickModifiersFromEvent(event),
};
if (event.button === 1) {
let { gBrowser } = window;
if (this.getProperty(gBrowser.selectedTab, "enabled")) {
this.emit("click", gBrowser.selectedBrowser);
}
}
}
handleEvent(event) {
let button = event.target;
let window = button.ownerGlobal;
@ -431,15 +412,6 @@ this.browserAction = class extends ExtensionAPI {
});
}
break;
case "keypress":
if (event.key === " " || event.key === "Enter") {
this.lastClickInfo = {
button: 0,
modifiers: clickModifiersFromEvent(event),
};
}
break;
}
}
@ -788,10 +760,7 @@ this.browserAction = class extends ExtensionAPI {
register: fire => {
let listener = (event, browser) => {
context.withPendingBrowser(browser, () =>
fire.sync(
tabManager.convert(tabTracker.activeTab),
browserAction.lastClickInfo
)
fire.sync(tabManager.convert(tabTracker.activeTab))
);
};
browserAction.on("click", listener);

View File

@ -445,7 +445,19 @@ var gMenuBuilder = {
}
let info = item.getClickInfo(contextData, wasChecked);
info.modifiers = clickModifiersFromEvent(event);
const map = {
shiftKey: "Shift",
altKey: "Alt",
metaKey: "Command",
ctrlKey: "Ctrl",
};
info.modifiers = Object.keys(map)
.filter(key => event[key])
.map(key => map[key]);
if (event.ctrlKey && AppConstants.platform === "macosx") {
info.modifiers.push("MacCtrl");
}
info.button = button;

View File

@ -96,28 +96,6 @@ this.pageAction = class extends ExtensionAPI {
this.lastValues = new DefaultWeakMap(() => ({}));
if (!this.browserPageAction) {
let onPlacedHandler = (buttonNode, isPanel) => {
// eslint-disable-next-line mozilla/balanced-listeners
buttonNode.addEventListener("auxclick", event => {
if (event.button !== 1 || event.target.disabled) {
return;
}
this.lastClickInfo = {
button: event.button,
modifiers: clickModifiersFromEvent(event),
};
// The panel is not automatically closed when middle-clicked.
if (isPanel) {
buttonNode.closest("#pageActionPanel").hidePopup();
}
let window = event.target.ownerGlobal;
let tab = window.gBrowser.selectedTab;
this.emit("click", tab);
});
};
this.browserPageAction = PageActions.addAction(
new PageActions.Action({
id: widgetId,
@ -127,10 +105,6 @@ this.pageAction = class extends ExtensionAPI {
pinnedToUrlbar: this.defaults.pinned,
disabled: !this.defaults.show,
onCommand: (event, buttonNode) => {
this.lastClickInfo = {
button: event.button || 0,
modifiers: clickModifiersFromEvent(event),
};
this.handleClick(event.target.ownerGlobal);
},
onBeforePlacedInWindow: browserWindow => {
@ -141,8 +115,6 @@ this.pageAction = class extends ExtensionAPI {
browserWindow.document.addEventListener("popupshowing", this);
}
},
onPlacedInPanel: buttonNode => onPlacedHandler(buttonNode, true),
onPlacedInUrlbar: buttonNode => onPlacedHandler(buttonNode, false),
onRemovedFromWindow: browserWindow => {
browserWindow.document.removeEventListener("popupshowing", this);
},
@ -278,7 +250,6 @@ this.pageAction = class extends ExtensionAPI {
*/
triggerAction(window) {
if (this.isShown(window.gBrowser.selectedTab)) {
this.lastClickInfo = { button: 0, modifiers: [] };
this.handleClick(window);
}
}
@ -409,7 +380,7 @@ this.pageAction = class extends ExtensionAPI {
register: fire => {
let listener = (evt, tab) => {
context.withPendingBrowser(tab.linkedBrowser, () =>
fire.sync(tabManager.convert(tab), this.lastClickInfo)
fire.sync(tabManager.convert(tab))
);
};

View File

@ -104,26 +104,6 @@
{"$ref": "ColorArray"},
{"type": "null"}
]
},
{
"id": "OnClickData",
"type": "object",
"description": "Information sent when a browser action is clicked.",
"properties": {
"modifiers": {
"type": "array",
"items": {
"type": "string",
"enum": ["Shift", "Alt", "Command", "Ctrl", "MacCtrl"]
},
"description": "An array of keyboard modifiers that were held while the menu item was clicked."
},
"button": {
"type": "integer",
"optional": true,
"description": "An integer value of button by which menu item was clicked."
}
}
}
],
"functions": [
@ -468,11 +448,6 @@
{
"name": "tab",
"$ref": "tabs.Tab"
},
{
"name": "info",
"$ref": "OnClickData",
"optional": true
}
]
}

View File

@ -54,26 +54,6 @@
"optional": true
}
}
},
{
"id": "OnClickData",
"type": "object",
"description": "Information sent when a page action is clicked.",
"properties": {
"modifiers": {
"type": "array",
"items": {
"type": "string",
"enum": ["Shift", "Alt", "Command", "Ctrl", "MacCtrl"]
},
"description": "An array of keyboard modifiers that were held while the menu item was clicked."
},
"button": {
"type": "integer",
"optional": true,
"description": "An integer value of button by which menu item was clicked."
}
}
}
]
},
@ -304,11 +284,6 @@
{
"name": "tab",
"$ref": "tabs.Tab"
},
{
"name": "info",
"$ref": "OnClickData",
"optional": true
}
]
}

View File

@ -53,7 +53,6 @@ disabled = bug 1438663 # same focus issue as Bug 1438663
[browser_ext_autoplayInBackground.js]
[browser_ext_browserAction_area.js]
[browser_ext_browserAction_experiment.js]
[browser_ext_browserAction_click_types.js]
[browser_ext_browserAction_context.js]
skip-if = os == 'linux' && debug # Bug 1504096
[browser_ext_browserAction_contextMenu.js]
@ -156,7 +155,6 @@ skip-if = (verify && !debug && (os == 'linux' || os == 'mac'))
[browser_ext_optionsPage_modals.js]
[browser_ext_optionsPage_popups.js]
[browser_ext_optionsPage_privileges.js]
[browser_ext_pageAction_click_types.js]
[browser_ext_pageAction_context.js]
skip-if = (verify && !debug && (os == 'linux'))
[browser_ext_pageAction_contextMenu.js]

View File

@ -1,149 +0,0 @@
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
add_task(async function test_clickData() {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
browser_action: {},
},
background() {
function onClicked(tab, info) {
let button = info.button;
let modifiers = info.modifiers;
browser.test.sendMessage("onClick", { button, modifiers });
}
browser.browserAction.onClicked.addListener(onClicked);
browser.test.sendMessage("ready");
},
});
const map = {
shiftKey: "Shift",
altKey: "Alt",
metaKey: "Command",
ctrlKey: "Ctrl",
};
function assertSingleModifier(info, modifier, area) {
if (modifier === "ctrlKey" && AppConstants.platform === "macosx") {
is(
info.modifiers.length,
2,
`MacCtrl modifier with control click on Mac`
);
is(
info.modifiers[1],
"MacCtrl",
`MacCtrl modifier with control click on Mac`
);
} else {
is(
info.modifiers.length,
1,
`No unnecessary modifiers for exactly one key on event`
);
}
is(info.modifiers[0], map[modifier], `Correct modifier on ${area} click`);
}
await extension.startup();
await extension.awaitMessage("ready");
for (let area of [CustomizableUI.AREA_NAVBAR, getCustomizableUIPanelID()]) {
let widget = getBrowserActionWidget(extension);
CustomizableUI.addWidgetToArea(widget.id, area);
for (let modifier of Object.keys(map)) {
for (let i = 0; i < 2; i++) {
let clickEventData = { button: i };
clickEventData[modifier] = true;
await clickBrowserAction(extension, window, clickEventData);
let info = await extension.awaitMessage("onClick");
is(info.button, i, `Correct button in ${area} click`);
assertSingleModifier(info, modifier, area);
}
let keypressEventData = {};
keypressEventData[modifier] = true;
await triggerBrowserActionWithKeyboard(
extension,
"KEY_Enter",
keypressEventData
);
let info = await extension.awaitMessage("onClick");
is(info.button, 0, `Key command emulates left click`);
assertSingleModifier(info, modifier, area);
}
}
await extension.unload();
});
add_task(async function test_clickData_reset() {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
browser_action: {},
page_action: {},
},
async background() {
function onBrowserActionClicked(tab, info) {
browser.test.sendMessage("onClick", info);
}
function onPageActionClicked(tab, info) {
// openPopup requires user interaction, such as a page action click.
browser.browserAction.openPopup();
}
browser.browserAction.onClicked.addListener(onBrowserActionClicked);
browser.pageAction.onClicked.addListener(onPageActionClicked);
let [tab] = await browser.tabs.query({
active: true,
currentWindow: true,
});
await browser.pageAction.show(tab.id);
browser.test.sendMessage("ready");
},
});
// Pollute the state of the browserAction's lastClickInfo
async function clickBrowserActionWithModifiers() {
await clickBrowserAction(extension, window, { button: 1, shiftKey: true });
let info = await extension.awaitMessage("onClick");
is(info.button, 1);
is(info.modifiers[0], "Shift");
}
function assertInfoReset(info) {
is(info.button, 0, `ClickData button reset properly`);
is(info.modifiers.length, 0, `ClickData modifiers reset properly`);
}
await extension.startup();
await extension.awaitMessage("ready");
await clickBrowserActionWithModifiers();
await clickPageAction(extension);
assertInfoReset(await extension.awaitMessage("onClick"));
await clickBrowserActionWithModifiers();
await triggerBrowserActionWithKeyboard(extension, "KEY_Enter");
assertInfoReset(await extension.awaitMessage("onClick"));
await clickBrowserActionWithModifiers();
await triggerBrowserActionWithKeyboard(extension, " ");
assertInfoReset(await extension.awaitMessage("onClick"));
await extension.unload();
});

View File

@ -55,23 +55,6 @@ add_task(async function testDisabled() {
extension.sendMessage("check-clicked", false);
await extension.awaitMessage("next-test");
await clickBrowserAction(extension, window, { button: 1 });
await new Promise(resolve => setTimeout(resolve, 0));
extension.sendMessage("check-clicked", false);
await extension.awaitMessage("next-test");
let widget = getBrowserActionWidget(extension);
CustomizableUI.addWidgetToArea(widget.id, getCustomizableUIPanelID());
await clickBrowserAction(extension, window, { button: 1 });
await new Promise(resolve => setTimeout(resolve, 0));
extension.sendMessage("check-clicked", false);
await extension.awaitMessage("next-test");
CustomizableUI.addWidgetToArea(widget.id, CustomizableUI.AREA_NAVBAR);
extension.sendMessage("enable");
await extension.awaitMessage("next-test");

View File

@ -53,12 +53,8 @@ let scriptPage = url =>
async function testInArea(area) {
let extension = ExtensionTestUtils.loadExtension({
background() {
let middleClickShowPopup = false;
browser.browserAction.onClicked.addListener((tabs, info) => {
browser.browserAction.onClicked.addListener(() => {
browser.test.sendMessage("browserAction-onClicked");
if (info.button === 1 && middleClickShowPopup) {
browser.browserAction.openPopup();
}
});
browser.test.onMessage.addListener(async msg => {
@ -76,9 +72,6 @@ async function testInArea(area) {
}
await browser.browserAction.setPopup(opts);
browser.test.sendMessage("setBrowserActionPopup:done");
} else if (msg.type === "setMiddleClickShowPopup") {
middleClickShowPopup = msg.show;
browser.test.sendMessage("setMiddleClickShowPopup:done");
}
});
@ -139,11 +132,6 @@ async function testInArea(area) {
await extension.awaitMessage("setBrowserActionPopup:done");
}
async function setShowPopupOnMiddleClick(show) {
extension.sendMessage({ type: "setMiddleClickShowPopup", show });
await extension.awaitMessage("setMiddleClickShowPopup:done");
}
async function runTest({
actionType,
waitForPopupLoaded,
@ -160,12 +148,6 @@ async function testInArea(area) {
clickBrowserAction(extension);
} else if (actionType === "trigger") {
getBrowserAction(extension).triggerAction(window);
} else if (actionType === "middleClick") {
clickBrowserAction(extension, window, { button: 1 });
}
if (expectOnClicked) {
await extension.awaitMessage("browserAction-onClicked");
}
if (expectPopup) {
@ -175,6 +157,8 @@ async function testInArea(area) {
expectPopup,
"expected popup opened"
);
} else if (expectOnClicked) {
await extension.awaitMessage("browserAction-onClicked");
}
await oncePopupLoaded;
@ -266,30 +250,6 @@ async function testInArea(area) {
closePopup: true,
});
},
async () => {
info(`Middle-click browser action, expect an event only.`);
await setShowPopupOnMiddleClick(false);
await runTest({
actionType: "middleClick",
expectOnClicked: true,
});
},
async () => {
info(
`Middle-click browser action again, expect a click event then a popup.`
);
await setShowPopupOnMiddleClick(true);
await runTest({
actionType: "middleClick",
expectOnClicked: true,
expectPopup: "popup-b",
closePopup: true,
});
},
async () => {
info(`Clear popup URL. Click browser action. Expect click event.`);

View File

@ -1,211 +0,0 @@
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
add_task(async function test_clickData() {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
page_action: {},
},
async background() {
function onClicked(tab, info) {
let button = info.button;
let modifiers = info.modifiers;
browser.test.sendMessage("onClick", { button, modifiers });
}
browser.pageAction.onClicked.addListener(onClicked);
let [tab] = await browser.tabs.query({
active: true,
currentWindow: true,
});
await browser.pageAction.show(tab.id);
browser.test.sendMessage("ready");
},
});
const map = {
shiftKey: "Shift",
altKey: "Alt",
metaKey: "Command",
ctrlKey: "Ctrl",
};
function assertSingleModifier(info, modifier) {
if (modifier === "ctrlKey" && AppConstants.platform === "macosx") {
is(
info.modifiers.length,
2,
`MacCtrl modifier with control click on Mac`
);
is(
info.modifiers[1],
"MacCtrl",
`MacCtrl modifier with control click on Mac`
);
} else {
is(
info.modifiers.length,
1,
`No unnecessary modifiers for exactly one key on event`
);
}
is(info.modifiers[0], map[modifier], `Correct modifier on click event`);
}
async function testClickPageAction(doClick, doEnterKey) {
for (let modifier of Object.keys(map)) {
for (let i = 0; i < 2; i++) {
let clickEventData = { button: i };
clickEventData[modifier] = true;
await doClick(extension, window, clickEventData);
let info = await extension.awaitMessage("onClick");
is(info.button, i, `Correct button on click event`);
assertSingleModifier(info, modifier);
}
let keypressEventData = {};
keypressEventData[modifier] = true;
await doEnterKey(extension, keypressEventData);
let info = await extension.awaitMessage("onClick");
is(info.button, 0, `Key command emulates left click`);
assertSingleModifier(info, modifier);
}
}
await extension.startup();
await extension.awaitMessage("ready");
await testClickPageAction(clickPageAction, triggerPageActionWithKeyboard);
await testClickPageAction(
clickPageActionInPanel,
triggerPageActionWithKeyboardInPanel
);
await extension.unload();
});
add_task(async function test_clickData_reset() {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
browser_action: {},
page_action: {},
},
async background() {
function onBrowserActionClicked(tab, info) {
// openPopup requires user interaction, such as a browser action click.
browser.pageAction.openPopup();
}
function onPageActionClicked(tab, info) {
browser.test.sendMessage("onClick", info);
}
browser.browserAction.onClicked.addListener(onBrowserActionClicked);
browser.pageAction.onClicked.addListener(onPageActionClicked);
let [tab] = await browser.tabs.query({
active: true,
currentWindow: true,
});
await browser.pageAction.show(tab.id);
browser.test.sendMessage("ready");
},
});
async function clickPageActionWithModifiers() {
await clickPageAction(extension, window, { button: 1, shiftKey: true });
let info = await extension.awaitMessage("onClick");
is(info.button, 1);
is(info.modifiers[0], "Shift");
}
function assertInfoReset(info) {
is(info.button, 0, `ClickData button reset properly`);
is(info.modifiers.length, 0, `ClickData modifiers reset properly`);
}
await extension.startup();
await extension.awaitMessage("ready");
await clickPageActionWithModifiers();
await clickBrowserAction(extension);
assertInfoReset(await extension.awaitMessage("onClick"));
await clickPageActionWithModifiers();
await triggerPageActionWithKeyboard(extension);
assertInfoReset(await extension.awaitMessage("onClick"));
await extension.unload();
});
add_task(async function test_click_disabled() {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
page_action: {},
},
background() {
let expectClick = false;
function onClicked(tab, info) {
if (expectClick) {
browser.test.sendMessage("onClick");
} else {
browser.test.fail(
`Unexpected click on disabled page action, button=${info.button}`
);
}
}
async function onMessage(msg, toggle) {
if (msg == "hide" || msg == "show") {
expectClick = msg == "show";
let [tab] = await browser.tabs.query({
active: true,
currentWindow: true,
});
if (expectClick) {
await browser.pageAction.show(tab.id);
} else {
await browser.pageAction.hide(tab.id);
}
browser.test.sendMessage("visibilitySet");
} else {
browser.test.fail("Unexpected message");
}
}
browser.pageAction.onClicked.addListener(onClicked);
browser.test.onMessage.addListener(onMessage);
browser.test.sendMessage("ready");
},
});
await extension.startup();
await extension.awaitMessage("ready");
extension.sendMessage("hide");
await extension.awaitMessage("visibilitySet");
await clickPageActionInPanel(extension, window, { button: 0 });
await clickPageActionInPanel(extension, window, { button: 1 });
extension.sendMessage("show");
await extension.awaitMessage("visibilitySet");
await clickPageActionInPanel(extension, window, { button: 0 });
await extension.awaitMessage("onClick");
await clickPageActionInPanel(extension, window, { button: 1 });
await extension.awaitMessage("onClick");
await extension.unload();
});

View File

@ -78,13 +78,6 @@ add_task(async function testPageActionPopup() {
() => {
sendClick({ expectEvent: false, expectPopup: "b" });
},
() => {
sendClick({
expectEvent: true,
expectPopup: "b",
middleClick: true,
});
},
() => {
browser.pageAction.setPopup({ tabId, popup: "" });
sendClick({ expectEvent: true, expectPopup: null });
@ -116,15 +109,9 @@ add_task(async function testPageActionPopup() {
];
let expect = {};
sendClick = ({
expectEvent,
expectPopup,
runNextTest,
middleClick,
}) => {
sendClick = ({ expectEvent, expectPopup, runNextTest }) => {
expect = { event: expectEvent, popup: expectPopup, runNextTest };
browser.test.sendMessage("send-click", middleClick ? 1 : 0);
browser.test.sendMessage("send-click");
};
browser.runtime.onMessage.addListener(msg => {
@ -149,19 +136,14 @@ add_task(async function testPageActionPopup() {
}
});
browser.pageAction.onClicked.addListener((tab, info) => {
browser.pageAction.onClicked.addListener(() => {
if (expect.event) {
browser.test.succeed("expected click event received");
} else {
browser.test.fail("unexpected click event");
}
expect.event = false;
if (info.button == 1) {
browser.pageAction.openPopup();
return;
}
browser.test.sendMessage("next-test");
});
@ -175,18 +157,6 @@ add_task(async function testPageActionPopup() {
browser.test.fail("Expecting 'next-test' message");
}
if (expect.event) {
browser.test.fail(
"Expecting click event before next test but none occurred"
);
}
if (expect.popup) {
browser.test.fail(
"Expecting popup before next test but none were shown"
);
}
if (tests.length) {
let test = tests.shift();
test();
@ -207,8 +177,8 @@ add_task(async function testPageActionPopup() {
},
});
extension.onMessage("send-click", button => {
clickPageAction(extension, window, { button });
extension.onMessage("send-click", () => {
clickPageAction(extension);
});
let pageActionId, panelId;

View File

@ -4,9 +4,7 @@
/* exported CustomizableUI makeWidgetId focusWindow forceGC
* getBrowserActionWidget
* clickBrowserAction clickPageAction clickPageActionInPanel
* triggerPageActionWithKeyboard triggerPageActionWithKeyboardInPanel
* triggerBrowserActionWithKeyboard
* clickBrowserAction clickPageAction
* getBrowserActionPopup getPageActionPopup getPageActionButton
* openBrowserActionPanel
* closeBrowserAction closePageAction
@ -287,19 +285,10 @@ function alterContent(browser, task, arg = null) {
}
function getPanelForNode(node) {
return node.closest("panel");
}
async function focusButtonAndPressKey(key, elem, modifiers) {
let focused = BrowserTestUtils.waitForEvent(elem, "focus", true);
elem.setAttribute("tabindex", "-1");
elem.focus();
elem.removeAttribute("tabindex");
await focused;
EventUtils.synthesizeKey(key, modifiers);
elem.blur();
while (node.localName != "panel") {
node = node.parentNode;
}
return node;
}
var awaitBrowserLoaded = browser =>
@ -368,31 +357,13 @@ var showBrowserAction = async function(extension, win = window) {
}
};
async function clickBrowserAction(extension, win = window, modifiers) {
var clickBrowserAction = async function(extension, win = window) {
await promiseAnimationFrame(win);
await showBrowserAction(extension, win);
let widget = getBrowserActionWidget(extension).forWindow(win);
if (modifiers) {
EventUtils.synthesizeMouseAtCenter(widget.node, modifiers, win);
} else {
widget.node.click();
}
}
async function triggerBrowserActionWithKeyboard(
extension,
key = "KEY_Enter",
modifiers = {},
win = window
) {
await promiseAnimationFrame(win);
await showBrowserAction(extension, win);
let node = getBrowserActionWidget(extension).forWindow(win).node;
await focusButtonAndPressKey(key, node, modifiers);
}
widget.node.click();
};
function closeBrowserAction(extension, win = window) {
let group = getBrowserActionWidget(extension);
@ -689,79 +660,9 @@ async function getPageActionButton(extension, win = window) {
return win.document.getElementById(pageActionId);
}
async function clickPageAction(extension, win = window, modifiers = {}) {
async function clickPageAction(extension, win = window) {
let elem = await getPageActionButton(extension, win);
EventUtils.synthesizeMouseAtCenter(elem, modifiers, win);
return new Promise(SimpleTest.executeSoon);
}
// Shows the popup for the page action which for lists
// all available page actions
async function showPageActionsPanel(win = window) {
// See the comment at getPageActionButton
SetPageProxyState("valid");
await promiseAnimationFrame(win);
let pageActionsPopup = win.document.getElementById("pageActionPanel");
let popupShownPromise = promisePopupShown(pageActionsPopup);
EventUtils.synthesizeMouseAtCenter(
win.document.getElementById("pageActionButton"),
{},
win
);
await popupShownPromise;
return pageActionsPopup;
}
async function clickPageActionInPanel(extension, win = window, modifiers = {}) {
let pageActionsPopup = await showPageActionsPanel(win);
let pageActionId = BrowserPageActions.panelButtonNodeIDForActionID(
makeWidgetId(extension.id)
);
let popupHiddenPromise = promisePopupHidden(pageActionsPopup);
let widgetButton = win.document.getElementById(pageActionId);
EventUtils.synthesizeMouseAtCenter(widgetButton, modifiers, win);
if (widgetButton.disabled) {
pageActionsPopup.hidePopup();
}
await popupHiddenPromise;
return new Promise(SimpleTest.executeSoon);
}
async function triggerPageActionWithKeyboard(
extension,
modifiers = {},
win = window
) {
let elem = await getPageActionButton(extension, win);
await focusButtonAndPressKey("KEY_Enter", elem, modifiers);
return new Promise(SimpleTest.executeSoon);
}
async function triggerPageActionWithKeyboardInPanel(
extension,
modifiers = {},
win = window
) {
let pageActionsPopup = await showPageActionsPanel(win);
let pageActionId = BrowserPageActions.panelButtonNodeIDForActionID(
makeWidgetId(extension.id)
);
let popupHiddenPromise = promisePopupHidden(pageActionsPopup);
let widgetButton = win.document.getElementById(pageActionId);
await focusButtonAndPressKey("KEY_Enter", widgetButton, modifiers);
if (widgetButton.disabled) {
pageActionsPopup.hidePopup();
}
await popupHiddenPromise;
EventUtils.synthesizeMouseAtCenter(elem, {}, win);
return new Promise(SimpleTest.executeSoon);
}