summaryrefslogtreecommitdiffstats
path: root/layout/forms/test/test_bug665540.html
blob: 51f8f568af72ef9e4e5d242bdd9d4f2947ca1821 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=665540
-->
<head>
  <title>Test for Bug 665540 Select dropdown position in fullscreen window</title>
  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
</head>
<body onload="openFullscreenWindow()">
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=665540">Mozilla Bug 665540</a>
<p id="display"></p>
<div id="content" style="display: none">
  
</div>
<pre id="test">
<script type="application/javascript">

/** Test for Bug 665540 **/

SimpleTest.waitForExplicitFinish();

var win;
var select;
var optiona;
var eventType = "mouseover";
var timeoutID;
var eventOffsetX = 2;
var eventOffsetY = 2;

function openFullscreenWindow() {
    win = open("bug665540_window.xul", "_blank", "resizable=yes,chrome");
    win.addEventListener("sizemodechange",
                         function() {
                           info("sizemodechange. windowState = " + win.windowState + " fullScreen = " + win.fullScreen);
                         }, false);
    win.addEventListener("fullscreen",
                         function() {
                           info("fullscreen event. windowState = " + win.windowState + " fullScreen = " + win.fullScreen);
                         }, false);
    info("win.windowState = " + win.windowState);
    info("win.fullScreen = " + win.fullScreen);

    // Close our window if the test times out so that it doesn't interfere
    // with later tests.
    timeoutID = setTimeout(function () {
        ok(false, "Test timed out.");
        // Provide some time for a screenshot
        setTimeout(finish, 1000);
    }, 20000);
}

function childFocused() {
    ok(win.fullScreen, "window should be fullscreen");
    is(win.windowState, win.STATE_FULLSCREEN,
       "window state should be fullscreen");

    // The select doesn't open if the mouse click is fired too soon
    // (on X11 at least).
    setTimeout(openSelect, 1000);
}

function openSelect() {
    select = win.document.getElementById("select");
    synthesizeMouseAtCenter(select, {}, win);
    // A yield was required on X11 tinderbox machines.
    // (Wasn't required on other platforms nor on an X11 system with kwin.)
    setTimeout(checkPosition, 1000);
}

function checkPosition() {
    optiona = win.document.getElementById("optiona");
    optiona.addEventListener(eventType, eventReceived, false);

    // If the select dropdown is opened in the position where
    // getBoundingClientRect() predicts, then optiona will receive the event.
    // The event is received asynchronously (I don't know why), so the handler
    // is removed later.
    synthesizeMouse(optiona, eventOffsetX, eventOffsetY,
                    { type: eventType }, win);
}

function eventReceived(event) {
    clearTimeout(timeoutID);
    optiona.removeEventListener(eventType, eventReceived, false);

    var rect = optiona.getBoundingClientRect();

    // Note that fullscreen only fully covers one monitor, so win.screenX can
    // be non-zero.
    is(event.screenX, win.screenX + rect.left + eventOffsetX,
       "event.screenX should match sent event");
    is(event.screenY, win.screenY + rect.top + eventOffsetY,
       "event.screenY should match sent event");

    finish();
}

function finish() {
    if (select && navigator.platform.indexOf("Win") >= 0) {
        todo(false,
             "Should not have to close select before closing its window");
        // This avoids mochitest "Unable to restore focus" errors (bug 670053).
        synthesizeMouseAtCenter(select, {}, win);
    }

    is(win.windowState, win.STATE_FULLSCREEN,
       "window state should still be fullscreen");

    win.close();
    SimpleTest.finish();
}
</script>
</pre>
</body>
</html>