summaryrefslogtreecommitdiffstats
path: root/widget/tests/taskbar_previews.xhtml
blob: c3f2f3890cb2a1e841b941210ff527b08bfa9dca (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
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
                 type="text/css"?>
<window title="Taskbar Previews Test"
  xmlns:html="http://www.w3.org/1999/xhtml"
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
  onload="loaded();">

  <title>Previews - yeah!</title>
  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
  <script class="testbody" type="application/javascript">
  <![CDATA[
    const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");

    let taskbar = Cc["@mozilla.org/windows-taskbar;1"].getService(Ci.nsIWinTaskbar);

    function IsWin7OrHigher() {
      try {
        var ver = parseFloat(Services.sysinfo.getProperty("version"));
        if (ver >= 6.1)
          return true;
      } catch (ex) { }
      return false;
    }
    isnot(taskbar, null, "Taskbar service is defined");
    is(taskbar.available, IsWin7OrHigher(), "Expected availability of taskbar");

    SimpleTest.waitForExplicitFinish();

    function stdPreviewSuite(p) {
      p.visible = !p.visible;
      p.visible = !p.visible;
      p.visible = true;
      p.invalidate();
      p.visible = false;
    }

    function loaded()
    {
      if (!taskbar.available)
        SimpleTest.finish();
      let controller = {
        width: 400,
        height: 400,
        thumbnailAspectRatio: 1.0,
        get wrappedJSObject() { return this; }
      }
      // HACK from mconnor:
      let win = Services.wm.getMostRecentWindow("navigator:browser");
      let docShell = win.gBrowser.docShell;

      let winPreview = taskbar.getTaskbarWindowPreview(docShell);
      isnot(winPreview, null, "Window preview is not null");
      winPreview.controller = controller;
      let button = winPreview.getButton(0);
      isnot(button, null, "Could get button at valid index");
      try {
        winPreview.getButton(-1);
        ok(false, "Got button at negative index");
      } catch (ex) {}
      try {
        winPreview.getButton(Ci.nsITaskbarWindowPreview.NUM_TOOLBAR_BUTTONS);
        ok(false, "Got button at index that is too large");
      } catch (ex) {}
      button.image = null;
      stdPreviewSuite(winPreview);
      // Let's not perma-hide this window from the taskbar
      winPreview.visible = true;

      let tabP = taskbar.createTaskbarTabPreview(docShell, controller);
      isnot(tabP, null, "Tab preview is not null");
      is(tabP.controller.wrappedJSObject, controller, "Controllers match");
      is(tabP.icon, null, "Default icon is null (windows default)");
      tabP.icon = null;
      tabP.move(null);
      try {
        tabP.move(tabP);
        ok(false, "Moved a preview next to itself!");
      } catch (ex) {}
      stdPreviewSuite(tabP);

      let tabP2 = taskbar.createTaskbarTabPreview(docShell, controller);
      tabP.visible = true;
      tabP2.visible = true;

      isnot(tabP2, null, "2nd Tab preview is not null");
      isnot(tabP,tabP2, "Tab previews are different");
      tabP.active = true;
      ok(tabP.active && !tabP2.active, "Only one tab is active (part 1)");
      tabP2.active = true;
      ok(!tabP.active && tabP2.active, "Only one tab is active (part 2)");
      tabP.active = true;
      ok(tabP.active && !tabP2.active, "Only one tab is active (part 3)");
      tabP.active = false;
      ok(!tabP.active && !tabP2.active, "Neither tab is active");
      is(winPreview.active, false, "Window preview is not active");
      tabP.active = true;
      winPreview.active = true;
      ok(winPreview.active && !tabP.active, "Tab preview takes activation from window");
      tabP.active = true;
      ok(tabP.active && !winPreview.active, "Tab preview takes activation from window");

      tabP.visible = false;
      tabP2.visible = false;

      SimpleTest.finish();
    }
  ]]>
  </script>

  <body xmlns="http://www.w3.org/1999/xhtml">
    <p id="display"></p>
    <div id="content" style="display: none"></div>
    <pre id="test"></pre>
  </body>

</window>