Bug 1338396 - LoginManagerContent: Use Date.now() instead of event.timeStamp until high-res timestamps are shipping. r=johannh draft
authorMatthew Noorenberghe <mozilla@noorenberghe.ca>
Mon, 13 Feb 2017 23:49:16 +0800
changeset 482878 b6fb857bee06fb62e5e2e7f02aaebca9054b4fe4
parent 482430 4ec373fafebf79846cd5fde0561ac02fa0bb9647
child 545523 d5d68a8ee5c0edc41dd1f3e55ef172c274604122
push id45181
push usermozilla@noorenberghe.ca
push dateMon, 13 Feb 2017 15:49:51 +0000
reviewersjohannh
bugs1338396
milestone54.0a1
Bug 1338396 - LoginManagerContent: Use Date.now() instead of event.timeStamp until high-res timestamps are shipping. r=johannh MozReview-Commit-ID: GS8DgpyYnxU
toolkit/components/passwordmgr/LoginManagerContent.jsm
--- a/toolkit/components/passwordmgr/LoginManagerContent.jsm
+++ b/toolkit/components/passwordmgr/LoginManagerContent.jsm
@@ -125,17 +125,19 @@ var observer = {
     switch (aEvent.type) {
       // Only used for username fields.
       case "focus": {
         LoginManagerContent._onUsernameFocus(aEvent);
         break;
       }
 
       case "contextmenu": {
-        gLastContextMenuEventTimeStamp = aEvent.timeStamp;
+        // Date.now() is used instead of event.timeStamp since
+        // dom.event.highrestimestamp.enabled isn't true on all channels yet.
+        gLastContextMenuEventTimeStamp = Date.now();
         break;
       }
 
       default: {
         throw new Error("Unexpected event");
       }
     }
   },
@@ -573,21 +575,25 @@ var LoginManagerContent = {
     }
 
     /*
      * A `focus` event is fired before a `contextmenu` event if a user right-clicks into an
      * unfocused field. In that case we don't want to show both autocomplete and a context menu
      * overlapping so we spin the event loop to see if a `contextmenu` event is coming next. If no
      * `contextmenu` event was seen and the focused field is still focused by the form fill
      * controller then show the autocomplete popup.
+     * Date.now() is used instead of event.timeStamp since dom.event.highrestimestamp.enabled isn't
+     * true on all channels yet.
      */
+    let timestamp = Date.now();
     setTimeout(function maybeOpenAutocompleteAfterFocus() {
-      // Even though the `focus` event happens first, its .timeStamp is greater in
-      // testing and I don't want to rely on that so the absolute value is used.
-      let timeDiff = Math.abs(gLastContextMenuEventTimeStamp - event.timeStamp);
+      // Even though the `focus` event happens first in testing, I don't want to
+      // rely on that since it was supposedly in the opposite order before. Use
+      // the absolute value to handle both orders.
+      let timeDiff = Math.abs(gLastContextMenuEventTimeStamp - timestamp);
       if (timeDiff < AUTOCOMPLETE_AFTER_CONTEXTMENU_THRESHOLD_MS) {
         log("Not opening autocomplete after focus since a context menu was opened within",
             timeDiff, "ms");
         return;
       }
 
       if (this._formFillService.focusedInput == focusedField) {
         log("maybeOpenAutocompleteAfterFocus: Opening the autocomplete popup");