зеркало из https://github.com/mozilla/gecko-dev.git
Bug 501608 - menu popup sounds are played when showing the autoscrolling popup. r=enn
This commit is contained in:
Родитель
daecb2ef4c
Коммит
e748f62752
|
@ -50,5 +50,11 @@ _BROWSER_FILES = \
|
|||
browser_bug471962.js \
|
||||
$(NULL)
|
||||
|
||||
# browser_keyevents_during_autoscrolling.js cannot start the autoscrolling by
|
||||
# synthesizeMouse with middle button on linux, therefore, disable it temporarily
|
||||
ifneq ($(MOZ_WIDGET_TOOLKIT),gtk2)
|
||||
_BROWSER_FILES += browser_keyevents_during_autoscrolling.js
|
||||
endif
|
||||
|
||||
libs:: $(_BROWSER_FILES)
|
||||
$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/browser/$(relativesrcdir)
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
function test()
|
||||
{
|
||||
const kPrefName_AutoScroll = "general.autoScroll";
|
||||
const kPrefName_ContentLoadURL = "middlemouse.contentLoadURL";
|
||||
var prefSvc = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefBranch2);
|
||||
var kAutoScrollingEnabled = prefSvc.getBoolPref(kPrefName_AutoScroll);
|
||||
prefSvc.setBoolPref(kPrefName_AutoScroll, true);
|
||||
|
||||
const kNoKeyEvents = 0;
|
||||
const kKeyDownEvent = 1;
|
||||
const kKeyPressEvent = 2;
|
||||
const kKeyUpEvent = 4;
|
||||
const kAllKeyEvents = 7;
|
||||
|
||||
var expectedKeyEvents;
|
||||
var dispatchedKeyEvents;
|
||||
var key;
|
||||
var root;
|
||||
|
||||
function sendKey(aKey)
|
||||
{
|
||||
key = aKey;
|
||||
dispatchedKeyEvents = kNoKeyEvents;
|
||||
EventUtils.synthesizeKey(key, {}, gBrowser.contentWindow);
|
||||
is(dispatchedKeyEvents, expectedKeyEvents,
|
||||
"unexpected key events were dispatched or not dispatched: " + key);
|
||||
}
|
||||
|
||||
function onKey(aEvent)
|
||||
{
|
||||
if (aEvent.target != root) {
|
||||
ok(false, "unknown target: " + aEvent.target.tagName);
|
||||
return;
|
||||
}
|
||||
|
||||
var keyFlag;
|
||||
switch (aEvent.type) {
|
||||
case "keydown":
|
||||
keyFlag = kKeyDownEvent;
|
||||
break;
|
||||
case "keypress":
|
||||
keyFlag = kKeyPressEvent;
|
||||
break;
|
||||
case "keyup":
|
||||
keyFlag = kKeyUpEvent;
|
||||
break;
|
||||
default:
|
||||
ok(false, "Unknown events: " + aEvent.type);
|
||||
return;
|
||||
}
|
||||
dispatchedKeyEvents |= keyFlag;
|
||||
is(keyFlag, expectedKeyEvents & keyFlag, aEvent.type + " fired: " + key);
|
||||
}
|
||||
|
||||
function startTest() {
|
||||
waitForExplicitFinish();
|
||||
gBrowser.addEventListener("load", onLoad, false);
|
||||
var dataUri = 'data:text/html,<body style="height:10000px;"></body>';
|
||||
gBrowser.loadURI(dataUri);
|
||||
}
|
||||
|
||||
function onLoad() {
|
||||
gBrowser.removeEventListener("load", onLoad, false);
|
||||
|
||||
gBrowser.contentWindow.focus();
|
||||
|
||||
var doc = gBrowser.contentDocument;
|
||||
|
||||
root = doc.documentElement;
|
||||
root.addEventListener("keydown", onKey, true);
|
||||
root.addEventListener("keypress", onKey, true);
|
||||
root.addEventListener("keyup", onKey, true);
|
||||
|
||||
// Test whether the key events are handled correctly under normal condition
|
||||
expectedKeyEvents = kAllKeyEvents;
|
||||
sendKey("A");
|
||||
|
||||
// Start autoscrolling by middle button lick on the page
|
||||
EventUtils.synthesizeMouse(root, 10, 10, { button: 1 },
|
||||
gBrowser.contentWindow);
|
||||
|
||||
// Most key events should be eaten by the browser.
|
||||
expectedKeyEvents = kNoKeyEvents;
|
||||
sendKey("A");
|
||||
sendKey("VK_DOWN");
|
||||
sendKey("VK_RETURN");
|
||||
sendKey("VK_ENTER");
|
||||
sendKey("VK_HOME");
|
||||
sendKey("VK_END");
|
||||
sendKey("VK_TAB");
|
||||
sendKey("VK_ENTER");
|
||||
|
||||
// Finish autoscrolling by ESC key. Note that only keydown and keypress
|
||||
// events are eaten because keyup event is fired *after* the autoscrolling
|
||||
// is finished.
|
||||
expectedKeyEvents = kKeyUpEvent;
|
||||
sendKey("VK_ESCAPE");
|
||||
|
||||
// Test whether the key events are handled correctly under normal condition
|
||||
expectedKeyEvents = kAllKeyEvents;
|
||||
sendKey("A");
|
||||
|
||||
root.removeEventListener("keydown", onKey, true);
|
||||
root.removeEventListener("keypress", onKey, true);
|
||||
root.removeEventListener("keyup", onKey, true);
|
||||
|
||||
// restore the changed prefs
|
||||
prefSvc.setBoolPref(kPrefName_AutoScroll, kAutoScrollingEnabled);
|
||||
|
||||
// cleaning-up
|
||||
gBrowser.loadURI("about:blank");
|
||||
|
||||
finish();
|
||||
}
|
||||
|
||||
startTest();
|
||||
}
|
|
@ -757,6 +757,9 @@
|
|||
window.removeEventListener("mousedown", this, true);
|
||||
window.removeEventListener("mouseup", this, true);
|
||||
window.removeEventListener("contextmenu", this, true);
|
||||
window.removeEventListener("keydown", this, true);
|
||||
window.removeEventListener("keypress", this, true);
|
||||
window.removeEventListener("keyup", this, true);
|
||||
clearInterval(this._autoScrollTimer);
|
||||
}
|
||||
]]>
|
||||
|
@ -767,7 +770,7 @@
|
|||
<body>
|
||||
<![CDATA[
|
||||
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
var popup = document.createElementNS(XUL_NS, "popup");
|
||||
var popup = document.createElementNS(XUL_NS, "panel");
|
||||
popup.className = "autoscroller";
|
||||
return popup;
|
||||
]]>
|
||||
|
@ -828,6 +831,9 @@
|
|||
window.addEventListener("mousedown", this, true);
|
||||
window.addEventListener("mouseup", this, true);
|
||||
window.addEventListener("contextmenu", this, true);
|
||||
window.addEventListener("keydown", this, true);
|
||||
window.addEventListener("keypress", this, true);
|
||||
window.addEventListener("keyup", this, true);
|
||||
|
||||
this._scrollErrorX = 0;
|
||||
this._scrollErrorY = 0;
|
||||
|
@ -951,6 +957,22 @@
|
|||
this.stopScroll();
|
||||
break;
|
||||
}
|
||||
case "keypress": {
|
||||
if (aEvent.keyCode == aEvent.DOM_VK_ESCAPE) {
|
||||
// the escape key will be processed by
|
||||
// nsXULPopupManager::KeyPress and the panel will be closed.
|
||||
// So, nothing to do here.
|
||||
break;
|
||||
}
|
||||
// don't break here. we need to eat keypress events.
|
||||
}
|
||||
case "keydown":
|
||||
case "keyup": {
|
||||
// All keyevents should be eaten here during autoscrolling.
|
||||
aEvent.stopPropagation();
|
||||
aEvent.preventDefault();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
]]>
|
||||
|
|
Загрузка…
Ссылка в новой задаче