summaryrefslogtreecommitdiffstats
path: root/toolkit/content/tests/browser/browser_keyevents_during_autoscrolling.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/content/tests/browser/browser_keyevents_during_autoscrolling.js')
-rw-r--r--toolkit/content/tests/browser/browser_keyevents_during_autoscrolling.js120
1 files changed, 120 insertions, 0 deletions
diff --git a/toolkit/content/tests/browser/browser_keyevents_during_autoscrolling.js b/toolkit/content/tests/browser/browser_keyevents_during_autoscrolling.js
new file mode 100644
index 000000000..3fce47114
--- /dev/null
+++ b/toolkit/content/tests/browser/browser_keyevents_during_autoscrolling.js
@@ -0,0 +1,120 @@
+add_task(function * ()
+{
+ const kPrefName_AutoScroll = "general.autoScroll";
+ Services.prefs.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;
+
+ /**
+ * Encapsulates EventUtils.sendChar().
+ */
+ function sendChar(aChar)
+ {
+ key = aChar;
+ dispatchedKeyEvents = kNoKeyEvents;
+ EventUtils.sendChar(key);
+ is(dispatchedKeyEvents, expectedKeyEvents,
+ "unexpected key events were dispatched or not dispatched: " + key);
+ }
+
+ /**
+ * Encapsulates EventUtils.sendKey().
+ */
+ function sendKey(aKey)
+ {
+ key = aKey;
+ dispatchedKeyEvents = kNoKeyEvents;
+ EventUtils.sendKey(key);
+ is(dispatchedKeyEvents, expectedKeyEvents,
+ "unexpected key events were dispatched or not dispatched: " + key);
+ }
+
+ function onKey(aEvent)
+ {
+// if (aEvent.target != root && aEvent.target != root.ownerDocument.body) {
+// 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);
+ }
+
+ var dataUri = 'data:text/html,<body style="height:10000px;"></body>';
+
+ let loadedPromise = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
+ gBrowser.loadURI(dataUri);
+ yield loadedPromise;
+
+ yield SimpleTest.promiseFocus(gBrowser.selectedBrowser);
+
+ window.addEventListener("keydown", onKey, false);
+ window.addEventListener("keypress", onKey, false);
+ window.addEventListener("keyup", onKey, false);
+
+ // Test whether the key events are handled correctly under normal condition
+ expectedKeyEvents = kAllKeyEvents;
+ sendChar("A");
+
+ // Start autoscrolling by middle button click on the page
+ let shownPromise = BrowserTestUtils.waitForEvent(window, "popupshown", false,
+ event => event.originalTarget.className == "autoscroller");
+ yield BrowserTestUtils.synthesizeMouseAtPoint(10, 10, { button: 1 },
+ gBrowser.selectedBrowser);
+ yield shownPromise;
+
+ // Most key events should be eaten by the browser.
+ expectedKeyEvents = kNoKeyEvents;
+ sendChar("A");
+ sendKey("DOWN");
+ sendKey("RETURN");
+ sendKey("RETURN");
+ sendKey("HOME");
+ sendKey("END");
+ sendKey("TAB");
+ sendKey("RETURN");
+
+ // 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("ESCAPE");
+
+ // Test whether the key events are handled correctly under normal condition
+ expectedKeyEvents = kAllKeyEvents;
+ sendChar("A");
+
+ window.removeEventListener("keydown", onKey, false);
+ window.removeEventListener("keypress", onKey, false);
+ window.removeEventListener("keyup", onKey, false);
+
+ // restore the changed prefs
+ if (Services.prefs.prefHasUserValue(kPrefName_AutoScroll))
+ Services.prefs.clearUserPref(kPrefName_AutoScroll);
+
+ finish();
+});