1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
// Test for bug 1170531
// https://bugzilla.mozilla.org/show_bug.cgi?id=1170531
add_task(function* () {
// Get a bunch of DOM nodes
let winUtils = window.QueryInterface(Ci.nsIInterfaceRequestor).
getInterface(Ci.nsIDOMWindowUtils);
let editMenu = document.getElementById("edit-menu");
let menubar = editMenu.parentNode;
let menuPopup = editMenu.menupopup;
let editMenuIndex = -1;
for (let i = 0; i < menubar.children.length; i++) {
if (menubar.children[i] === editMenu) {
editMenuIndex = i;
break;
}
}
let closeMenu = function(aCallback) {
if (OS.Constants.Sys.Name == "Darwin") {
executeSoon(aCallback);
return;
}
menuPopup.addEventListener("popuphidden", function onPopupHidden() {
menuPopup.removeEventListener("popuphidden", onPopupHidden, false);
executeSoon(aCallback);
}, false);
executeSoon(function() {
editMenu.open = false;
});
};
let openMenu = function(aCallback) {
if (OS.Constants.Sys.Name == "Darwin") {
goUpdateGlobalEditMenuItems();
// On OSX, we have a native menu, so it has to be updated. In single process browsers,
// this happens synchronously, but in e10s, we have to wait for the main thread
// to deal with it for us. 1 second should be plenty of time.
setTimeout(aCallback, 1000);
return;
}
menuPopup.addEventListener("popupshown", function onPopupShown() {
menuPopup.removeEventListener("popupshown", onPopupShown, false);
executeSoon(aCallback);
}, false);
executeSoon(function() {
editMenu.open = true;
});
};
yield BrowserTestUtils.withNewTab({ gBrowser: gBrowser, url: "about:blank" }, function* (browser) {
let menu_cut_disabled, menu_copy_disabled;
yield BrowserTestUtils.loadURI(browser, "data:text/html,<div>hello!</div>");
yield BrowserTestUtils.browserLoaded(browser);
browser.focus();
yield new Promise(resolve => waitForFocus(resolve, window));
yield new Promise(openMenu);
menu_cut_disabled = menuPopup.querySelector("#menu_cut").getAttribute('disabled') == "true";
is(menu_cut_disabled, false, "menu_cut should be enabled");
menu_copy_disabled = menuPopup.querySelector("#menu_copy").getAttribute('disabled') == "true";
is(menu_copy_disabled, false, "menu_copy should be enabled");
yield new Promise(closeMenu);
yield BrowserTestUtils.loadURI(browser, "data:text/html,<div contentEditable='true'>hello!</div>");
yield BrowserTestUtils.browserLoaded(browser);
browser.focus();
yield new Promise(resolve => waitForFocus(resolve, window));
yield new Promise(openMenu);
menu_cut_disabled = menuPopup.querySelector("#menu_cut").getAttribute('disabled') == "true";
is(menu_cut_disabled, false, "menu_cut should be enabled");
menu_copy_disabled = menuPopup.querySelector("#menu_copy").getAttribute('disabled') == "true";
is(menu_copy_disabled, false, "menu_copy should be enabled");
yield new Promise(closeMenu);
yield BrowserTestUtils.loadURI(browser, "about:preferences");
yield BrowserTestUtils.browserLoaded(browser);
browser.focus();
yield new Promise(resolve => waitForFocus(resolve, window));
yield new Promise(openMenu);
menu_cut_disabled = menuPopup.querySelector("#menu_cut").getAttribute('disabled') == "true";
is(menu_cut_disabled, true, "menu_cut should be disabled");
menu_copy_disabled = menuPopup.querySelector("#menu_copy").getAttribute('disabled') == "true";
is(menu_copy_disabled, true, "menu_copy should be disabled");
yield new Promise(closeMenu);
});
});
|