зеркало из https://github.com/mozilla/gecko-dev.git
Bug 994063 - Properly disable the quick-find bar only if an editable element is focused, or if the document is in design mode; r=mikedeboer
This commit is contained in:
Родитель
e3ef408502
Коммит
d94c126262
|
@ -47,3 +47,5 @@ skip-if = buildapp == 'mulet' || buildapp == 'b2g'
|
|||
[browser_mute.js]
|
||||
[browser_mute2.js]
|
||||
skip-if = buildapp == 'mulet' || buildapp == 'b2g'
|
||||
[browser_quickfind_editable.js]
|
||||
skip-if = e10s # synthesizeKey() doesn't work in e10s mode
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
const PAGE = "data:text/html,<div contenteditable>foo</div><input><textarea></textarea>";
|
||||
const DESIGNMODE_PAGE = "data:text/html,<body onload='document.designMode=\"on\";'>";
|
||||
const HOTKEYS = ["/", "'"];
|
||||
|
||||
function* test_hotkeys(browser, expected) {
|
||||
let findbar = gBrowser.getFindBar();
|
||||
for (let key of HOTKEYS) {
|
||||
is(findbar.hidden, true, "findbar is hidden");
|
||||
EventUtils.synthesizeKey(key, {}, browser.contentWindow);
|
||||
is(findbar.hidden, expected, "findbar should" + (expected ? "" : " not") + " be hidden");
|
||||
if (!expected) {
|
||||
yield closeFindbarAndWait(findbar);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function* focus_element(browser, query) {
|
||||
yield ContentTask.spawn(browser, query, function* focus(query) {
|
||||
let element = content.document.querySelector(query);
|
||||
element.focus();
|
||||
});
|
||||
}
|
||||
|
||||
add_task(function* test_hotkey_on_editable_element() {
|
||||
yield BrowserTestUtils.withNewTab({
|
||||
gBrowser,
|
||||
url: PAGE
|
||||
}, function* do_tests(browser) {
|
||||
yield test_hotkeys(browser, false);
|
||||
const ELEMENTS = ["div", "input", "textarea"];
|
||||
for (let elem of ELEMENTS) {
|
||||
yield focus_element(browser, elem);
|
||||
yield test_hotkeys(browser, true);
|
||||
yield focus_element(browser, ":root");
|
||||
yield test_hotkeys(browser, false);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
add_task(function* test_hotkey_on_designMode_document() {
|
||||
yield BrowserTestUtils.withNewTab({
|
||||
gBrowser,
|
||||
url: DESIGNMODE_PAGE
|
||||
}, function* do_tests(browser) {
|
||||
yield test_hotkeys(browser, true);
|
||||
});
|
||||
});
|
|
@ -260,7 +260,7 @@ this.BrowserUtils = {
|
|||
if (elt instanceof win.HTMLInputElement && elt.mozIsTextField(false))
|
||||
return false;
|
||||
|
||||
if (elt.isContentEditable)
|
||||
if (elt.isContentEditable || win.document.designMode == "on")
|
||||
return false;
|
||||
|
||||
if (elt instanceof win.HTMLTextAreaElement ||
|
||||
|
@ -284,20 +284,6 @@ this.BrowserUtils = {
|
|||
win.document.documentElement.getAttribute("disablefastfind") == "true"))
|
||||
return false;
|
||||
|
||||
if (win) {
|
||||
try {
|
||||
let editingSession = win.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
|
||||
.getInterface(Components.interfaces.nsIWebNavigation)
|
||||
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
|
||||
.getInterface(Components.interfaces.nsIEditingSession);
|
||||
if (editingSession.windowIsEditable(win))
|
||||
return false;
|
||||
}
|
||||
catch (e) {
|
||||
Cu.reportError(e);
|
||||
// If someone built with composer disabled, we can't get an editing session.
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче