mirror of
https://github.com/classilla/tenfourfox.git
synced 2025-01-14 02:32:34 +00:00
58 lines
1.8 KiB
JavaScript
58 lines
1.8 KiB
JavaScript
/*
|
|
* This code is used for handling synthesizeMouse in a content process.
|
|
* Generally it just delegates to EventUtils.js.
|
|
*/
|
|
|
|
// Set up a dummy environment so that EventUtils works. We need to be careful to
|
|
// pass a window object into each EventUtils method we call rather than having
|
|
// it rely on the |window| global.
|
|
var EventUtils = {};
|
|
EventUtils.window = {};
|
|
EventUtils.parent = EventUtils.window;
|
|
EventUtils._EU_Ci = Components.interfaces;
|
|
EventUtils._EU_Cc = Components.classes;
|
|
// EventUtils' `sendChar` function relies on the navigator to synthetize events.
|
|
EventUtils.navigator = content.document.defaultView.navigator;
|
|
EventUtils.KeyboardEvent = content.document.defaultView.KeyboardEvent;
|
|
|
|
Services.scriptloader.loadSubScript("chrome://mochikit/content/tests/SimpleTest/EventUtils.js", EventUtils);
|
|
|
|
addMessageListener("Test:SynthesizeMouse", (message) => {
|
|
let data = message.data;
|
|
let target = data.target;
|
|
if (typeof target == "string") {
|
|
target = content.document.querySelector(target);
|
|
}
|
|
else if (typeof data.targetFn == "string") {
|
|
let runnablestr = `
|
|
(() => {
|
|
return (${data.targetFn});
|
|
})();`
|
|
target = eval(runnablestr)();
|
|
}
|
|
else {
|
|
target = message.objects.object;
|
|
}
|
|
|
|
let left = data.x;
|
|
let top = data.y;
|
|
if (target) {
|
|
let rect = target.getBoundingClientRect();
|
|
left += rect.left;
|
|
top += rect.top;
|
|
|
|
if (data.event.centered) {
|
|
left += rect.width / 2;
|
|
top += rect.height / 2;
|
|
}
|
|
}
|
|
|
|
let result = EventUtils.synthesizeMouseAtPoint(left, top, data.event, content);
|
|
sendAsyncMessage("Test:SynthesizeMouseDone", { defaultPrevented: result });
|
|
});
|
|
|
|
addMessageListener("Test:SendChar", message => {
|
|
let result = EventUtils.sendChar(message.data.char, content);
|
|
sendAsyncMessage("Test:SendCharDone", { sendCharResult: result });
|
|
});
|