summaryrefslogtreecommitdiffstats
path: root/dom/browser-element/mochitest/browserElement_SendEvent.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/browser-element/mochitest/browserElement_SendEvent.js')
-rw-r--r--dom/browser-element/mochitest/browserElement_SendEvent.js85
1 files changed, 85 insertions, 0 deletions
diff --git a/dom/browser-element/mochitest/browserElement_SendEvent.js b/dom/browser-element/mochitest/browserElement_SendEvent.js
new file mode 100644
index 000000000..a65d6f24f
--- /dev/null
+++ b/dom/browser-element/mochitest/browserElement_SendEvent.js
@@ -0,0 +1,85 @@
+/* Any copyright is dedicated to the public domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Test that sendMouseEvent dispatch events.
+"use strict";
+
+SimpleTest.waitForExplicitFinish();
+browserElementTestHelpers.setEnabledPref(true);
+
+function runTest() {
+ var iframe = document.createElement("iframe");
+ iframe.setAttribute('mozbrowser', 'true');
+ document.body.appendChild(iframe);
+ var x = 10;
+ var y = 10;
+ // First we force a reflow so that getChildProcessOffset actually returns
+ // meaningful data.
+ iframe.getBoundingClientRect();
+ // We need to make sure the event coordinates are actually inside the iframe,
+ // relative to the chome window.
+ var tabParent = SpecialPowers.wrap(iframe)
+ .QueryInterface(SpecialPowers.Ci.nsIFrameLoaderOwner)
+ .frameLoader.tabParent;
+ if (tabParent) {
+ let offsetX = {};
+ let offsetY = {};
+ tabParent.getChildProcessOffset(offsetX, offsetY);
+ x -= offsetX.value;
+ y -= offsetY.value;
+ }
+
+ iframe.addEventListener("mozbrowserloadend", function onloadend(e) {
+ iframe.sendMouseEvent("mousedown", x, y, 0, 1, 0);
+ });
+
+ iframe.addEventListener("mozbrowserlocationchange", function onlocchange(e) {
+ var a = document.createElement("a");
+ a.href = e.detail.url;
+
+ switch (a.hash) {
+ case "#mousedown":
+ ok(true, "Receive a mousedown event.");
+ iframe.sendMouseEvent("mousemove", x, y, 0, 0, 0);
+ break;
+ case "#mousemove":
+ ok(true, "Receive a mousemove event.");
+ iframe.sendMouseEvent("mouseup", x, y, 0, 1, 0);
+ break;
+ case "#mouseup":
+ ok(true, "Receive a mouseup event.");
+ break;
+ case "#click":
+ ok(true, "Receive a click event.");
+ if (SpecialPowers.getIntPref("dom.w3c_touch_events.enabled") != 0) {
+ iframe.sendTouchEvent("touchstart", [1], [x], [y], [2], [2],
+ [20], [0.5], 1, 0);
+ } else {
+ iframe.removeEventListener('mozbrowserlocationchange', onlocchange);
+ SimpleTest.finish();
+ }
+ break;
+ case "#touchstart":
+ ok(true, "Receive a touchstart event.");
+ iframe.sendTouchEvent("touchmove", [1], [x], [y], [2], [2],
+ [20], [0.5], 1, 0);
+ case "#touchmove":
+ ok(true, "Receive a touchmove event.");
+ iframe.sendTouchEvent("touchend", [1], [x], [y], [2], [2],
+ [20], [0.5], 1, 0);
+ break;
+ case "#touchend":
+ ok(true, "Receive a touchend event.");
+ iframe.sendTouchEvent("touchcancel", [1], [x], [y], [2], [2],
+ [20], [0.5], 1, 0);
+ iframe.removeEventListener('mozbrowserlocationchange', onlocchange);
+ SimpleTest.finish();
+ break;
+ }
+ });
+
+ iframe.src = "file_browserElement_SendEvent.html";
+
+}
+
+addEventListener('testready', runTest);