1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/browser-element/mochitest/browserElement_KeyEvents.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,113 @@ 1.4 +/* Any copyright is dedicated to the public domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +// Test that an iframe with the |mozbrowser| attribute does bubble some 1.8 +// whitelisted key events. 1.9 +"use strict"; 1.10 + 1.11 +let Ci = SpecialPowers.Ci; 1.12 + 1.13 +let whitelistedKeyCodes = [ 1.14 + Ci.nsIDOMKeyEvent.DOM_VK_ESCAPE, // Back button. 1.15 + Ci.nsIDOMKeyEvent.DOM_VK_SLEEP, // Power button 1.16 + Ci.nsIDOMKeyEvent.DOM_VK_CONTEXT_MENU, 1.17 + Ci.nsIDOMKeyEvent.DOM_VK_F5, // Search button. 1.18 + Ci.nsIDOMKeyEvent.DOM_VK_PAGE_UP, // Volume up. 1.19 + Ci.nsIDOMKeyEvent.DOM_VK_PAGE_DOWN // Volume down. 1.20 +]; 1.21 + 1.22 +let blacklistedKeyCodes = [ 1.23 + Ci.nsIDOMKeyEvent.DOM_VK_A, 1.24 + Ci.nsIDOMKeyEvent.DOM_VK_B 1.25 +]; 1.26 + 1.27 +SimpleTest.waitForExplicitFinish(); 1.28 +browserElementTestHelpers.setEnabledPref(true); 1.29 +browserElementTestHelpers.addPermission(); 1.30 + 1.31 +// Number of expected events at which point we will consider the test as done. 1.32 +var nbEvents = whitelistedKeyCodes.length * 3; 1.33 + 1.34 +var iframe; 1.35 +var finished = false; 1.36 +function runTest() { 1.37 + iframe = document.createElement('iframe'); 1.38 + SpecialPowers.wrap(iframe).mozbrowser = true; 1.39 + iframe.src = browserElementTestHelpers.focusPage; 1.40 + 1.41 + var gotFocus = false; 1.42 + var gotLoadend = false; 1.43 + 1.44 + function maybeTest2() { 1.45 + if (gotFocus && gotLoadend) { 1.46 + SimpleTest.executeSoon(test2); 1.47 + } 1.48 + } 1.49 + 1.50 + iframe.addEventListener('mozbrowserloadend', function() { 1.51 + gotLoadend = true; 1.52 + maybeTest2(); 1.53 + }); 1.54 + 1.55 + document.body.appendChild(iframe); 1.56 + 1.57 + SimpleTest.waitForFocus(function() { 1.58 + iframe.focus(); 1.59 + gotFocus = true; 1.60 + maybeTest2(); 1.61 + }); 1.62 +} 1.63 + 1.64 +function eventHandler(e) { 1.65 + if (whitelistedKeyCodes.indexOf(e.keyCode) == -1 && 1.66 + blacklistedKeyCodes.indexOf(e.keyCode) == -1) { 1.67 + // See bug 856006: We sometimes get unexpected key presses, and we don't 1.68 + // know why. Don't turn the test orange over this. 1.69 + ok(true, "Ignoring unexpected " + e.type + 1.70 + " with keyCode " + e.keyCode + "."); 1.71 + return; 1.72 + } 1.73 + 1.74 + ok(e.type == 'keydown' || e.type == 'keypress' || e.type == 'keyup', 1.75 + "e.type was " + e.type + ", expected keydown, keypress, or keyup"); 1.76 + ok(!e.defaultPrevented, "expected !e.defaultPrevented"); 1.77 + ok(whitelistedKeyCodes.indexOf(e.keyCode) != -1, 1.78 + "Expected a whitelited keycode, but got " + e.keyCode + " instead."); 1.79 + 1.80 + nbEvents--; 1.81 + 1.82 + if (nbEvents == 0) { 1.83 + SimpleTest.finish(); 1.84 + return; 1.85 + } 1.86 + 1.87 + if (nbEvents < 0 && !finished) { 1.88 + ok(false, "got an unexpected event! " + e.type + " " + e.keyCode); 1.89 + } 1.90 +} 1.91 + 1.92 +function test2() { 1.93 + is(document.activeElement, iframe, "iframe should be focused"); 1.94 + 1.95 + addEventListener('keydown', eventHandler); 1.96 + addEventListener('keypress', eventHandler); 1.97 + addEventListener('keyup', eventHandler); 1.98 + 1.99 + // These events should not be received because they are not whitelisted. 1.100 + synthesizeKey("VK_A", {}); 1.101 + synthesizeKey("VK_B", {}); 1.102 + 1.103 + // These events should not be received because preventDefault is called. 1.104 + synthesizeKey("VK_ESCAPE", {}); 1.105 + 1.106 + // These events should be received. 1.107 + synthesizeKey("VK_F5", {}); 1.108 + synthesizeKey("VK_ESCAPE", {}); 1.109 + synthesizeKey("VK_PAGE_UP", {}); 1.110 + synthesizeKey("VK_PAGE_DOWN", {}); 1.111 + synthesizeKey("VK_CONTEXT_MENU", {}); 1.112 + synthesizeKey("VK_SLEEP", {}); 1.113 + finished = true; 1.114 +} 1.115 + 1.116 +addEventListener('testready', runTest);