Files
tubestation/dom/browser-element/mochitest/browserElement_KeyEvents.js
Justin Lebar e0182f56a3 Bug 856006 - Try to fix intermittent failures in KeyEvents browser-element test. r=kk1ff
The intermittent failures are coming from events with keyCodes 34, 93,
and 95, corresponding to ", ], and _.  The test doesn't send any of
these keys; I don't know where they're coming from.  But at the very
least, we can not turn the test orange when we receive these events.

This change also removes some comments in the test about keypresses
being preventDefault'ed that, as far as I can tell, are incorrect.
2013-03-30 08:42:52 -04:00

98 lines
2.9 KiB
JavaScript

/* Any copyright is dedicated to the public domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
// Test that an iframe with the |mozbrowser| attribute does bubble some
// whitelisted key events.
"use strict";
let Ci = SpecialPowers.Ci;
let whitelistedKeyCodes = [
Ci.nsIDOMKeyEvent.DOM_VK_ESCAPE, // Back button.
Ci.nsIDOMKeyEvent.DOM_VK_SLEEP, // Power button
Ci.nsIDOMKeyEvent.DOM_VK_CONTEXT_MENU,
Ci.nsIDOMKeyEvent.DOM_VK_F5, // Search button.
Ci.nsIDOMKeyEvent.DOM_VK_PAGE_UP, // Volume up.
Ci.nsIDOMKeyEvent.DOM_VK_PAGE_DOWN // Volume down.
];
let blacklistedKeyCodes = [
Ci.nsIDOMKeyEvent.DOM_VK_A,
Ci.nsIDOMKeyEvent.DOM_VK_B
];
SimpleTest.waitForExplicitFinish();
browserElementTestHelpers.setEnabledPref(true);
browserElementTestHelpers.addPermission();
// Number of expected events at which point we will consider the test as done.
var nbEvents = whitelistedKeyCodes.length * 3;
var iframe;
var finished = false;
function runTest() {
iframe = document.createElement('iframe');
SpecialPowers.wrap(iframe).mozbrowser = true;
iframe.src = browserElementTestHelpers.focusPage;
document.body.appendChild(iframe);
SimpleTest.waitForFocus(function() {
iframe.focus();
SimpleTest.executeSoon(test2);
});
}
function eventHandler(e) {
if (whitelistedKeyCodes.indexOf(e.keyCode) == -1 &&
blacklistedKeyCodes.indexOf(e.keyCode) == -1) {
// See bug 856006: We sometimes get unexpected key presses, and we don't
// know why. Don't turn the test orange over this.
ok(true, "Ignoring unexpected " + e.type +
" with keyCode " + e.keyCode + ".");
return;
}
ok(e.type == 'keydown' || e.type == 'keypress' || e.type == 'keyup',
"e.type was " + e.type + ", expected keydown, keypress, or keyup");
ok(!e.defaultPrevented, "expected !e.defaultPrevented");
ok(whitelistedKeyCodes.indexOf(e.keyCode) != -1,
"Expected a whitelited keycode, but got " + e.keyCode + "instead.");
nbEvents--;
if (nbEvents == 0) {
SimpleTest.finish();
return;
}
if (nbEvents < 0 && !finished) {
ok(false, "got an unexpected event! " + e.type + " " + e.keyCode);
}
}
function test2() {
is(document.activeElement, iframe, "iframe should be focused");
addEventListener('keydown', eventHandler);
addEventListener('keypress', eventHandler);
addEventListener('keyup', eventHandler);
// These events should not be received because they are not whitelisted.
synthesizeKey("VK_A", {});
synthesizeKey("VK_B", {});
// These events should not be received because preventDefault is called.
synthesizeKey("VK_ESCAPE", {});
// These events should be received.
synthesizeKey("VK_F5", {});
synthesizeKey("VK_ESCAPE", {});
synthesizeKey("VK_PAGE_UP", {});
synthesizeKey("VK_PAGE_DOWN", {});
synthesizeKey("VK_CONTEXT_MENU", {});
synthesizeKey("VK_SLEEP", {});
finished = true;
}
addEventListener('testready', runTest);