This change affects developers who need to synthesize **native** mouse events in mochitest of any flavor.

Currently, these APIs take raw native event message as their param. I.e., they require helper functions returning different value for each platform. This causes some tests messy because of copying them from utility files.

Additionally these API don't take mouse button ID nor modifiers. The former is caused by `nsIDOMWindowUtils::SendNativeMouseEvent` was designed assuming that any platforms having native mouse press/release message for each button, but it's not true on Linux, macOS and Android. The latter is caused by that the APIs do not have an argument to specify it.

Bug 1691622 [1] will make them easier to use, and align the API style to `synthesizeNativeKeyEvent`.

First, `synthesizeNativeMouseClick*`, `synthesizeNativeMouseClickAtCenter` and `synthesizeMouseMove` will be merged to `synthesizeNativeMouseEvent*`. Then it'll take an `Object` param which contains a `type` member to specify which mouse event should be synthesized. It takes "mousemove", "click", "mousedown" and "mouseup".

Next, the `Object` param will contain `modifiers` member which is an `Object` containing `shitKey`, `ctrlKey`, `altKey`, `metaKey`, `capsLockKey`, `numLockKey`, `accelKey`, etc.

Next, the `Object` param contains `target` element. It's must not be `null` if you use APZ-aware version. `offsetX` and `offsetY` are relative to it, setting `atCenter` to `true` means to synthesize the native mouse event(s) at center of `target`.

Next, the `Object` param can contain `screenX` and `screenY`. When the caller knows screen pixels, these members are useful.

Next, you can specify in which unit `clientX`, `clientY`, `screenX` and `screenY` are only for `EventUtils` version. "inScreenPixels" means that they are in device pixels, "screenPixelPerCSSPixels" (this is default value) means that they are in CSS pixels with current zoom level. "screenPixelPerCSSPixelsNoOverride" means that they are in CSS pixels but ignoring zoom state (IIUC for the latter 2).

Finally, there will be `promiseNativeMouseEvent`, `synthesizeNativeMouseEventAndWaitForEvent`, `promiseNativeMouseEventAndWaitForEvent`.

Note that unfortunately, modifiers are not available on Windows and Android for now, and X1 and X2 button events can be synthesized only on Windows, but they may not be caused mouse events since they are typically converted to `WM_APPCOMMAND` message for "back" and "forward" navigation.

I hope this change will help you to write chrome and content collaborating test like related to xorigin event delivering and autoscrolling.

If you have some additional suggestions, let me know.


Masayuki Nakano <>
Working on DOM, Events, editor and IME handling for Gecko

dev-platform mailing list

Reply via email to