mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 01:05:45 +00:00
Backed out changeset 6c464eede88a (bug 1405031) for browser_ext_pageAction_click_types.js failures CLOSED TREE
This commit is contained in:
parent
3017be71f8
commit
ecffbb2d40
@ -9,7 +9,6 @@ module.exports = {
|
|||||||
"Window": true,
|
"Window": true,
|
||||||
"actionContextMenu": true,
|
"actionContextMenu": true,
|
||||||
"browserActionFor": true,
|
"browserActionFor": true,
|
||||||
"clickModifiersFromEvent": true,
|
|
||||||
"getContainerForCookieStoreId": true,
|
"getContainerForCookieStoreId": true,
|
||||||
"getDevToolsTargetForContext": true,
|
"getDevToolsTargetForContext": true,
|
||||||
"getInspectedWindowFront": true,
|
"getInspectedWindowFront": true,
|
||||||
|
@ -125,24 +125,6 @@ global.makeWidgetId = id => {
|
|||||||
return id.replace(/[^a-z0-9_-]/g, "_");
|
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) => {
|
global.waitForTabLoaded = (tab, url) => {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
windowTracker.addListener("progress", {
|
windowTracker.addListener("progress", {
|
||||||
|
@ -200,8 +200,6 @@ this.browserAction = class extends ExtensionAPI {
|
|||||||
node.onmousedown = event => this.handleEvent(event);
|
node.onmousedown = event => this.handleEvent(event);
|
||||||
node.onmouseover = event => this.handleEvent(event);
|
node.onmouseover = event => this.handleEvent(event);
|
||||||
node.onmouseout = 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);
|
this.updateButton(node, this.globals, true);
|
||||||
},
|
},
|
||||||
@ -282,7 +280,7 @@ this.browserAction = class extends ExtensionAPI {
|
|||||||
*/
|
*/
|
||||||
async triggerAction(window) {
|
async triggerAction(window) {
|
||||||
let popup = ViewPopup.for(this.extension, window);
|
let popup = ViewPopup.for(this.extension, window);
|
||||||
if (!this.pendingPopup && popup) {
|
if (popup) {
|
||||||
popup.closePopup();
|
popup.closePopup();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -309,27 +307,10 @@ this.browserAction = class extends ExtensionAPI {
|
|||||||
widget.node.dispatchEvent(event);
|
widget.node.dispatchEvent(event);
|
||||||
} else {
|
} else {
|
||||||
this.tabManager.addActiveTabPermission(tab);
|
this.tabManager.addActiveTabPermission(tab);
|
||||||
this.lastClickInfo = { button: 0, modifiers: [] };
|
|
||||||
this.emit("click");
|
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) {
|
handleEvent(event) {
|
||||||
let button = event.target;
|
let button = event.target;
|
||||||
let window = button.ownerGlobal;
|
let window = button.ownerGlobal;
|
||||||
@ -431,15 +412,6 @@ this.browserAction = class extends ExtensionAPI {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
break;
|
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 => {
|
register: fire => {
|
||||||
let listener = (event, browser) => {
|
let listener = (event, browser) => {
|
||||||
context.withPendingBrowser(browser, () =>
|
context.withPendingBrowser(browser, () =>
|
||||||
fire.sync(
|
fire.sync(tabManager.convert(tabTracker.activeTab))
|
||||||
tabManager.convert(tabTracker.activeTab),
|
|
||||||
browserAction.lastClickInfo
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
browserAction.on("click", listener);
|
browserAction.on("click", listener);
|
||||||
|
@ -445,7 +445,19 @@ var gMenuBuilder = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let info = item.getClickInfo(contextData, wasChecked);
|
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;
|
info.button = button;
|
||||||
|
|
||||||
|
@ -96,28 +96,6 @@ this.pageAction = class extends ExtensionAPI {
|
|||||||
this.lastValues = new DefaultWeakMap(() => ({}));
|
this.lastValues = new DefaultWeakMap(() => ({}));
|
||||||
|
|
||||||
if (!this.browserPageAction) {
|
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(
|
this.browserPageAction = PageActions.addAction(
|
||||||
new PageActions.Action({
|
new PageActions.Action({
|
||||||
id: widgetId,
|
id: widgetId,
|
||||||
@ -127,10 +105,6 @@ this.pageAction = class extends ExtensionAPI {
|
|||||||
pinnedToUrlbar: this.defaults.pinned,
|
pinnedToUrlbar: this.defaults.pinned,
|
||||||
disabled: !this.defaults.show,
|
disabled: !this.defaults.show,
|
||||||
onCommand: (event, buttonNode) => {
|
onCommand: (event, buttonNode) => {
|
||||||
this.lastClickInfo = {
|
|
||||||
button: event.button || 0,
|
|
||||||
modifiers: clickModifiersFromEvent(event),
|
|
||||||
};
|
|
||||||
this.handleClick(event.target.ownerGlobal);
|
this.handleClick(event.target.ownerGlobal);
|
||||||
},
|
},
|
||||||
onBeforePlacedInWindow: browserWindow => {
|
onBeforePlacedInWindow: browserWindow => {
|
||||||
@ -141,8 +115,6 @@ this.pageAction = class extends ExtensionAPI {
|
|||||||
browserWindow.document.addEventListener("popupshowing", this);
|
browserWindow.document.addEventListener("popupshowing", this);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onPlacedInPanel: buttonNode => onPlacedHandler(buttonNode, true),
|
|
||||||
onPlacedInUrlbar: buttonNode => onPlacedHandler(buttonNode, false),
|
|
||||||
onRemovedFromWindow: browserWindow => {
|
onRemovedFromWindow: browserWindow => {
|
||||||
browserWindow.document.removeEventListener("popupshowing", this);
|
browserWindow.document.removeEventListener("popupshowing", this);
|
||||||
},
|
},
|
||||||
@ -278,7 +250,6 @@ this.pageAction = class extends ExtensionAPI {
|
|||||||
*/
|
*/
|
||||||
triggerAction(window) {
|
triggerAction(window) {
|
||||||
if (this.isShown(window.gBrowser.selectedTab)) {
|
if (this.isShown(window.gBrowser.selectedTab)) {
|
||||||
this.lastClickInfo = { button: 0, modifiers: [] };
|
|
||||||
this.handleClick(window);
|
this.handleClick(window);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -409,7 +380,7 @@ this.pageAction = class extends ExtensionAPI {
|
|||||||
register: fire => {
|
register: fire => {
|
||||||
let listener = (evt, tab) => {
|
let listener = (evt, tab) => {
|
||||||
context.withPendingBrowser(tab.linkedBrowser, () =>
|
context.withPendingBrowser(tab.linkedBrowser, () =>
|
||||||
fire.sync(tabManager.convert(tab), this.lastClickInfo)
|
fire.sync(tabManager.convert(tab))
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -104,26 +104,6 @@
|
|||||||
{"$ref": "ColorArray"},
|
{"$ref": "ColorArray"},
|
||||||
{"type": "null"}
|
{"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": [
|
"functions": [
|
||||||
@ -468,11 +448,6 @@
|
|||||||
{
|
{
|
||||||
"name": "tab",
|
"name": "tab",
|
||||||
"$ref": "tabs.Tab"
|
"$ref": "tabs.Tab"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "info",
|
|
||||||
"$ref": "OnClickData",
|
|
||||||
"optional": true
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -54,26 +54,6 @@
|
|||||||
"optional": true
|
"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",
|
"name": "tab",
|
||||||
"$ref": "tabs.Tab"
|
"$ref": "tabs.Tab"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "info",
|
|
||||||
"$ref": "OnClickData",
|
|
||||||
"optional": true
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,6 @@ disabled = bug 1438663 # same focus issue as Bug 1438663
|
|||||||
[browser_ext_autoplayInBackground.js]
|
[browser_ext_autoplayInBackground.js]
|
||||||
[browser_ext_browserAction_area.js]
|
[browser_ext_browserAction_area.js]
|
||||||
[browser_ext_browserAction_experiment.js]
|
[browser_ext_browserAction_experiment.js]
|
||||||
[browser_ext_browserAction_click_types.js]
|
|
||||||
[browser_ext_browserAction_context.js]
|
[browser_ext_browserAction_context.js]
|
||||||
skip-if = os == 'linux' && debug # Bug 1504096
|
skip-if = os == 'linux' && debug # Bug 1504096
|
||||||
[browser_ext_browserAction_contextMenu.js]
|
[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_modals.js]
|
||||||
[browser_ext_optionsPage_popups.js]
|
[browser_ext_optionsPage_popups.js]
|
||||||
[browser_ext_optionsPage_privileges.js]
|
[browser_ext_optionsPage_privileges.js]
|
||||||
[browser_ext_pageAction_click_types.js]
|
|
||||||
[browser_ext_pageAction_context.js]
|
[browser_ext_pageAction_context.js]
|
||||||
skip-if = (verify && !debug && (os == 'linux'))
|
skip-if = (verify && !debug && (os == 'linux'))
|
||||||
[browser_ext_pageAction_contextMenu.js]
|
[browser_ext_pageAction_contextMenu.js]
|
||||||
|
@ -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();
|
|
||||||
});
|
|
@ -55,23 +55,6 @@ add_task(async function testDisabled() {
|
|||||||
extension.sendMessage("check-clicked", false);
|
extension.sendMessage("check-clicked", false);
|
||||||
await extension.awaitMessage("next-test");
|
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");
|
extension.sendMessage("enable");
|
||||||
await extension.awaitMessage("next-test");
|
await extension.awaitMessage("next-test");
|
||||||
|
|
||||||
|
@ -53,12 +53,8 @@ let scriptPage = url =>
|
|||||||
async function testInArea(area) {
|
async function testInArea(area) {
|
||||||
let extension = ExtensionTestUtils.loadExtension({
|
let extension = ExtensionTestUtils.loadExtension({
|
||||||
background() {
|
background() {
|
||||||
let middleClickShowPopup = false;
|
browser.browserAction.onClicked.addListener(() => {
|
||||||
browser.browserAction.onClicked.addListener((tabs, info) => {
|
|
||||||
browser.test.sendMessage("browserAction-onClicked");
|
browser.test.sendMessage("browserAction-onClicked");
|
||||||
if (info.button === 1 && middleClickShowPopup) {
|
|
||||||
browser.browserAction.openPopup();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
browser.test.onMessage.addListener(async msg => {
|
browser.test.onMessage.addListener(async msg => {
|
||||||
@ -76,9 +72,6 @@ async function testInArea(area) {
|
|||||||
}
|
}
|
||||||
await browser.browserAction.setPopup(opts);
|
await browser.browserAction.setPopup(opts);
|
||||||
browser.test.sendMessage("setBrowserActionPopup:done");
|
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");
|
await extension.awaitMessage("setBrowserActionPopup:done");
|
||||||
}
|
}
|
||||||
|
|
||||||
async function setShowPopupOnMiddleClick(show) {
|
|
||||||
extension.sendMessage({ type: "setMiddleClickShowPopup", show });
|
|
||||||
await extension.awaitMessage("setMiddleClickShowPopup:done");
|
|
||||||
}
|
|
||||||
|
|
||||||
async function runTest({
|
async function runTest({
|
||||||
actionType,
|
actionType,
|
||||||
waitForPopupLoaded,
|
waitForPopupLoaded,
|
||||||
@ -160,12 +148,6 @@ async function testInArea(area) {
|
|||||||
clickBrowserAction(extension);
|
clickBrowserAction(extension);
|
||||||
} else if (actionType === "trigger") {
|
} else if (actionType === "trigger") {
|
||||||
getBrowserAction(extension).triggerAction(window);
|
getBrowserAction(extension).triggerAction(window);
|
||||||
} else if (actionType === "middleClick") {
|
|
||||||
clickBrowserAction(extension, window, { button: 1 });
|
|
||||||
}
|
|
||||||
|
|
||||||
if (expectOnClicked) {
|
|
||||||
await extension.awaitMessage("browserAction-onClicked");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (expectPopup) {
|
if (expectPopup) {
|
||||||
@ -175,6 +157,8 @@ async function testInArea(area) {
|
|||||||
expectPopup,
|
expectPopup,
|
||||||
"expected popup opened"
|
"expected popup opened"
|
||||||
);
|
);
|
||||||
|
} else if (expectOnClicked) {
|
||||||
|
await extension.awaitMessage("browserAction-onClicked");
|
||||||
}
|
}
|
||||||
|
|
||||||
await oncePopupLoaded;
|
await oncePopupLoaded;
|
||||||
@ -266,30 +250,6 @@ async function testInArea(area) {
|
|||||||
closePopup: true,
|
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 () => {
|
async () => {
|
||||||
info(`Clear popup URL. Click browser action. Expect click event.`);
|
info(`Clear popup URL. Click browser action. Expect click event.`);
|
||||||
|
|
||||||
|
@ -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();
|
|
||||||
});
|
|
@ -78,13 +78,6 @@ add_task(async function testPageActionPopup() {
|
|||||||
() => {
|
() => {
|
||||||
sendClick({ expectEvent: false, expectPopup: "b" });
|
sendClick({ expectEvent: false, expectPopup: "b" });
|
||||||
},
|
},
|
||||||
() => {
|
|
||||||
sendClick({
|
|
||||||
expectEvent: true,
|
|
||||||
expectPopup: "b",
|
|
||||||
middleClick: true,
|
|
||||||
});
|
|
||||||
},
|
|
||||||
() => {
|
() => {
|
||||||
browser.pageAction.setPopup({ tabId, popup: "" });
|
browser.pageAction.setPopup({ tabId, popup: "" });
|
||||||
sendClick({ expectEvent: true, expectPopup: null });
|
sendClick({ expectEvent: true, expectPopup: null });
|
||||||
@ -116,15 +109,9 @@ add_task(async function testPageActionPopup() {
|
|||||||
];
|
];
|
||||||
|
|
||||||
let expect = {};
|
let expect = {};
|
||||||
sendClick = ({
|
sendClick = ({ expectEvent, expectPopup, runNextTest }) => {
|
||||||
expectEvent,
|
|
||||||
expectPopup,
|
|
||||||
runNextTest,
|
|
||||||
middleClick,
|
|
||||||
}) => {
|
|
||||||
expect = { event: expectEvent, popup: expectPopup, runNextTest };
|
expect = { event: expectEvent, popup: expectPopup, runNextTest };
|
||||||
|
browser.test.sendMessage("send-click");
|
||||||
browser.test.sendMessage("send-click", middleClick ? 1 : 0);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
browser.runtime.onMessage.addListener(msg => {
|
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) {
|
if (expect.event) {
|
||||||
browser.test.succeed("expected click event received");
|
browser.test.succeed("expected click event received");
|
||||||
} else {
|
} else {
|
||||||
browser.test.fail("unexpected click event");
|
browser.test.fail("unexpected click event");
|
||||||
}
|
}
|
||||||
|
|
||||||
expect.event = false;
|
expect.event = false;
|
||||||
|
|
||||||
if (info.button == 1) {
|
|
||||||
browser.pageAction.openPopup();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
browser.test.sendMessage("next-test");
|
browser.test.sendMessage("next-test");
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -175,18 +157,6 @@ add_task(async function testPageActionPopup() {
|
|||||||
browser.test.fail("Expecting 'next-test' message");
|
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) {
|
if (tests.length) {
|
||||||
let test = tests.shift();
|
let test = tests.shift();
|
||||||
test();
|
test();
|
||||||
@ -207,8 +177,8 @@ add_task(async function testPageActionPopup() {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
extension.onMessage("send-click", button => {
|
extension.onMessage("send-click", () => {
|
||||||
clickPageAction(extension, window, { button });
|
clickPageAction(extension);
|
||||||
});
|
});
|
||||||
|
|
||||||
let pageActionId, panelId;
|
let pageActionId, panelId;
|
||||||
|
@ -4,9 +4,7 @@
|
|||||||
|
|
||||||
/* exported CustomizableUI makeWidgetId focusWindow forceGC
|
/* exported CustomizableUI makeWidgetId focusWindow forceGC
|
||||||
* getBrowserActionWidget
|
* getBrowserActionWidget
|
||||||
* clickBrowserAction clickPageAction clickPageActionInPanel
|
* clickBrowserAction clickPageAction
|
||||||
* triggerPageActionWithKeyboard triggerPageActionWithKeyboardInPanel
|
|
||||||
* triggerBrowserActionWithKeyboard
|
|
||||||
* getBrowserActionPopup getPageActionPopup getPageActionButton
|
* getBrowserActionPopup getPageActionPopup getPageActionButton
|
||||||
* openBrowserActionPanel
|
* openBrowserActionPanel
|
||||||
* closeBrowserAction closePageAction
|
* closeBrowserAction closePageAction
|
||||||
@ -287,19 +285,10 @@ function alterContent(browser, task, arg = null) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getPanelForNode(node) {
|
function getPanelForNode(node) {
|
||||||
return node.closest("panel");
|
while (node.localName != "panel") {
|
||||||
}
|
node = node.parentNode;
|
||||||
|
}
|
||||||
async function focusButtonAndPressKey(key, elem, modifiers) {
|
return node;
|
||||||
let focused = BrowserTestUtils.waitForEvent(elem, "focus", true);
|
|
||||||
|
|
||||||
elem.setAttribute("tabindex", "-1");
|
|
||||||
elem.focus();
|
|
||||||
elem.removeAttribute("tabindex");
|
|
||||||
await focused;
|
|
||||||
|
|
||||||
EventUtils.synthesizeKey(key, modifiers);
|
|
||||||
elem.blur();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var awaitBrowserLoaded = browser =>
|
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 promiseAnimationFrame(win);
|
||||||
await showBrowserAction(extension, win);
|
await showBrowserAction(extension, win);
|
||||||
|
|
||||||
let widget = getBrowserActionWidget(extension).forWindow(win);
|
let widget = getBrowserActionWidget(extension).forWindow(win);
|
||||||
|
widget.node.click();
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
function closeBrowserAction(extension, win = window) {
|
function closeBrowserAction(extension, win = window) {
|
||||||
let group = getBrowserActionWidget(extension);
|
let group = getBrowserActionWidget(extension);
|
||||||
@ -689,79 +660,9 @@ async function getPageActionButton(extension, win = window) {
|
|||||||
return win.document.getElementById(pageActionId);
|
return win.document.getElementById(pageActionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function clickPageAction(extension, win = window, modifiers = {}) {
|
async function clickPageAction(extension, win = window) {
|
||||||
let elem = await getPageActionButton(extension, win);
|
let elem = await getPageActionButton(extension, win);
|
||||||
EventUtils.synthesizeMouseAtCenter(elem, modifiers, win);
|
EventUtils.synthesizeMouseAtCenter(elem, {}, 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;
|
|
||||||
|
|
||||||
return new Promise(SimpleTest.executeSoon);
|
return new Promise(SimpleTest.executeSoon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user