mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-24 21:31:04 +00:00
Bug 1246044 - Part 1 - Split out the testing for radio groups and checkboxes into separate files. r=kmag
MozReview-Commit-ID: KIwj3tZzyuz --HG-- extra : rebase_source : 3993c18e6b5e41004dd6dc5c04f93f4d38698811
This commit is contained in:
parent
c3a173f13e
commit
45b87155ca
@ -19,8 +19,12 @@
|
||||
|
||||
"clickBrowserAction": true,
|
||||
"clickPageAction": true,
|
||||
"CustomizableUI": true,
|
||||
"closeContextMenu": true,
|
||||
"closeExtensionContextMenu": true,
|
||||
"focusWindow": true,
|
||||
"makeWidgetId": true,
|
||||
"openContextMenu": true,
|
||||
"openExtensionContextMenu": true,
|
||||
"CustomizableUI": true,
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,8 @@ support-files =
|
||||
[browser_ext_commands_onCommand.js]
|
||||
[browser_ext_contentscript_connect.js]
|
||||
[browser_ext_contextMenus.js]
|
||||
[browser_ext_contextMenus_checkboxes.js]
|
||||
[browser_ext_contextMenus_radioGroups.js]
|
||||
[browser_ext_currentWindow.js]
|
||||
[browser_ext_getViews.js]
|
||||
[browser_ext_history.js]
|
||||
|
@ -27,36 +27,15 @@ add_task(function* () {
|
||||
yield extension.startup();
|
||||
yield extension.awaitFinish();
|
||||
|
||||
let contentAreaContextMenu = document.getElementById("contentAreaContextMenu");
|
||||
let popupShownPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popupshown");
|
||||
yield BrowserTestUtils.synthesizeMouseAtCenter("#img1", {
|
||||
type: "contextmenu",
|
||||
button: 2,
|
||||
}, gBrowser.selectedBrowser);
|
||||
yield popupShownPromise;
|
||||
|
||||
let contentAreaContextMenu = yield openContextMenu("#img1");
|
||||
let item = contentAreaContextMenu.getElementsByAttribute("label", "Click me!");
|
||||
is(item.length, 1, "contextMenu item for image was found");
|
||||
yield closeContextMenu();
|
||||
|
||||
let popupHiddenPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popuphidden");
|
||||
EventUtils.synthesizeMouseAtCenter(item[0], {});
|
||||
yield popupHiddenPromise;
|
||||
|
||||
contentAreaContextMenu = document.getElementById("contentAreaContextMenu");
|
||||
popupShownPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popupshown");
|
||||
yield BrowserTestUtils.synthesizeMouseAtCenter("body", {
|
||||
type: "contextmenu",
|
||||
button: 2,
|
||||
}, gBrowser.selectedBrowser);
|
||||
yield popupShownPromise;
|
||||
|
||||
contentAreaContextMenu = yield openContextMenu("body");
|
||||
item = contentAreaContextMenu.getElementsByAttribute("label", "Click me!");
|
||||
is(item.length, 0, "no contextMenu item for image was found");
|
||||
|
||||
// click something to close the context menu
|
||||
popupHiddenPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popuphidden");
|
||||
EventUtils.synthesizeMouseAtCenter(document.getElementById("context-selectall"), {});
|
||||
yield popupHiddenPromise;
|
||||
yield closeContextMenu();
|
||||
|
||||
yield extension.unload();
|
||||
|
||||
@ -141,48 +120,6 @@ add_task(function* () {
|
||||
});
|
||||
browser.contextMenus.remove(parentToDel);
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "radio-group-1",
|
||||
type: "radio",
|
||||
checked: true,
|
||||
onclick: genericOnClick,
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "Checkbox",
|
||||
type: "checkbox",
|
||||
onclick: genericOnClick,
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "radio-group-2",
|
||||
type: "radio",
|
||||
onclick: genericOnClick,
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "radio-group-2",
|
||||
type: "radio",
|
||||
onclick: genericOnClick,
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
type: "separator",
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "Checkbox",
|
||||
type: "checkbox",
|
||||
checked: true,
|
||||
onclick: genericOnClick,
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "Checkbox",
|
||||
type: "checkbox",
|
||||
onclick: genericOnClick,
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "Without onclick property",
|
||||
id: "ext-without-onclick",
|
||||
@ -190,159 +127,58 @@ add_task(function* () {
|
||||
|
||||
browser.contextMenus.update(parent, {parentId: child2}).then(
|
||||
() => {
|
||||
browser.test.notifyFail();
|
||||
browser.test.notifyFail("contextmenus");
|
||||
},
|
||||
() => {
|
||||
browser.test.notifyPass();
|
||||
browser.test.notifyPass("contextmenus");
|
||||
}
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
yield extension.startup();
|
||||
yield extension.awaitFinish();
|
||||
yield extension.awaitFinish("contextmenus");
|
||||
|
||||
let contentAreaContextMenu;
|
||||
let expectedClickInfo = {
|
||||
menuItemId: "ext-image",
|
||||
mediaType: "image",
|
||||
srcUrl: "http://mochi.test:8888/browser/browser/components/extensions/test/browser/ctxmenu-image.png",
|
||||
pageUrl: "http://mochi.test:8888/browser/browser/components/extensions/test/browser/context.html",
|
||||
};
|
||||
|
||||
function getTop() {
|
||||
contentAreaContextMenu = document.getElementById("contentAreaContextMenu");
|
||||
let items = contentAreaContextMenu.getElementsByAttribute("ext-type", "top-level-menu");
|
||||
is(items.length, 1, "top level item was found (context=selection)");
|
||||
let topItem = items[0];
|
||||
return topItem.childNodes[0];
|
||||
}
|
||||
|
||||
function* openExtensionMenu() {
|
||||
contentAreaContextMenu = document.getElementById("contentAreaContextMenu");
|
||||
let popupShownPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popupshown");
|
||||
yield BrowserTestUtils.synthesizeMouseAtCenter("#img1", {
|
||||
type: "contextmenu",
|
||||
button: 2,
|
||||
}, gBrowser.selectedBrowser);
|
||||
yield popupShownPromise;
|
||||
|
||||
popupShownPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popupshown");
|
||||
EventUtils.synthesizeMouseAtCenter(getTop(), {});
|
||||
yield popupShownPromise;
|
||||
}
|
||||
|
||||
function* closeContextMenu(itemToSelect, expectedClickInfo, hasOnclickProperty = true) {
|
||||
function checkClickInfo(info, tab) {
|
||||
for (let i of Object.keys(expectedClickInfo)) {
|
||||
is(info[i], expectedClickInfo[i],
|
||||
"click info " + i + " expected to be: " + expectedClickInfo[i] + " but was: " + info[i]);
|
||||
}
|
||||
is(expectedClickInfo.pageSrc, tab.url);
|
||||
function checkClickInfo(result) {
|
||||
for (let i of Object.keys(expectedClickInfo)) {
|
||||
is(result.info[i], expectedClickInfo[i],
|
||||
"click info " + i + " expected to be: " + expectedClickInfo[i] + " but was: " + info[i]);
|
||||
}
|
||||
let popupHiddenPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popuphidden");
|
||||
EventUtils.synthesizeMouseAtCenter(itemToSelect, {});
|
||||
|
||||
if (hasOnclickProperty) {
|
||||
let {info, tab} = yield extension.awaitMessage("onclick");
|
||||
if (expectedClickInfo) {
|
||||
checkClickInfo(info, tab);
|
||||
}
|
||||
}
|
||||
|
||||
let {info, tab} = yield extension.awaitMessage("browser.contextMenus.onClicked");
|
||||
if (expectedClickInfo) {
|
||||
checkClickInfo(info, tab);
|
||||
}
|
||||
|
||||
yield popupHiddenPromise;
|
||||
is(expectedClickInfo.pageSrc, result.tab.url);
|
||||
}
|
||||
|
||||
function confirmRadioGroupStates(expectedStates) {
|
||||
let top = getTop();
|
||||
|
||||
let radioItems = top.getElementsByAttribute("type", "radio");
|
||||
let radioGroup1 = top.getElementsByAttribute("label", "radio-group-1");
|
||||
let radioGroup2 = top.getElementsByAttribute("label", "radio-group-2");
|
||||
|
||||
is(radioItems.length, 3, "there should be 3 radio items in the context menu");
|
||||
is(radioGroup1.length, 1, "the first radio group should only have 1 radio item");
|
||||
is(radioGroup2.length, 2, "the second radio group should only have 2 radio items");
|
||||
|
||||
is(radioGroup1[0].hasAttribute("checked"), expectedStates[0], `radio item 1 has state (checked=${expectedStates[0]})`);
|
||||
is(radioGroup2[0].hasAttribute("checked"), expectedStates[1], `radio item 2 has state (checked=${expectedStates[1]})`);
|
||||
is(radioGroup2[1].hasAttribute("checked"), expectedStates[2], `radio item 3 has state (checked=${expectedStates[2]})`);
|
||||
}
|
||||
|
||||
function confirmCheckboxStates(expectedStates) {
|
||||
let checkboxItems = getTop().getElementsByAttribute("type", "checkbox");
|
||||
|
||||
is(checkboxItems.length, 3, "there should be 3 checkbox items in the context menu");
|
||||
|
||||
is(checkboxItems[0].hasAttribute("checked"), expectedStates[0], `checkbox item 1 has state (checked=${expectedStates[0]})`);
|
||||
is(checkboxItems[1].hasAttribute("checked"), expectedStates[1], `checkbox item 2 has state (checked=${expectedStates[1]})`);
|
||||
is(checkboxItems[2].hasAttribute("checked"), expectedStates[2], `checkbox item 3 has state (checked=${expectedStates[2]})`);
|
||||
}
|
||||
|
||||
yield openExtensionMenu();
|
||||
let extensionMenuRoot = yield openExtensionContextMenu();
|
||||
|
||||
// Check some menu items
|
||||
let top = getTop();
|
||||
let items = top.getElementsByAttribute("label", "image");
|
||||
let items = extensionMenuRoot.getElementsByAttribute("label", "image");
|
||||
is(items.length, 1, "contextMenu item for image was found (context=image)");
|
||||
let image = items[0];
|
||||
|
||||
items = top.getElementsByAttribute("label", "selection-edited");
|
||||
items = extensionMenuRoot.getElementsByAttribute("label", "selection-edited");
|
||||
is(items.length, 0, "contextMenu item for selection was not found (context=image)");
|
||||
|
||||
items = top.getElementsByAttribute("label", "parentToDel");
|
||||
items = extensionMenuRoot.getElementsByAttribute("label", "parentToDel");
|
||||
is(items.length, 0, "contextMenu item for removed parent was not found (context=image)");
|
||||
|
||||
items = top.getElementsByAttribute("label", "parent");
|
||||
items = extensionMenuRoot.getElementsByAttribute("label", "parent");
|
||||
is(items.length, 1, "contextMenu item for parent was found (context=image)");
|
||||
|
||||
is(items[0].childNodes[0].childNodes.length, 2, "child items for parent were found (context=image)");
|
||||
|
||||
// Click on ext-image item and check the click results
|
||||
yield closeContextMenu(image, {
|
||||
menuItemId: "ext-image",
|
||||
mediaType: "image",
|
||||
srcUrl: "http://mochi.test:8888/browser/browser/components/extensions/test/browser/ctxmenu-image.png",
|
||||
pageUrl: "http://mochi.test:8888/browser/browser/components/extensions/test/browser/context.html",
|
||||
});
|
||||
yield closeExtensionContextMenu(image);
|
||||
|
||||
// Test radio groups
|
||||
yield openExtensionMenu();
|
||||
confirmRadioGroupStates([true, false, false]);
|
||||
items = getTop().getElementsByAttribute("type", "radio");
|
||||
yield closeContextMenu(items[1]);
|
||||
|
||||
yield openExtensionMenu();
|
||||
confirmRadioGroupStates([true, true, false]);
|
||||
items = getTop().getElementsByAttribute("type", "radio");
|
||||
yield closeContextMenu(items[2]);
|
||||
|
||||
yield openExtensionMenu();
|
||||
confirmRadioGroupStates([true, false, true]);
|
||||
items = getTop().getElementsByAttribute("type", "radio");
|
||||
yield closeContextMenu(items[0]);
|
||||
|
||||
yield openExtensionMenu();
|
||||
confirmRadioGroupStates([true, false, true]);
|
||||
|
||||
// Test checkboxes
|
||||
items = getTop().getElementsByAttribute("type", "checkbox");
|
||||
confirmCheckboxStates([false, true, false]);
|
||||
yield closeContextMenu(items[0]);
|
||||
|
||||
yield openExtensionMenu();
|
||||
confirmCheckboxStates([true, true, false]);
|
||||
items = getTop().getElementsByAttribute("type", "checkbox");
|
||||
yield closeContextMenu(items[2]);
|
||||
|
||||
yield openExtensionMenu();
|
||||
confirmCheckboxStates([true, true, true]);
|
||||
items = getTop().getElementsByAttribute("type", "checkbox");
|
||||
yield closeContextMenu(items[0]);
|
||||
|
||||
yield openExtensionMenu();
|
||||
confirmCheckboxStates([false, true, true]);
|
||||
items = getTop().getElementsByAttribute("type", "checkbox");
|
||||
yield closeContextMenu(items[2]);
|
||||
let result = yield extension.awaitMessage("onclick");
|
||||
checkClickInfo(result);
|
||||
result = yield extension.awaitMessage("browser.contextMenus.onClicked");
|
||||
checkClickInfo(result);
|
||||
|
||||
// Select some text
|
||||
yield ContentTask.spawn(gBrowser.selectedBrowser, { }, function* (arg) {
|
||||
@ -357,40 +193,51 @@ add_task(function* () {
|
||||
});
|
||||
|
||||
// Bring up context menu again
|
||||
yield openExtensionMenu();
|
||||
extensionMenuRoot = yield openExtensionContextMenu();
|
||||
|
||||
// Check some menu items
|
||||
top = getTop();
|
||||
items = top.getElementsByAttribute("label", "Without onclick property");
|
||||
items = extensionMenuRoot.getElementsByAttribute("label", "Without onclick property");
|
||||
is(items.length, 1, "contextMenu item was found (context=page)");
|
||||
|
||||
yield closeContextMenu(items[0], {
|
||||
yield closeExtensionContextMenu(items[0]);
|
||||
|
||||
expectedClickInfo = {
|
||||
menuItemId: "ext-without-onclick",
|
||||
pageUrl: "http://mochi.test:8888/browser/browser/components/extensions/test/browser/context.html",
|
||||
}, false /* hasOnclickProperty */);
|
||||
};
|
||||
|
||||
result = yield extension.awaitMessage("browser.contextMenus.onClicked");
|
||||
checkClickInfo(result);
|
||||
|
||||
// Bring up context menu again
|
||||
yield openExtensionMenu();
|
||||
extensionMenuRoot = yield openExtensionContextMenu();
|
||||
|
||||
// Check some menu items
|
||||
top = getTop();
|
||||
items = top.getElementsByAttribute("label", "selection is: 'just some text 123456789012345678901234567890...'");
|
||||
items = extensionMenuRoot.getElementsByAttribute("label", "selection is: 'just some text 123456789012345678901234567890...'");
|
||||
is(items.length, 1, "contextMenu item for selection was found (context=selection)");
|
||||
let selectionItem = items[0];
|
||||
|
||||
items = top.getElementsByAttribute("label", "selection");
|
||||
items = extensionMenuRoot.getElementsByAttribute("label", "selection");
|
||||
is(items.length, 0, "contextMenu item label update worked (context=selection)");
|
||||
|
||||
yield closeContextMenu(selectionItem, {
|
||||
yield closeExtensionContextMenu(selectionItem);
|
||||
|
||||
expectedClickInfo = {
|
||||
menuItemId: "ext-selection",
|
||||
pageUrl: "http://mochi.test:8888/browser/browser/components/extensions/test/browser/context.html",
|
||||
selectionText: "just some text 1234567890123456789012345678901234567890123456789012345678901234567890123456789012",
|
||||
});
|
||||
};
|
||||
|
||||
result = yield extension.awaitMessage("onclick");
|
||||
checkClickInfo(result);
|
||||
result = yield extension.awaitMessage("browser.contextMenus.onClicked");
|
||||
checkClickInfo(result);
|
||||
|
||||
let contentAreaContextMenu = yield openContextMenu("#img1");
|
||||
items = contentAreaContextMenu.getElementsByAttribute("ext-type", "top-level-menu");
|
||||
is(items.length, 0, "top level item was not found (after removeAll()");
|
||||
yield closeContextMenu();
|
||||
|
||||
yield extension.unload();
|
||||
|
||||
yield BrowserTestUtils.removeTab(tab1);
|
||||
});
|
||||
|
@ -0,0 +1,74 @@
|
||||
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set sts=2 sw=2 et tw=80: */
|
||||
"use strict";
|
||||
|
||||
add_task(function* () {
|
||||
let tab1 = yield BrowserTestUtils.openNewForegroundTab(gBrowser,
|
||||
"http://mochi.test:8888/browser/browser/components/extensions/test/browser/context.html");
|
||||
|
||||
gBrowser.selectedTab = tab1;
|
||||
|
||||
let extension = ExtensionTestUtils.loadExtension({
|
||||
manifest: {
|
||||
"permissions": ["contextMenus"],
|
||||
},
|
||||
|
||||
background: function() {
|
||||
browser.contextMenus.create({
|
||||
title: "Checkbox",
|
||||
type: "checkbox",
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
type: "separator",
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "Checkbox",
|
||||
type: "checkbox",
|
||||
checked: true,
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "Checkbox",
|
||||
type: "checkbox",
|
||||
});
|
||||
|
||||
browser.test.notifyPass("contextmenus-checkboxes");
|
||||
},
|
||||
});
|
||||
|
||||
yield extension.startup();
|
||||
yield extension.awaitFinish("contextmenus-checkboxes");
|
||||
|
||||
function confirmCheckboxStates(extensionMenuRoot, expectedStates) {
|
||||
let checkboxItems = extensionMenuRoot.getElementsByAttribute("type", "checkbox");
|
||||
|
||||
is(checkboxItems.length, 3, "there should be 3 checkbox items in the context menu");
|
||||
|
||||
is(checkboxItems[0].hasAttribute("checked"), expectedStates[0], `checkbox item 1 has state (checked=${expectedStates[0]})`);
|
||||
is(checkboxItems[1].hasAttribute("checked"), expectedStates[1], `checkbox item 2 has state (checked=${expectedStates[1]})`);
|
||||
is(checkboxItems[2].hasAttribute("checked"), expectedStates[2], `checkbox item 3 has state (checked=${expectedStates[2]})`);
|
||||
|
||||
return extensionMenuRoot.getElementsByAttribute("type", "checkbox");
|
||||
}
|
||||
|
||||
let extensionMenuRoot = yield openExtensionContextMenu();
|
||||
let items = confirmCheckboxStates(extensionMenuRoot, [false, true, false]);
|
||||
yield closeExtensionContextMenu(items[0]);
|
||||
|
||||
extensionMenuRoot = yield openExtensionContextMenu();
|
||||
items = confirmCheckboxStates(extensionMenuRoot, [true, true, false]);
|
||||
yield closeExtensionContextMenu(items[2]);
|
||||
|
||||
extensionMenuRoot = yield openExtensionContextMenu();
|
||||
items = confirmCheckboxStates(extensionMenuRoot, [true, true, true]);
|
||||
yield closeExtensionContextMenu(items[0]);
|
||||
|
||||
extensionMenuRoot = yield openExtensionContextMenu();
|
||||
items = confirmCheckboxStates(extensionMenuRoot, [false, true, true]);
|
||||
yield closeExtensionContextMenu(items[2]);
|
||||
|
||||
yield extension.unload();
|
||||
yield BrowserTestUtils.removeTab(tab1);
|
||||
});
|
@ -0,0 +1,78 @@
|
||||
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set sts=2 sw=2 et tw=80: */
|
||||
"use strict";
|
||||
|
||||
add_task(function* () {
|
||||
let tab1 = yield BrowserTestUtils.openNewForegroundTab(gBrowser,
|
||||
"http://mochi.test:8888/browser/browser/components/extensions/test/browser/context.html");
|
||||
|
||||
gBrowser.selectedTab = tab1;
|
||||
|
||||
let extension = ExtensionTestUtils.loadExtension({
|
||||
manifest: {
|
||||
"permissions": ["contextMenus"],
|
||||
},
|
||||
|
||||
background: function() {
|
||||
browser.contextMenus.create({
|
||||
title: "radio-group-1",
|
||||
type: "radio",
|
||||
checked: true,
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
type: "separator",
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "radio-group-2",
|
||||
type: "radio",
|
||||
});
|
||||
|
||||
browser.contextMenus.create({
|
||||
title: "radio-group-2",
|
||||
type: "radio",
|
||||
});
|
||||
|
||||
browser.test.notifyPass("contextmenus-radio-groups");
|
||||
},
|
||||
});
|
||||
|
||||
yield extension.startup();
|
||||
yield extension.awaitFinish("contextmenus-radio-groups");
|
||||
|
||||
function confirmRadioGroupStates(extensionMenuRoot, expectedStates) {
|
||||
let radioItems = extensionMenuRoot.getElementsByAttribute("type", "radio");
|
||||
let radioGroup1 = extensionMenuRoot.getElementsByAttribute("label", "radio-group-1");
|
||||
let radioGroup2 = extensionMenuRoot.getElementsByAttribute("label", "radio-group-2");
|
||||
|
||||
is(radioItems.length, 3, "there should be 3 radio items in the context menu");
|
||||
is(radioGroup1.length, 1, "the first radio group should only have 1 radio item");
|
||||
is(radioGroup2.length, 2, "the second radio group should only have 2 radio items");
|
||||
|
||||
is(radioGroup1[0].hasAttribute("checked"), expectedStates[0], `radio item 1 has state (checked=${expectedStates[0]})`);
|
||||
is(radioGroup2[0].hasAttribute("checked"), expectedStates[1], `radio item 2 has state (checked=${expectedStates[1]})`);
|
||||
is(radioGroup2[1].hasAttribute("checked"), expectedStates[2], `radio item 3 has state (checked=${expectedStates[2]})`);
|
||||
|
||||
return extensionMenuRoot.getElementsByAttribute("type", "radio");
|
||||
}
|
||||
|
||||
let extensionMenuRoot = yield openExtensionContextMenu();
|
||||
let items = confirmRadioGroupStates(extensionMenuRoot, [true, false, false]);
|
||||
yield closeExtensionContextMenu(items[1]);
|
||||
|
||||
extensionMenuRoot = yield openExtensionContextMenu();
|
||||
items = confirmRadioGroupStates(extensionMenuRoot, [true, true, false]);
|
||||
yield closeExtensionContextMenu(items[2]);
|
||||
|
||||
extensionMenuRoot = yield openExtensionContextMenu();
|
||||
items = confirmRadioGroupStates(extensionMenuRoot, [true, false, true]);
|
||||
yield closeExtensionContextMenu(items[0]);
|
||||
|
||||
extensionMenuRoot = yield openExtensionContextMenu();
|
||||
items = confirmRadioGroupStates(extensionMenuRoot, [true, false, true]);
|
||||
yield closeExtensionContextMenu(items[0]);
|
||||
|
||||
yield extension.unload();
|
||||
yield BrowserTestUtils.removeTab(tab1);
|
||||
});
|
@ -8,6 +8,8 @@
|
||||
* getBrowserActionPopup getPageActionPopup
|
||||
* closeBrowserAction closePageAction
|
||||
* promisePopupShown promisePopupHidden
|
||||
* openContextMenu closeContextMenu
|
||||
* openExtensionContextMenu closeExtensionContextMenu
|
||||
*/
|
||||
|
||||
var {AppConstants} = Cu.import("resource://gre/modules/AppConstants.jsm");
|
||||
@ -104,6 +106,44 @@ function closeBrowserAction(extension, win = window) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
function* openContextMenu(id) {
|
||||
let contentAreaContextMenu = document.getElementById("contentAreaContextMenu");
|
||||
let popupShownPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popupshown");
|
||||
yield BrowserTestUtils.synthesizeMouseAtCenter(id, {type: "contextmenu", button: 2}, gBrowser.selectedBrowser);
|
||||
yield popupShownPromise;
|
||||
return contentAreaContextMenu;
|
||||
}
|
||||
|
||||
function* closeContextMenu() {
|
||||
let contentAreaContextMenu = document.getElementById("contentAreaContextMenu");
|
||||
let popupHiddenPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popuphidden");
|
||||
contentAreaContextMenu.hidePopup();
|
||||
yield popupHiddenPromise;
|
||||
}
|
||||
|
||||
function* openExtensionContextMenu() {
|
||||
let contextMenu = yield openContextMenu("#img1");
|
||||
let topLevelMenu = contextMenu.getElementsByAttribute("ext-type", "top-level-menu");
|
||||
|
||||
// Return null if the extension only has one item and therefore no extension menu.
|
||||
if (topLevelMenu.length == 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let extensionMenu = topLevelMenu[0].childNodes[0];
|
||||
let popupShownPromise = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
|
||||
EventUtils.synthesizeMouseAtCenter(extensionMenu, {});
|
||||
yield popupShownPromise;
|
||||
return extensionMenu;
|
||||
}
|
||||
|
||||
function* closeExtensionContextMenu(itemToSelect) {
|
||||
let contentAreaContextMenu = document.getElementById("contentAreaContextMenu");
|
||||
let popupHiddenPromise = BrowserTestUtils.waitForEvent(contentAreaContextMenu, "popuphidden");
|
||||
EventUtils.synthesizeMouseAtCenter(itemToSelect, {});
|
||||
yield popupHiddenPromise;
|
||||
}
|
||||
|
||||
function getPageActionPopup(extension, win = window) {
|
||||
let panelId = makeWidgetId(extension.id) + "-panel";
|
||||
return win.document.getElementById(panelId);
|
||||
|
Loading…
Reference in New Issue
Block a user