Bug 1338396 - LoginManagerContent: Use Date.now() instead of event.timeStamp until high-res timestamps are shipping. r=johannh
MozReview-Commit-ID: GS8DgpyYnxU
--- 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");