summaryrefslogtreecommitdiffstats
path: root/widget/tests/native_mouse_mac_window.xul
diff options
context:
space:
mode:
Diffstat (limited to 'widget/tests/native_mouse_mac_window.xul')
-rw-r--r--widget/tests/native_mouse_mac_window.xul773
1 files changed, 0 insertions, 773 deletions
diff --git a/widget/tests/native_mouse_mac_window.xul b/widget/tests/native_mouse_mac_window.xul
deleted file mode 100644
index 8680c3b1a..000000000
--- a/widget/tests/native_mouse_mac_window.xul
+++ /dev/null
@@ -1,773 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-
-<window id="NativeMenuWindow"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:html="http://www.w3.org/1999/xhtml"
- width="600"
- height="600"
- title="Native Mouse Event Test"
- orient="vertical">
- <script type="application/javascript"
- src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
-
- <box height="200" id="box"/>
- <menupopup id="popup" width="250" height="50"/>
- <panel id="panel" width="250" height="50" noautohide="true"/>
-
- <script type="application/javascript"><![CDATA[
-
- function ok(condition, message) {
- window.opener.wrappedJSObject.SimpleTest.ok(condition, message);
- }
-
- function is(a, b, message) {
- window.opener.wrappedJSObject.SimpleTest.is(a, b, message);
- }
-
- function todo(condition, message) {
- window.opener.wrappedJSObject.SimpleTest.todo(condition, message);
- }
-
- function todo_is(a, b, message) {
- window.opener.wrappedJSObject.SimpleTest.todo_is(a, b, message);
- }
-
- function onTestsFinished() {
- clearTimeout(gAfterLoopExecution);
- observe(window, eventMonitor, false);
- observe(gRightWindow, eventMonitor, false);
- observe(gPopup, eventMonitor, false);
- gRightWindow.close();
- var openerSimpleTest = window.opener.wrappedJSObject.SimpleTest;
- window.close();
- openerSimpleTest.finish();
- }
-
- const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
- const xulWin = 'data:application/vnd.mozilla.xul+xml,<?xml version="1.0"?><?xml-stylesheet href="chrome://global/skin" type="text/css"?><window xmlns="' + XUL_NS + '"/>';
-
- const NSLeftMouseDown = 1,
- NSLeftMouseUp = 2,
- NSRightMouseDown = 3,
- NSRightMouseUp = 4,
- NSMouseMoved = 5,
- NSLeftMouseDragged = 6,
- NSRightMouseDragged = 7,
- NSMouseEntered = 8,
- NSMouseExited = 9,
- NSKeyDown = 10,
- NSKeyUp = 11,
- NSFlagsChanged = 12,
- NSAppKitDefined = 13,
- NSSystemDefined = 14,
- NSApplicationDefined = 15,
- NSPeriodic = 16,
- NSCursorUpdate = 17,
- NSScrollWheel = 22,
- NSTabletPoint = 23,
- NSTabletProximity = 24,
- NSOtherMouseDown = 25,
- NSOtherMouseUp = 26,
- NSOtherMouseDragged = 27,
- NSEventTypeGesture = 29,
- NSEventTypeMagnify = 30,
- NSEventTypeSwipe = 31,
- NSEventTypeRotate = 18,
- NSEventTypeBeginGesture = 19,
- NSEventTypeEndGesture = 20;
-
- const NSAlphaShiftKeyMask = 1 << 16,
- NSShiftKeyMask = 1 << 17,
- NSControlKeyMask = 1 << 18,
- NSAlternateKeyMask = 1 << 19,
- NSCommandKeyMask = 1 << 20,
- NSNumericPadKeyMask = 1 << 21,
- NSHelpKeyMask = 1 << 22,
- NSFunctionKeyMask = 1 << 23;
-
- const gDebug = false;
-
- function printDebug(msg) { if (gDebug) dump(msg); }
-
- var gExpectedEvents = [];
- var gRightWindow = null, gPopup = null;
- var gCurrentMouseX = 0, gCurrentMouseY = 0;
- var gAfterLoopExecution = 0;
-
- function testMouse(x, y, msg, elem, win, exp, flags, callback) {
- clearExpectedEvents();
- var syntheticEvent = null;
- exp.forEach(function (expEv) {
- expEv.screenX = x;
- expEv.screenY = y;
- if (expEv.synthetic) {
- is(syntheticEvent, null,
- "Can't handle two synthetic events in a single testMouse call");
- syntheticEvent = expEv;
- }
- gExpectedEvents.push(expEv);
- });
- printDebug("sending event: " + x + ", " + y + " (" + msg + ")\n");
- gCurrentMouseX = x;
- gCurrentMouseY = y;
- var utils = win.QueryInterface(Components.interfaces.nsIInterfaceRequestor).
- getInterface(Components.interfaces.nsIDOMWindowUtils);
- var callbackFunc = function() {
- clearExpectedEvents();
- callback();
- }
- if (syntheticEvent) {
- // Set up this listener before we sendNativeMouseEvent, just
- // in case that synchronously calls us.
- eventListenOnce(syntheticEvent.target, syntheticEvent.type,
- // Trigger callbackFunc async, so we're not assuming
- // anything about how our listener gets ordered with
- // others.
- function () { SimpleTest.executeSoon(callbackFunc) });
- }
- utils.sendNativeMouseEvent(x, y, msg, flags || 0, elem);
- if (!syntheticEvent) {
- gAfterLoopExecution = setTimeout(callbackFunc, 0);
- }
- }
-
- function eventListenOnce(elem, name, callback) {
- elem.addEventListener(name, function(e) {
- elem.removeEventListener(name, arguments.callee, false);
- callback(e);
- }, false);
- }
-
- function focusAndThen(win, callback) {
- eventListenOnce(win, "focus", callback);
- printDebug("focusing a window\n");
- win.focus();
- }
-
- function eventToString(e) {
- return JSON.stringify({
- type: e.type, target: e.target.nodeName, screenX: e.screenX, screenY: e.screenY
- });
- }
-
- function clearExpectedEvents() {
- while (gExpectedEvents.length > 0) {
- var expectedEvent = gExpectedEvents.shift();
- var errFun = expectedEvent.shouldFireButDoesnt ? todo : ok;
- errFun(false, "Didn't receive expected event: " + eventToString(expectedEvent));
- }
- }
-
- var gEventNum = 0;
-
- function eventMonitor(e) {
- printDebug("got event: " + eventToString(e) + "\n");
- processEvent(e);
- }
-
- function processEvent(e) {
- if (e.screenX != gCurrentMouseX || e.screenY != gCurrentMouseY) {
- todo(false, "Oh no! Received a stray event from a confused tracking area. Aborting test.");
- onTestsFinished();
- return;
- }
- var expectedEvent = gExpectedEvents.shift();
- if (!expectedEvent) {
- ok(false, "received event I didn't expect: " + eventToString(e));
- return;
- }
- if (e.type != expectedEvent.type) {
- // Didn't get expectedEvent.
- var errFun = expectedEvent.shouldFireButDoesnt ? todo : ok;
- errFun(false, "Didn't receive expected event: " + eventToString(expectedEvent));
- return processEvent(e);
- }
- gEventNum++;
- is(e.screenX, expectedEvent.screenX, gEventNum + " | wrong X coord for event " + eventToString(e));
- is(e.screenY, expectedEvent.screenY, gEventNum + " | wrong Y coord for event " + eventToString(e));
- is(e.target, expectedEvent.target, gEventNum + " | wrong target for event " + eventToString(e));
- if (expectedEvent.firesButShouldnt) {
- todo(false, gEventNum + " | Got an event that should not have fired: " + eventToString(e));
- }
- }
-
- function observe(elem, fun, add) {
- var addOrRemove = add ? "addEventListener" : "removeEventListener";
- elem[addOrRemove]("mousemove", fun, false);
- elem[addOrRemove]("mouseover", fun, false);
- elem[addOrRemove]("mouseout", fun, false);
- elem[addOrRemove]("mousedown", fun, false);
- elem[addOrRemove]("mouseup", fun, false);
- elem[addOrRemove]("click", fun, false);
- }
-
- function start() {
- window.resizeTo(200, 200);
- window.moveTo(50, 50);
- gRightWindow = open(xulWin, '', 'chrome,screenX=300,screenY=50,width=200,height=200');
- eventListenOnce(gRightWindow, "focus", function () {
- focusAndThen(window, runTests);
- });
- gPopup = document.getElementById("popup");
- }
-
- function runTests() {
- observe(window, eventMonitor, true);
- observe(gRightWindow, eventMonitor, true);
- var left = window, right = gRightWindow;
- var leftElem = document.getElementById("box");
- var rightElem = gRightWindow.document.documentElement;
- var panel = document.getElementById("panel");
- var tooltip = (function createTooltipInRightWindow() {
- var _tooltip = right.document.createElementNS(XUL_NS, "tooltip");
- _tooltip.setAttribute("id", "tip");
- _tooltip.setAttribute("width", "80");
- _tooltip.setAttribute("height", "20");
- right.document.documentElement.appendChild(_tooltip);
- return _tooltip;
- })();
- var tests = [
-
- // Part 1: Disallow click-through
-
- function blockClickThrough(callback) {
- document.documentElement.setAttribute("clickthrough", "never");
- gRightWindow.document.documentElement.setAttribute("clickthrough", "never");
- callback();
- },
- // Enter the left window, which is focused.
- [150, 150, NSMouseMoved, null, left, [
- { type: "mouseover", target: leftElem },
- { type: "mousemove", target: leftElem }
- ]],
- // Test that moving inside the window fires mousemove events.
- [170, 150, NSMouseMoved, null, left, [
- { type: "mousemove", target: leftElem },
- ]],
- // Leaving the window should fire a mouseout event...
- [170, 20, NSMouseMoved, null, left, [
- { type: "mouseout", target: leftElem },
- ]],
- // ... and entering a mouseover event.
- [170, 120, NSMouseMoved, null, left, [
- { type: "mouseover", target: leftElem },
- { type: "mousemove", target: leftElem },
- ]],
- // Move over the right window, which is inactive.
- // Inactive windows shouldn't respond to mousemove events when clickthrough="never",
- // so we should only get a mouseout event, no mouseover event.
- [400, 150, NSMouseMoved, null, right, [
- { type: "mouseout", target: leftElem },
- ]],
- // Left-clicking while holding Cmd and middle clicking should work even
- // on inactive windows, but without making them active.
- [400, 150, NSLeftMouseDown, null, right, [
- { type: "mousedown", target: rightElem },
- ], NSCommandKeyMask],
- [400, 150, NSLeftMouseUp, null, right, [
- { type: "mouseup", target: rightElem },
- { type: "click", target: rightElem },
- ], NSCommandKeyMask],
- [400, 150, NSOtherMouseDown, null, right, [
- { type: "mousedown", target: rightElem },
- ]],
- [400, 150, NSOtherMouseUp, null, right, [
- { type: "mouseup", target: rightElem },
- { type: "click", target: rightElem },
- ]],
- // Clicking an inactive window should make it active and fire a mouseover
- // event.
- [400, 150, NSLeftMouseDown, null, right, [
- { type: "mouseover", target: rightElem, synthetic: true },
- ]],
- [400, 150, NSLeftMouseUp, null, right, [
- ]],
- // Now it's focused, so we should get a mousedown event when clicking.
- [400, 150, NSLeftMouseDown, null, right, [
- { type: "mousedown", target: rightElem },
- ]],
- // Let's drag to the right without letting the button go.
- [410, 150, NSLeftMouseDragged, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- // Let go of the mouse.
- [410, 150, NSLeftMouseUp, null, right, [
- { type: "mouseup", target: rightElem },
- { type: "click", target: rightElem },
- ]],
- // Move the mouse back over the left window, which is inactive.
- [150, 170, NSMouseMoved, null, left, [
- { type: "mouseout", target: rightElem },
- ]],
- // Now we're being sneaky. The left window is inactive, but *right*-clicks to it
- // should still get through. Test that.
- // Ideally we'd be bracketing that event with over and out events, too, but it
- // probably doesn't matter too much.
- [150, 170, NSRightMouseDown, null, left, [
- { type: "mouseover", target: leftElem, shouldFireButDoesnt: true },
- { type: "mousedown", target: leftElem },
- { type: "mouseout", target: leftElem, shouldFireButDoesnt: true },
- ]],
- // Let go of the mouse.
- [150, 170, NSRightMouseUp, null, left, [
- { type: "mouseover", target: leftElem, shouldFireButDoesnt: true },
- { type: "mouseup", target: leftElem },
- { type: "click", target: leftElem },
- { type: "mouseout", target: leftElem, shouldFireButDoesnt: true },
- ]],
- // Right clicking hasn't focused it, so the window is still inactive.
- // Let's focus it; this time without the mouse, for variaton's sake.
- // Still, mouseout and mouseover events should fire.
- function raiseLeftWindow(callback) {
- clearExpectedEvents();
- gExpectedEvents.push({ screenX: 150, screenY: 170, type: "mouseover", target: leftElem });
- // We have to be a bit careful here. The synthetic mouse event may
- // not fire for a bit after we focus the left window.
- eventListenOnce(leftElem, "mouseover", function() {
- // Trigger callback async, so we're not assuming
- // anything about how our listener gets ordered with others.
- SimpleTest.executeSoon(callback);
- });
- printDebug("focusing left window");
- left.focus();
- },
- // It's active, so it should respond to mousemove events now.
- [150, 170, NSMouseMoved, null, left, [
- { type: "mousemove", target: leftElem },
- ]],
- // This was boring... let's introduce a popup. It will overlap both the left
- // and the right window.
- function openPopupInLeftWindow(callback) {
- eventListenOnce(gPopup, "popupshown", callback);
- gPopup.openPopupAtScreen(150, 50, true);
- },
- // Move the mouse over the popup.
- [200, 80, NSMouseMoved, gPopup, left, [
- { type: "mouseout", target: leftElem },
- { type: "mouseover", target: gPopup },
- { type: "mousemove", target: gPopup },
- ]],
- // Move the mouse back over the left window outside the popup.
- [160, 170, NSMouseMoved, null, left, [
- { type: "mouseout", target: gPopup },
- { type: "mouseover", target: leftElem },
- { type: "mousemove", target: leftElem },
- ]],
- // Back over the popup...
- [190, 80, NSMouseMoved, gPopup, left, [
- { type: "mouseout", target: leftElem },
- { type: "mouseover", target: gPopup },
- { type: "mousemove", target: gPopup },
- ]],
- // ...and over into the right window.
- // It's inactive, so it shouldn't get mouseover events yet.
- [400, 170, NSMouseMoved, null, right, [
- { type: "mouseout", target: gPopup },
- ]],
- // Again, no mouse events please, even though a popup is open. (bug 425556)
- [400, 180, NSMouseMoved, null, right, [
- ]],
- // Activate the right window with a click.
- // This will close the popup and make the mouse enter the right window.
- [400, 180, NSLeftMouseDown, null, right, [
- { type: "mouseover", target: rightElem, synthetic: true },
- ]],
- [400, 180, NSLeftMouseUp, null, right, [
- ]],
- function verifyPopupClosed2(callback) {
- is(gPopup.popupBoxObject.popupState, "closed", "popup should have closed when clicking");
- callback();
- },
- // Now the right window is active; click it again, just for fun.
- [400, 180, NSLeftMouseDown, null, right, [
- { type: "mousedown", target: rightElem },
- ]],
- [400, 180, NSLeftMouseUp, null, right, [
- { type: "mouseup", target: rightElem },
- { type: "click", target: rightElem },
- ]],
-
- // Time for our next trick: a tooltip!
- // Install the tooltip, but don't show it yet.
- function setTooltip(callback) {
- rightElem.setAttribute("tooltip", "tip");
- gExpectedEvents.push({ screenX: 410, screenY: 180, type: "mousemove", target: rightElem });
- eventListenOnce(rightElem, "popupshown", callback);
- gCurrentMouseX = 410;
- gCurrentMouseY = 180;
- var utils = right.QueryInterface(Components.interfaces.nsIInterfaceRequestor).
- getInterface(Components.interfaces.nsIDOMWindowUtils);
- utils.sendNativeMouseEvent(410, 180, NSMouseMoved, 0, null);
- },
- // Now the tooltip is visible.
- // Move the mouse a little to the right.
- [411, 180, NSMouseMoved, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- // Move another pixel.
- [412, 180, NSMouseMoved, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- // Move up and click to make the tooltip go away.
- [412, 80, NSMouseMoved, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- [412, 80, NSLeftMouseDown, null, right, [
- { type: "mousedown", target: rightElem },
- ]],
- [412, 80, NSLeftMouseUp, null, right, [
- { type: "mouseup", target: rightElem },
- { type: "click", target: rightElem },
- ]],
- // OK, next round. Open a panel in the left window, which is inactive.
- function openPanel(callback) {
- eventListenOnce(panel, "popupshown", callback);
- panel.openPopupAtScreen(150, 150, false);
- },
- // The panel is parented, so it will be z-ordered over its parent but
- // under the active window.
- // Now we move the mouse over the part where the panel rect intersects the
- // right window's rect. Since the panel is under the window, all the events
- // should target the right window.
- [390, 170, NSMouseMoved, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- [390, 171, NSMouseMoved, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- [391, 171, NSMouseMoved, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- // Now move off the right window, so that the mouse is directly over the
- // panel.
- [260, 170, NSMouseMoved, panel, left, [
- { type: "mouseout", target: rightElem },
- ]],
- [260, 171, NSMouseMoved, panel, left, [
- ]],
- [261, 171, NSMouseMoved, panel, left, [
- ]],
- // Let's be evil and click it.
- [261, 171, NSLeftMouseDown, panel, left, [
- ]],
- [261, 171, NSLeftMouseUp, panel, left, [
- ]],
- // This didn't focus the window, unfortunately, so let's do it ourselves.
- function raiseLeftWindowTakeTwo(callback) {
- focusAndThen(left, callback);
- },
- // Now mouse events should get through to the panel (which is now over the
- // right window).
- [387, 170, NSMouseMoved, panel, left, [
- { type: "mouseover", target: panel },
- { type: "mousemove", target: panel },
- ]],
- [387, 171, NSMouseMoved, panel, left, [
- { type: "mousemove", target: panel },
- ]],
- [388, 171, NSMouseMoved, panel, left, [
- { type: "mousemove", target: panel },
- ]],
- // Click the panel.
- [388, 171, NSLeftMouseDown, panel, left, [
- { type: "mousedown", target: panel }
- ]],
- [388, 171, NSLeftMouseUp, panel, left, [
- { type: "mouseup", target: panel },
- { type: "click", target: panel },
- ]],
-
- // Last test for this part: Hit testing in the Canyon of Nowhere -
- // the pixel row directly south of the panel, over the left window.
- // Before bug 515003 we wrongly thought the mouse wasn't over any window.
- [173, 200, NSMouseMoved, null, left, [
- { type: "mouseout", target: panel },
- { type: "mouseover", target: leftElem },
- { type: "mousemove", target: leftElem },
- ]],
- [173, 201, NSMouseMoved, null, left, [
- { type: "mousemove", target: leftElem },
- ]],
-
- // Part 2: Allow click-through
-
- function hideThatPanel(callback) {
- eventListenOnce(panel, "popuphidden", callback);
- panel.hidePopup();
- },
- function unblockClickThrough(callback) {
- document.documentElement.removeAttribute("clickthrough");
- gRightWindow.document.documentElement.removeAttribute("clickthrough");
- callback();
- },
- // Enter the left window, which is focused.
- [150, 150, NSMouseMoved, null, left, [
- { type: "mousemove", target: leftElem }
- ]],
- // Test that moving inside the window fires mousemove events.
- [170, 150, NSMouseMoved, null, left, [
- { type: "mousemove", target: leftElem },
- ]],
- // Leaving the window should fire a mouseout event...
- [170, 20, NSMouseMoved, null, left, [
- { type: "mouseout", target: leftElem },
- ]],
- // ... and entering a mouseover event.
- [170, 120, NSMouseMoved, null, left, [
- { type: "mouseover", target: leftElem },
- { type: "mousemove", target: leftElem },
- ]],
- // Move over the right window, which is inactive but still accepts
- // mouse events.
- [400, 150, NSMouseMoved, null, right, [
- { type: "mouseout", target: leftElem },
- { type: "mouseover", target: rightElem },
- { type: "mousemove", target: rightElem },
- ]],
- // Left-clicking while holding Cmd and middle clicking should work
- // on inactive windows, but without making them active.
- [400, 150, NSLeftMouseDown, null, right, [
- { type: "mousedown", target: rightElem },
- ], NSCommandKeyMask],
- [400, 150, NSLeftMouseUp, null, right, [
- { type: "mouseup", target: rightElem },
- { type: "click", target: rightElem },
- ], NSCommandKeyMask],
- [400, 150, NSOtherMouseDown, null, right, [
- { type: "mousedown", target: rightElem },
- ]],
- [400, 150, NSOtherMouseUp, null, right, [
- { type: "mouseup", target: rightElem },
- { type: "click", target: rightElem },
- ]],
- // Clicking an inactive window should make it active
- [400, 150, NSLeftMouseDown, null, right, [
- { type: "mousedown", target: rightElem },
- ]],
- [400, 150, NSLeftMouseUp, null, right, [
- { type: "mouseup", target: rightElem },
- { type: "click", target: rightElem },
- ]],
- // Now it's focused.
- [401, 150, NSLeftMouseDown, null, right, [
- { type: "mousedown", target: rightElem },
- ]],
- // Let's drag to the right without letting the button go.
- [410, 150, NSLeftMouseDragged, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- // Let go of the mouse.
- [410, 150, NSLeftMouseUp, null, right, [
- { type: "mouseup", target: rightElem },
- { type: "click", target: rightElem },
- ]],
- // Move the mouse back over the left window, which is inactive.
- [150, 170, NSMouseMoved, null, left, [
- { type: "mouseout", target: rightElem },
- { type: "mouseover", target: leftElem },
- { type: "mousemove", target: leftElem },
- ]],
- // Right-click it.
- [150, 170, NSRightMouseDown, null, left, [
- { type: "mousedown", target: leftElem },
- ]],
- // Let go of the mouse.
- [150, 170, NSRightMouseUp, null, left, [
- { type: "mouseup", target: leftElem },
- { type: "click", target: leftElem },
- ]],
- // Right clicking hasn't focused it, so the window is still inactive.
- // Let's focus it; this time without the mouse, for variaton's sake.
- function raiseLeftWindow(callback) {
- clearExpectedEvents();
- focusAndThen(left, function () { SimpleTest.executeSoon(callback); });
- },
- // It's active and should still respond to mousemove events.
- [150, 170, NSMouseMoved, null, left, [
- { type: "mousemove", target: leftElem },
- ]],
-
- // This was boring... let's introduce a popup. It will overlap both the left
- // and the right window.
- function openPopupInLeftWindow(callback) {
- eventListenOnce(gPopup, "popupshown", callback);
- gPopup.openPopupAtScreen(150, 50, true);
- },
- // Move the mouse over the popup.
- [200, 80, NSMouseMoved, gPopup, left, [
- { type: "mouseout", target: leftElem },
- { type: "mouseover", target: gPopup },
- { type: "mousemove", target: gPopup },
- ]],
- // Move the mouse back over the left window outside the popup.
- [160, 170, NSMouseMoved, null, left, [
- { type: "mouseout", target: gPopup },
- { type: "mouseover", target: leftElem },
- { type: "mousemove", target: leftElem },
- ]],
- // Back over the popup...
- [190, 80, NSMouseMoved, gPopup, left, [
- { type: "mouseout", target: leftElem },
- { type: "mouseover", target: gPopup },
- { type: "mousemove", target: gPopup },
- ]],
- // ...and over into the right window.
- [400, 170, NSMouseMoved, null, right, [
- { type: "mouseout", target: gPopup },
- { type: "mouseover", target: rightElem },
- { type: "mousemove", target: rightElem },
- ]],
- [400, 180, NSMouseMoved, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- // Activate the right window with a click.
- [400, 180, NSLeftMouseDown, null, right, [
- { type: "mousedown", target: rightElem },
- ]],
- [400, 180, NSLeftMouseUp, null, right, [
- { type: "mouseup", target: rightElem },
- { type: "click", target: rightElem },
- ]],
- function verifyPopupClosed2(callback) {
- is(gPopup.popupBoxObject.popupState, "closed", "popup should have closed when clicking");
- callback();
- },
- // Now the right window is active; click it again, just for fun.
- [400, 180, NSLeftMouseDown, null, right, [
- { type: "mousedown", target: rightElem },
- ]],
- [400, 180, NSLeftMouseUp, null, right, [
- { type: "mouseup", target: rightElem },
- { type: "click", target: rightElem },
- ]],
-
- // Time for our next trick: a tooltip!
- // Install the tooltip, but don't show it yet.
- function setTooltip2(callback) {
- rightElem.setAttribute("tooltip", "tip");
- gExpectedEvents.push({ screenX: 410, screenY: 180, type: "mousemove", target: rightElem });
- eventListenOnce(rightElem, "popupshown", callback);
- gCurrentMouseX = 410;
- gCurrentMouseY = 180;
- var utils = right.QueryInterface(Components.interfaces.nsIInterfaceRequestor).
- getInterface(Components.interfaces.nsIDOMWindowUtils);
- utils.sendNativeMouseEvent(410, 180, NSMouseMoved, 0, null);
- },
- // Now the tooltip is visible.
- // Move the mouse a little to the right.
- [411, 180, NSMouseMoved, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- // Move another pixel.
- [412, 180, NSMouseMoved, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- // Move up and click to make the tooltip go away.
- [412, 80, NSMouseMoved, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- [412, 80, NSLeftMouseDown, null, right, [
- { type: "mousedown", target: rightElem },
- ]],
- [412, 80, NSLeftMouseUp, null, right, [
- { type: "mouseup", target: rightElem },
- { type: "click", target: rightElem },
- ]],
- // OK, next round. Open a panel in the left window, which is inactive.
- function openPanel2(callback) {
- eventListenOnce(panel, "popupshown", callback);
- panel.openPopupAtScreen(150, 150, false);
- },
- // The panel is parented, so it will be z-ordered over its parent but
- // under the active window.
- // Now we move the mouse over the part where the panel rect intersects the
- // right window's rect. Since the panel is under the window, all the events
- // should target the right window.
- [390, 170, NSMouseMoved, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- [390, 171, NSMouseMoved, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- [391, 171, NSMouseMoved, null, right, [
- { type: "mousemove", target: rightElem },
- ]],
- // Now move off the right window, so that the mouse is directly over the
- // panel.
- [260, 170, NSMouseMoved, panel, left, [
- { type: "mouseout", target: rightElem },
- { type: "mouseover", target: panel },
- { type: "mousemove", target: panel },
- ]],
- [260, 171, NSMouseMoved, panel, left, [
- { type: "mousemove", target: panel },
- ]],
- [261, 171, NSMouseMoved, panel, left, [
- { type: "mousemove", target: panel },
- ]],
- // Let's be evil and click it.
- [261, 171, NSLeftMouseDown, panel, left, [
- { type: "mousedown", target: panel },
- ]],
- [261, 171, NSLeftMouseUp, panel, left, [
- { type: "mouseup", target: panel },
- { type: "click", target: panel },
- ]],
- // This didn't focus the window, unfortunately, so let's do it ourselves.
- function raiseLeftWindowTakeTwo(callback) {
- focusAndThen(left, callback);
- },
- [387, 170, NSMouseMoved, panel, left, [
- { type: "mousemove", target: panel },
- ]],
- [387, 171, NSMouseMoved, panel, left, [
- { type: "mousemove", target: panel },
- ]],
- [388, 171, NSMouseMoved, panel, left, [
- { type: "mousemove", target: panel },
- ]],
- // Click the panel.
- [388, 171, NSLeftMouseDown, panel, left, [
- { type: "mousedown", target: panel }
- ]],
- [388, 171, NSLeftMouseUp, panel, left, [
- { type: "mouseup", target: panel },
- { type: "click", target: panel },
- ]],
-
- // Last test for today: Hit testing in the Canyon of Nowhere -
- // the pixel row directly south of the panel, over the left window.
- // Before bug 515003 we wrongly thought the mouse wasn't over any window.
- [173, 200, NSMouseMoved, null, left, [
- { type: "mouseout", target: panel },
- { type: "mouseover", target: leftElem },
- { type: "mousemove", target: leftElem },
- ]],
- [173, 201, NSMouseMoved, null, left, [
- { type: "mousemove", target: leftElem },
- ]],
- ];
- function runNextTest() {
- if (!tests.length)
- return onTestsFinished();
-
- var test = tests.shift();
- if (typeof test == "function")
- return test(runNextTest);
-
- var [x, y, msg, elem, win, exp, flags] = test;
- testMouse(x, y, msg, elem, win, exp, flags, runNextTest);
- }
- runNextTest();
- }
-
- SimpleTest.waitForFocus(start);
-
- ]]></script>
-</window>