1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/content/tests/browser/browser_keyevents_during_autoscrolling.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,135 @@ 1.4 +function test() 1.5 +{ 1.6 + const kPrefName_AutoScroll = "general.autoScroll"; 1.7 + Services.prefs.setBoolPref(kPrefName_AutoScroll, true); 1.8 + 1.9 + gBrowser.selectedTab = gBrowser.addTab(); 1.10 + 1.11 + const kNoKeyEvents = 0; 1.12 + const kKeyDownEvent = 1; 1.13 + const kKeyPressEvent = 2; 1.14 + const kKeyUpEvent = 4; 1.15 + const kAllKeyEvents = 7; 1.16 + 1.17 + var expectedKeyEvents; 1.18 + var dispatchedKeyEvents; 1.19 + var key; 1.20 + var root; 1.21 + 1.22 + /** 1.23 + * Encapsulates EventUtils.sendChar(). 1.24 + */ 1.25 + function sendChar(aChar) 1.26 + { 1.27 + key = aChar; 1.28 + dispatchedKeyEvents = kNoKeyEvents; 1.29 + EventUtils.sendChar(key, gBrowser.contentWindow); 1.30 + is(dispatchedKeyEvents, expectedKeyEvents, 1.31 + "unexpected key events were dispatched or not dispatched: " + key); 1.32 + } 1.33 + 1.34 + /** 1.35 + * Encapsulates EventUtils.sendKey(). 1.36 + */ 1.37 + function sendKey(aKey) 1.38 + { 1.39 + key = aKey; 1.40 + dispatchedKeyEvents = kNoKeyEvents; 1.41 + EventUtils.sendKey(key, gBrowser.contentWindow); 1.42 + is(dispatchedKeyEvents, expectedKeyEvents, 1.43 + "unexpected key events were dispatched or not dispatched: " + key); 1.44 + } 1.45 + 1.46 + function onKey(aEvent) 1.47 + { 1.48 + if (aEvent.target != root && aEvent.target != root.ownerDocument.body) { 1.49 + ok(false, "unknown target: " + aEvent.target.tagName); 1.50 + return; 1.51 + } 1.52 + 1.53 + var keyFlag; 1.54 + switch (aEvent.type) { 1.55 + case "keydown": 1.56 + keyFlag = kKeyDownEvent; 1.57 + break; 1.58 + case "keypress": 1.59 + keyFlag = kKeyPressEvent; 1.60 + break; 1.61 + case "keyup": 1.62 + keyFlag = kKeyUpEvent; 1.63 + break; 1.64 + default: 1.65 + ok(false, "Unknown events: " + aEvent.type); 1.66 + return; 1.67 + } 1.68 + dispatchedKeyEvents |= keyFlag; 1.69 + is(keyFlag, expectedKeyEvents & keyFlag, aEvent.type + " fired: " + key); 1.70 + } 1.71 + 1.72 + waitForExplicitFinish(); 1.73 + gBrowser.selectedBrowser.addEventListener("pageshow", onLoad, false); 1.74 + var dataUri = 'data:text/html,<body style="height:10000px;"></body>'; 1.75 + gBrowser.loadURI(dataUri); 1.76 + 1.77 + function onLoad() { 1.78 + gBrowser.selectedBrowser.removeEventListener("pageshow", onLoad, false); 1.79 + waitForFocus(onFocus, content); 1.80 + } 1.81 + 1.82 + function onFocus() { 1.83 + var doc = gBrowser.contentDocument; 1.84 + 1.85 + root = doc.documentElement; 1.86 + root.addEventListener("keydown", onKey, true); 1.87 + root.addEventListener("keypress", onKey, true); 1.88 + root.addEventListener("keyup", onKey, true); 1.89 + 1.90 + // Test whether the key events are handled correctly under normal condition 1.91 + expectedKeyEvents = kAllKeyEvents; 1.92 + sendChar("A"); 1.93 + 1.94 + // Start autoscrolling by middle button lick on the page 1.95 + EventUtils.synthesizeMouse(root, 10, 10, { button: 1 }, 1.96 + gBrowser.contentWindow); 1.97 + 1.98 + // Before continuing the test, we need to ensure that the IPC 1.99 + // message that starts autoscrolling has had time to arrive. 1.100 + executeSoon(continueTest); 1.101 + } 1.102 + 1.103 + function continueTest() { 1.104 + // Most key events should be eaten by the browser. 1.105 + expectedKeyEvents = kNoKeyEvents; 1.106 + sendChar("A"); 1.107 + sendKey("DOWN"); 1.108 + sendKey("RETURN"); 1.109 + sendKey("RETURN"); 1.110 + sendKey("HOME"); 1.111 + sendKey("END"); 1.112 + sendKey("TAB"); 1.113 + sendKey("RETURN"); 1.114 + 1.115 + // Finish autoscrolling by ESC key. Note that only keydown and keypress 1.116 + // events are eaten because keyup event is fired *after* the autoscrolling 1.117 + // is finished. 1.118 + expectedKeyEvents = kKeyUpEvent; 1.119 + sendKey("ESCAPE"); 1.120 + 1.121 + // Test whether the key events are handled correctly under normal condition 1.122 + expectedKeyEvents = kAllKeyEvents; 1.123 + sendChar("A"); 1.124 + 1.125 + root.removeEventListener("keydown", onKey, true); 1.126 + root.removeEventListener("keypress", onKey, true); 1.127 + root.removeEventListener("keyup", onKey, true); 1.128 + 1.129 + // restore the changed prefs 1.130 + if (Services.prefs.prefHasUserValue(kPrefName_AutoScroll)) 1.131 + Services.prefs.clearUserPref(kPrefName_AutoScroll); 1.132 + 1.133 + // cleaning-up 1.134 + gBrowser.removeCurrentTab(); 1.135 + 1.136 + finish(); 1.137 + } 1.138 +}