toolkit/content/tests/browser/browser_keyevents_during_autoscrolling.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 function test()
     2 {
     3   const kPrefName_AutoScroll = "general.autoScroll";
     4   Services.prefs.setBoolPref(kPrefName_AutoScroll, true);
     6   gBrowser.selectedTab = gBrowser.addTab();
     8   const kNoKeyEvents   = 0;
     9   const kKeyDownEvent  = 1;
    10   const kKeyPressEvent = 2;
    11   const kKeyUpEvent    = 4;
    12   const kAllKeyEvents  = 7;
    14   var expectedKeyEvents;
    15   var dispatchedKeyEvents;
    16   var key;
    17   var root;
    19   /**
    20    * Encapsulates EventUtils.sendChar().
    21    */
    22   function sendChar(aChar)
    23   {
    24     key = aChar;
    25     dispatchedKeyEvents = kNoKeyEvents;
    26     EventUtils.sendChar(key, gBrowser.contentWindow);
    27     is(dispatchedKeyEvents, expectedKeyEvents,
    28        "unexpected key events were dispatched or not dispatched: " + key);
    29   }
    31   /**
    32    * Encapsulates EventUtils.sendKey().
    33    */
    34   function sendKey(aKey)
    35   {
    36     key = aKey;
    37     dispatchedKeyEvents = kNoKeyEvents;
    38     EventUtils.sendKey(key, gBrowser.contentWindow);
    39     is(dispatchedKeyEvents, expectedKeyEvents,
    40        "unexpected key events were dispatched or not dispatched: " + key);
    41   }
    43   function onKey(aEvent)
    44   {
    45     if (aEvent.target != root && aEvent.target != root.ownerDocument.body) {
    46       ok(false, "unknown target: " + aEvent.target.tagName);
    47       return;
    48     }
    50     var keyFlag;
    51     switch (aEvent.type) {
    52       case "keydown":
    53         keyFlag = kKeyDownEvent;
    54         break;
    55       case "keypress":
    56         keyFlag = kKeyPressEvent;
    57         break;
    58       case "keyup":
    59         keyFlag = kKeyUpEvent;
    60         break;
    61       default:
    62         ok(false, "Unknown events: " + aEvent.type);
    63         return;
    64     }
    65     dispatchedKeyEvents |= keyFlag;
    66     is(keyFlag, expectedKeyEvents & keyFlag, aEvent.type + " fired: " + key);
    67   }
    69   waitForExplicitFinish();
    70   gBrowser.selectedBrowser.addEventListener("pageshow", onLoad, false);
    71   var dataUri = 'data:text/html,<body style="height:10000px;"></body>';
    72   gBrowser.loadURI(dataUri);
    74   function onLoad() {
    75     gBrowser.selectedBrowser.removeEventListener("pageshow", onLoad, false);
    76     waitForFocus(onFocus, content);
    77   }
    79   function onFocus() {
    80     var doc = gBrowser.contentDocument;
    82     root = doc.documentElement;
    83     root.addEventListener("keydown", onKey, true);
    84     root.addEventListener("keypress", onKey, true);
    85     root.addEventListener("keyup", onKey, true);
    87     // Test whether the key events are handled correctly under normal condition
    88     expectedKeyEvents = kAllKeyEvents;
    89     sendChar("A");
    91     // Start autoscrolling by middle button lick on the page
    92     EventUtils.synthesizeMouse(root, 10, 10, { button: 1 },
    93                                gBrowser.contentWindow);
    95     // Before continuing the test, we need to ensure that the IPC
    96     // message that starts autoscrolling has had time to arrive.
    97     executeSoon(continueTest);
    98   }
   100   function continueTest() {
   101     // Most key events should be eaten by the browser.
   102     expectedKeyEvents = kNoKeyEvents;
   103     sendChar("A");
   104     sendKey("DOWN");
   105     sendKey("RETURN");
   106     sendKey("RETURN");
   107     sendKey("HOME");
   108     sendKey("END");
   109     sendKey("TAB");
   110     sendKey("RETURN");
   112     // Finish autoscrolling by ESC key.  Note that only keydown and keypress
   113     // events are eaten because keyup event is fired *after* the autoscrolling
   114     // is finished.
   115     expectedKeyEvents = kKeyUpEvent;
   116     sendKey("ESCAPE");
   118     // Test whether the key events are handled correctly under normal condition
   119     expectedKeyEvents = kAllKeyEvents;
   120     sendChar("A");
   122     root.removeEventListener("keydown", onKey, true);
   123     root.removeEventListener("keypress", onKey, true);
   124     root.removeEventListener("keyup", onKey, true);
   126     // restore the changed prefs
   127     if (Services.prefs.prefHasUserValue(kPrefName_AutoScroll))
   128       Services.prefs.clearUserPref(kPrefName_AutoScroll);
   130     // cleaning-up
   131     gBrowser.removeCurrentTab();
   133     finish();
   134   }
   135 }

mercurial