Bug 1416201 - Fix tests; r=rickychien
MozReview-Commit-ID: 2QS1KlYtkY8
--- a/devtools/client/netmonitor/src/connector/firefox-data-provider.js
+++ b/devtools/client/netmonitor/src/connector/firefox-data-provider.js
@@ -668,22 +668,22 @@ class FirefoxDataProvider {
});
}
/**
* Handles information received for a "stackTrace" packet.
*
* @param {object} response the message received from the server.
*/
- onStackTrace(response) {
- return this.updateRequest(response.from, {
+ async onStackTrace(response) {
+ let payload = await this.updateRequest(response.from, {
stacktrace: response.stacktrace
- }).then(() => {
- emit(EVENTS.RECEIVED_EVENT_STACKTRACE, response.from);
});
+ emit(EVENTS.RECEIVED_EVENT_STACKTRACE, response.from);
+ return payload.stacktrace;
}
}
/**
* Guard 'emit' to avoid exception in non-window environment.
*/
function emit(type, data) {
if (typeof window != "undefined") {
--- a/devtools/client/netmonitor/test/browser_net_cause.js
+++ b/devtools/client/netmonitor/test/browser_net_cause.js
@@ -84,46 +84,52 @@ add_task(function* () {
// the initNetMonitor function clears the network request list after the
// page is loaded. That's why we first load a bogus page from SIMPLE_URL,
// and only then load the real thing from CAUSE_URL - we want to catch
// all the requests the page is making, not only the XHRs.
// We can't use about:blank here, because initNetMonitor checks that the
// page has actually made at least one request.
let { tab, monitor } = yield initNetMonitor(SIMPLE_URL);
- let { document, store, windowRequire } = monitor.panelWin;
+ let { document, store, windowRequire, connector } = monitor.panelWin;
let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
let {
getDisplayedRequests,
getSortedRequests,
} = windowRequire("devtools/client/netmonitor/src/selectors/index");
store.dispatch(Actions.batchEnable(false));
let wait = waitForNetworkEvents(monitor, EXPECTED_REQUESTS.length);
tab.linkedBrowser.loadURI(CAUSE_URL);
yield wait;
+ // Fetch stack-trace data from the backend and wait till
+ // all packets are received.
+ let requests = getSortedRequests(store.getState());
+ yield Promise.all(requests.map(requestItem =>
+ connector.requestData(requestItem.id, "stackTrace")));
+
is(store.getState().requests.requests.size, EXPECTED_REQUESTS.length,
"All the page events should be recorded.");
EXPECTED_REQUESTS.forEach((spec, i) => {
let { method, url, causeType, causeUri, stack } = spec;
let requestItem = getSortedRequests(store.getState()).get(i);
verifyRequestItemTarget(
document,
getDisplayedRequests(store.getState()),
requestItem,
method,
url,
{ cause: { type: causeType, loadingDocumentUri: causeUri } }
);
- let { stacktrace } = requestItem.cause;
+ let stacktrace = requestItem.stacktrace;
let stackLen = stacktrace ? stacktrace.length : 0;
if (stack) {
ok(stacktrace, `Request #${i} has a stacktrace`);
ok(stackLen > 0,
`Request #${i} (${causeType}) has a stacktrace with ${stackLen} items`);
// if "stack" is array, check the details about the top stack frames
--- a/devtools/client/netmonitor/test/browser_net_cause_redirect.js
+++ b/devtools/client/netmonitor/test/browser_net_cause_redirect.js
@@ -14,34 +14,40 @@ add_task(function* () {
{ status: 302, hasStack: true },
// Serves HTTPS, sets the Strict-Transport-Security header, no stack
{ status: 200, hasStack: false },
// Second request to HTTP redirects to HTTPS internally
{ status: 200, hasStack: true },
];
let { tab, monitor } = yield initNetMonitor(CUSTOM_GET_URL);
- let { store, windowRequire } = monitor.panelWin;
+ let { store, windowRequire, connector } = monitor.panelWin;
let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
let {
getSortedRequests,
} = windowRequire("devtools/client/netmonitor/src/selectors/index");
store.dispatch(Actions.batchEnable(false));
let wait = waitForNetworkEvents(monitor, EXPECTED_REQUESTS.length);
yield performRequests(2, HSTS_SJS);
yield wait;
+ // Fetch stack-trace data from the backend and wait till
+ // all packets are received.
+ let requests = getSortedRequests(store.getState());
+ yield Promise.all(requests.map(requestItem =>
+ connector.requestData(requestItem.id, "stackTrace")));
+
EXPECTED_REQUESTS.forEach(({status, hasStack}, i) => {
let item = getSortedRequests(store.getState()).get(i);
is(item.status, status, `Request #${i} has the expected status`);
- let { stacktrace } = item.cause;
+ let { stacktrace } = item;
let stackLen = stacktrace ? stacktrace.length : 0;
if (hasStack) {
ok(stacktrace, `Request #${i} has a stacktrace`);
ok(stackLen > 0, `Request #${i} has a stacktrace with ${stackLen} items`);
} else {
is(stackLen, 0, `Request #${i} has an empty stacktrace`);
}
--- a/devtools/client/netmonitor/test/browser_net_frame.js
+++ b/devtools/client/netmonitor/test/browser_net_frame.js
@@ -153,32 +153,38 @@ add_task(function* () {
// the initNetMonitor function clears the network request list after the
// page is loaded. That's why we first load a bogus page from SIMPLE_URL,
// and only then load the real thing from TOP_URL - we want to catch
// all the requests the page is making, not only the XHRs.
// We can't use about:blank here, because initNetMonitor checks that the
// page has actually made at least one request.
let { tab, monitor } = yield initNetMonitor(SIMPLE_URL);
- let { document, store, windowRequire } = monitor.panelWin;
+ let { document, store, windowRequire, connector } = monitor.panelWin;
let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
let {
getDisplayedRequests,
getSortedRequests,
} = windowRequire("devtools/client/netmonitor/src/selectors/index");
store.dispatch(Actions.batchEnable(false));
tab.linkedBrowser.loadURI(TOP_URL, null, null);
yield waitForNetworkEvents(monitor, REQUEST_COUNT);
is(store.getState().requests.requests.size, REQUEST_COUNT,
"All the page events should be recorded.");
+ // Fetch stack-trace data from the backend and wait till
+ // all packets are received.
+ let requests = getSortedRequests(store.getState());
+ yield Promise.all(requests.map(requestItem =>
+ connector.requestData(requestItem.id, "stackTrace")));
+
// While there is a defined order for requests in each document separately, the requests
// from different documents may interleave in various ways that change per test run, so
// there is not a single order when considering all the requests together.
let currentTop = 0;
let currentSub = 0;
for (let i = 0; i < REQUEST_COUNT; i++) {
let requestItem = getSortedRequests(store.getState()).get(i);
@@ -196,17 +202,17 @@ add_task(function* () {
document,
getDisplayedRequests(store.getState()),
requestItem,
method,
url,
{ cause: { type: causeType, loadingDocumentUri: causeUri } }
);
- let { stacktrace } = requestItem.cause;
+ let { stacktrace } = requestItem;
let stackLen = stacktrace ? stacktrace.length : 0;
if (stack) {
ok(stacktrace, `Request #${i} has a stacktrace`);
ok(stackLen > 0,
`Request #${i} (${causeType}) has a stacktrace with ${stackLen} items`);
// if "stack" is array, check the details about the top stack frames
--- a/devtools/client/netmonitor/test/browser_net_service-worker-status.js
+++ b/devtools/client/netmonitor/test/browser_net_service-worker-status.js
@@ -11,17 +11,17 @@
const URL = EXAMPLE_URL.replace("http:", "https:");
const TEST_URL = URL + "service-workers/status-codes.html";
add_task(function* () {
let { tab, monitor } = yield initNetMonitor(TEST_URL, true);
info("Starting test... ");
- let { document, store, windowRequire } = monitor.panelWin;
+ let { document, store, windowRequire, connector } = monitor.panelWin;
let Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
let {
getDisplayedRequests,
getSortedRequests,
} = windowRequire("devtools/client/netmonitor/src/selectors/index");
store.dispatch(Actions.batchEnable(false));
@@ -47,16 +47,22 @@ add_task(function* () {
info("Performing requests...");
let wait = waitForNetworkEvents(monitor, REQUEST_DATA.length);
yield ContentTask.spawn(tab.linkedBrowser, {}, function* () {
content.wrappedJSObject.performRequests();
});
yield wait;
+ // Fetch stack-trace data from the backend and wait till
+ // all packets are received.
+ let requests = getSortedRequests(store.getState());
+ yield Promise.all(requests.map(requestItem =>
+ connector.requestData(requestItem.id, "stackTrace")));
+
let requestItems = document.querySelectorAll(".request-list-item");
for (let requestItem of requestItems) {
requestItem.scrollIntoView();
let requestsListStatus = requestItem.querySelector(".requests-list-status");
EventUtils.sendMouseEvent({ type: "mouseover" }, requestsListStatus);
yield waitUntil(() => requestsListStatus.title);
}
@@ -69,17 +75,17 @@ add_task(function* () {
document,
getDisplayedRequests(store.getState()),
item,
request.method,
request.uri,
request.details
);
- let { stacktrace } = item.cause;
+ let { stacktrace } = item;
let stackLen = stacktrace ? stacktrace.length : 0;
ok(stacktrace, `Request #${index} has a stacktrace`);
ok(stackLen >= request.stackFunctions.length,
`Request #${index} has a stacktrace with enough (${stackLen}) items`);
request.stackFunctions.forEach((functionName, j) => {
is(stacktrace[j].functionName, functionName,
--- a/devtools/client/netmonitor/test/browser_net_view-source-debugger.js
+++ b/devtools/client/netmonitor/test/browser_net_view-source-debugger.js
@@ -18,17 +18,17 @@ add_task(async function () {
store.dispatch(Actions.batchEnable(false));
let waitForContentRequests = waitForNetworkEvents(monitor, 0, 2);
await ContentTask.spawn(tab.linkedBrowser, {},
() => content.wrappedJSObject.performRequests());
await waitForContentRequests;
info("Clicking stack-trace tab and waiting for stack-trace panel to open");
- let wait = waitForDOM(document, "#stack-trace-panel");
+ let wait = waitForDOM(document, "#stack-trace-panel .frame-link", 4);
// Click on the first request
EventUtils.sendMouseEvent({ type: "mousedown" },
document.querySelector(".request-list-item"));
// Open the stack-trace tab for that request
document.getElementById("stack-trace-tab").click();
await wait;
let frameLinkNode = document.querySelector(".frame-link");