1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
7 * Tests if JSONP responses are handled correctly.
10 add_task(async
function () {
13 } = require("resource://devtools/client/netmonitor/src/utils/l10n.js");
15 const { tab
, monitor
} = await
initNetMonitor(JSONP_URL
, { requestCount
: 1 });
16 info("Starting test... ");
18 const { document
, store
, windowRequire
} = monitor
.panelWin
;
19 const Actions
= windowRequire("devtools/client/netmonitor/src/actions/index");
20 const { getDisplayedRequests
, getSortedRequests
} = windowRequire(
21 "devtools/client/netmonitor/src/selectors/index"
24 store
.dispatch(Actions
.batchEnable(false));
27 await
performRequests(monitor
, tab
, 2);
29 const requestItems
= document
.querySelectorAll(".request-list-item");
30 for (const requestItem
of requestItems
) {
31 requestItem
.scrollIntoView();
32 const requestsListStatus
= requestItem
.querySelector(".status-code");
33 EventUtils
.sendMouseEvent({ type
: "mouseover" }, requestsListStatus
);
34 await
waitUntil(() => requestsListStatus
.title
);
35 await
waitForDOMIfNeeded(requestItem
, ".requests-list-timings-total");
38 verifyRequestItemTarget(
40 getDisplayedRequests(store
.getState()),
41 getSortedRequests(store
.getState())[0],
43 CONTENT_TYPE_SJS
+ "?fmt=jsonp&jsonp=$_0123Fun",
48 fullMimeType
: "text/json; charset=utf-8",
49 size
: L10N
.getFormatStrWithNumbers("networkMenu.sizeB", 41),
53 verifyRequestItemTarget(
55 getDisplayedRequests(store
.getState()),
56 getSortedRequests(store
.getState())[1],
58 CONTENT_TYPE_SJS
+ "?fmt=jsonp2&jsonp=$_4567Sad",
63 fullMimeType
: "text/json; charset=utf-8",
64 size
: L10N
.getFormatStrWithNumbers("networkMenu.sizeB", 54),
69 info("Testing first request");
70 let wait
= waitForDOM(document
, "#response-panel .data-header");
71 let waitForPropsView
= waitForDOM(
73 "#response-panel .properties-view",
77 store
.dispatch(Actions
.toggleNetworkDetails());
78 clickOnSidebarTab(document
, "response");
79 await Promise
.all([wait
, waitForPropsView
]);
81 testJsonSectionInResponseTab(`"Hello JSONP!"`);
83 wait
= waitForDOM(document
, "#response-panel .CodeMirror-code");
84 let rawResponseToggle
= document
.querySelector(
85 "#response-panel .raw-data-toggle-input .devtools-checkbox-toggle"
87 clickElement(rawResponseToggle
, monitor
);
90 testResponseTab("$_0123Fun");
92 info("Testing second request");
94 wait
= waitForDOM(document
, "#response-panel .data-header");
95 EventUtils
.sendMouseEvent(
96 { type
: "mousedown" },
97 document
.querySelectorAll(".request-list-item")[1]
102 waitForPropsView
= waitForDOM(
104 "#response-panel .properties-view",
107 rawResponseToggle
= document
.querySelector(
108 "#response-panel .raw-data-toggle-input .devtools-checkbox-toggle"
110 clickElement(rawResponseToggle
, monitor
);
112 await waitForPropsView
;
114 testJsonSectionInResponseTab(`"Hello weird JSONP!"`);
116 wait
= waitForDOM(document
, "#response-panel .CodeMirror-code");
117 rawResponseToggle
= document
.querySelector(
118 "#response-panel .raw-data-toggle-input .devtools-checkbox-toggle"
120 clickElement(rawResponseToggle
, monitor
);
123 testResponseTab("$_4567Sad");
125 await
teardown(monitor
);
127 function testJsonSectionInResponseTab(greeting
) {
128 const tabpanel
= document
.querySelector("#response-panel");
130 tabpanel
.querySelectorAll(".treeRow").length
,
132 "There should be 1 json properties displayed in this tabpanel."
135 const labels
= tabpanel
.querySelectorAll("tr .treeLabelCell .treeLabel");
136 const values
= tabpanel
.querySelectorAll("tr .treeValueCell .objectBox");
139 labels
[0].textContent
,
141 "The first json property name was incorrect."
144 values
[0].textContent
,
146 "The first json property value was incorrect."
150 function testResponseTab(func
) {
151 const tabpanel
= document
.querySelector("#response-panel");
154 tabpanel
.querySelector(".response-error-header") === null,
156 "The response error header doesn't have the intended visibility."
159 tabpanel
.querySelector(".data-label").textContent
,
160 L10N
.getFormatStr("jsonpScopeName", func
),
161 "The response json view has the intened visibility and correct title."
164 tabpanel
.querySelector(".CodeMirror-code") === null,
166 "The response editor has the intended visibility."
169 tabpanel
.querySelector(".responseImageBox") === null,
171 "The response image box doesn't have the intended visibility."
174 tabpanel
.querySelectorAll(".empty-notice").length
,
176 "The empty notice should not be displayed in this tabpanel."