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
|
"use strict";
/* eslint-disable mozilla/use-chromeutils-generateqi */
var gTestTab;
var gContentAPI;
var handleDialog;
// Modified from toolkit/components/passwordmgr/test/prompt_common.js
var didDialog;
var timer; // keep in outer scope so it's not GC'd before firing
function startCallbackTimer() {
didDialog = false;
// Delay before the callback twiddles the prompt.
const dialogDelay = 10;
// Use a timer to invoke a callback to twiddle the authentication dialog
timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
timer.init(observer, dialogDelay, Ci.nsITimer.TYPE_ONE_SHOT);
}
var observer = SpecialPowers.wrapCallbackObject({
QueryInterface(iid) {
const interfaces = [
Ci.nsIObserver,
Ci.nsISupports,
Ci.nsISupportsWeakReference,
];
if (
!interfaces.some(function(v) {
return iid.equals(v);
})
) {
throw SpecialPowers.Components.results.NS_ERROR_NO_INTERFACE;
}
return this;
},
observe(subject, topic, data) {
var doc = getDialogDoc();
if (doc) {
handleDialog(doc);
} else {
startCallbackTimer();
} // try again in a bit
},
});
function getDialogDoc() {
// Find the <browser> which contains notifyWindow, by looking
// through all the open windows and all the <browsers> in each.
// var enumerator = wm.getEnumerator("navigator:browser");
for (let { docShell } of Services.wm.getEnumerator(null)) {
var containedDocShells = docShell.getAllDocShellsInSubtree(
docShell.typeChrome,
docShell.ENUMERATE_FORWARDS
);
for (let childDocShell of containedDocShells) {
// Get the corresponding document for this docshell
// We don't want it if it's not done loading.
if (childDocShell.busyFlags != Ci.nsIDocShell.BUSY_FLAGS_NONE) {
continue;
}
var childDoc = childDocShell.contentViewer.DOMDocument;
// ok(true, "Got window: " + childDoc.location.href);
if (
childDoc.location.href == "chrome://global/content/commonDialog.xhtml"
) {
return childDoc;
}
}
}
return null;
}
function test() {
UITourTest();
}
var tests = [
taskify(async function test_modal_dialog_while_opening_tooltip() {
let panelShown;
let popup;
handleDialog = doc => {
popup = document.getElementById("UITourTooltip");
gContentAPI.showInfo("appMenu", "test title", "test text");
doc.defaultView.setTimeout(function() {
is(
popup.state,
"closed",
"Popup shouldn't be shown while dialog is up"
);
panelShown = promisePanelElementShown(window, popup);
let dialog = doc.getElementById("commonDialog");
dialog.acceptDialog();
}, 1000);
};
startCallbackTimer();
executeSoon(() => alert("test"));
await waitForConditionPromise(
() => panelShown,
"Timed out waiting for panel promise to be assigned",
100
);
await panelShown;
await hideInfoPromise();
}),
];
|