summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/downloads/tests/browser/browser_unknownContentType_dialog_layout.js
blob: 577e341f90cebf367cd734ee33fa9cce9807869a (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
/* 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/. */

/*
 * The unknownContentType popup can have two different layouts depending on
 * whether a helper application can be selected or not.
 * This tests that both layouts have correct collapsed elements.
 */

const UCT_URI = "chrome://mozapps/content/downloads/unknownContentType.xhtml";

let tests = [
  {
    // This URL will trigger the simple UI, where only the Save an Cancel buttons are available
    url: "http://mochi.test:8888/browser/toolkit/mozapps/downloads/tests/browser/unknownContentType_dialog_layout_data.pif",
    elements: {
      basicBox: { collapsed: false },
      normalBox: { collapsed: true },
    },
  },
  {
    // This URL will trigger the full UI
    url: "http://mochi.test:8888/browser/toolkit/mozapps/downloads/tests/browser/unknownContentType_dialog_layout_data.txt",
    elements: {
      basicBox: { collapsed: true },
      normalBox: { collapsed: false },
    },
  },
];

add_task(async function test_unknownContentType_dialog_layout() {
  forcePromptForFiles("text/plain", "txt");
  forcePromptForFiles("application/octet-stream", "pif");

  for (let test of tests) {
    let UCTObserver = {
      opened: PromiseUtils.defer(),
      closed: PromiseUtils.defer(),

      observe(aSubject, aTopic, aData) {
        let win = aSubject;

        switch (aTopic) {
          case "domwindowopened":
            win.addEventListener(
              "load",
              function onLoad(event) {
                // Let the dialog initialize
                SimpleTest.executeSoon(function () {
                  UCTObserver.opened.resolve(win);
                });
              },
              { once: true }
            );
            break;

          case "domwindowclosed":
            if (win.location == UCT_URI) {
              this.closed.resolve();
            }
            break;
        }
      },
    };

    Services.ww.registerNotification(UCTObserver);
    await BrowserTestUtils.withNewTab(
      {
        gBrowser,
        url: test.url,
        waitForLoad: false,
        waitForStateStop: true,
      },
      async function () {
        let uctWindow = await UCTObserver.opened.promise;

        for (let [id, props] of Object.entries(test.elements)) {
          let elem = uctWindow.dialog.dialogElement(id);
          for (let [prop, value] of Object.entries(props)) {
            SimpleTest.is(
              elem[prop],
              value,
              "Element with id " +
                id +
                " has property " +
                prop +
                " set to " +
                value
            );
          }
        }
        let focusOnDialog = SimpleTest.promiseFocus(uctWindow);
        uctWindow.focus();
        await focusOnDialog;

        uctWindow.document.getElementById("unknownContentType").cancelDialog();
        uctWindow = null;
        Services.ww.unregisterNotification(UCTObserver);
      }
    );
  }
});