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
|
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// Testing that when search results contain suggestions for nodes in other
// frames, selecting these suggestions actually selects the right nodes.
requestLongerTimeout(2);
add_task(async function () {
const { inspector } = await openInspectorForURL(
`${URL_ROOT_ORG_SSL}doc_inspector_search-iframes.html`
);
info("Focus the search box");
await focusSearchBoxUsingShortcut(inspector.panelWin);
info("Enter # to search for all ids");
let processingDone = once(inspector.searchSuggestions, "processing-done");
EventUtils.synthesizeKey("#", {}, inspector.panelWin);
info("Wait for search query to complete");
await processingDone;
info("Press tab to fill the search input with the first suggestion");
processingDone = once(inspector.searchSuggestions, "processing-done");
EventUtils.synthesizeKey("VK_TAB", {}, inspector.panelWin);
await processingDone;
info("Press enter and expect a new selection");
let onSelect = inspector.once("inspector-updated");
EventUtils.synthesizeKey("VK_RETURN", {}, inspector.panelWin);
await onSelect;
await checkCorrectButton(inspector, ["#iframe-1"]);
info("Press enter to cycle through multiple nodes matching this suggestion");
onSelect = inspector.once("inspector-updated");
EventUtils.synthesizeKey("VK_RETURN", {}, inspector.panelWin);
await onSelect;
await checkCorrectButton(inspector, ["#iframe-2"]);
info("Press enter to cycle through multiple nodes matching this suggestion");
onSelect = inspector.once("inspector-updated");
EventUtils.synthesizeKey("VK_RETURN", {}, inspector.panelWin);
await onSelect;
await checkCorrectButton(inspector, ["#iframe-3"]);
info("Press enter to cycle through multiple nodes matching this suggestion");
onSelect = inspector.once("inspector-updated");
EventUtils.synthesizeKey("VK_RETURN", {}, inspector.panelWin);
await onSelect;
await checkCorrectButton(inspector, ["#iframe-3", "#iframe-4"]);
info("Press enter to cycle through multiple nodes matching this suggestion");
onSelect = inspector.once("inspector-updated");
EventUtils.synthesizeKey("VK_RETURN", {}, inspector.panelWin);
await onSelect;
await checkCorrectButton(inspector, ["#iframe-1"]);
});
const checkCorrectButton = async function (inspector, frameSelector) {
const nodeFrontInfo = await getSelectedNodeFrontInfo(inspector);
is(nodeFrontInfo.nodeFront.id, "b1", "The selected node is #b1");
is(
nodeFrontInfo.nodeFront.tagName.toLowerCase(),
"button",
"The selected node is <button>"
);
const iframe = await getNodeFrontInFrames(frameSelector, inspector);
const expectedDocument = (await iframe.walkerFront.children(iframe)).nodes[0];
is(
nodeFrontInfo.document,
expectedDocument,
"The selected node is in " + frameSelector
);
};
/**
* Gets the currently selected nodefront. It also finds the
* document node which contains the node.
* @param {Object} inspector
* @returns {Object}
* nodeFront - The currently selected nodeFront
* document - The document which contains the node.
*
*/
async function getSelectedNodeFrontInfo(inspector) {
const { selection, commands } = inspector;
const nodeFront = selection.nodeFront;
const inspectors = await commands.inspectorCommand.getAllInspectorFronts();
for (let i = 0; i < inspectors.length; i++) {
const inspectorFront = inspectors[i];
if (inspectorFront.walker == nodeFront.walkerFront) {
const document = await inspectorFront.walker.document(nodeFront);
return { nodeFront, document };
}
}
return null;
}
|