Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
// Test that the network actor uses the LongStringActor
const {
DevToolsServer,
const LONG_STRING_LENGTH = 400;
const LONG_STRING_INITIAL_LENGTH = 400;
let ORIGINAL_LONG_STRING_LENGTH, ORIGINAL_LONG_STRING_INITIAL_LENGTH;
add_task(async function () {
const tab = await addTab(URL_ROOT + "network_requests_iframe.html");
const commands = await CommandsFactory.forTab(tab);
await commands.targetCommand.startListening();
// Override the default long string settings to lower values.
// This is done from the parent process's DevToolsServer as the LongString
// actor is being created from the parent process as network requests are
// watched from the parent process.
ORIGINAL_LONG_STRING_LENGTH = DevToolsServer.LONG_STRING_LENGTH;
ORIGINAL_LONG_STRING_INITIAL_LENGTH =
DevToolsServer.LONG_STRING_INITIAL_LENGTH;
DevToolsServer.LONG_STRING_LENGTH = LONG_STRING_LENGTH;
DevToolsServer.LONG_STRING_INITIAL_LENGTH = LONG_STRING_INITIAL_LENGTH;
info("test network POST request");
const networkResource = await new Promise(resolve => {
commands.resourceCommand
.watchResources([commands.resourceCommand.TYPES.NETWORK_EVENT], {
onAvailable: () => {},
onUpdated: resourceUpdate => {
resolve(resourceUpdate[0].resource);
},
})
.then(() => {
// Spawn the network request after we started watching
SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
content.wrappedJSObject.testXhrPost();
});
});
});
const netActor = networkResource.actor;
ok(netActor, "We have a netActor:" + netActor);
const { client } = commands;
const requestHeaders = await client.request({
to: netActor,
type: "getRequestHeaders",
});
assertRequestHeaders(requestHeaders);
const requestCookies = await client.request({
to: netActor,
type: "getRequestCookies",
});
assertRequestCookies(requestCookies);
const requestPostData = await client.request({
to: netActor,
type: "getRequestPostData",
});
assertRequestPostData(requestPostData);
const responseHeaders = await client.request({
to: netActor,
type: "getResponseHeaders",
});
assertResponseHeaders(responseHeaders);
const responseCookies = await client.request({
to: netActor,
type: "getResponseCookies",
});
assertResponseCookies(responseCookies);
const responseContent = await client.request({
to: netActor,
type: "getResponseContent",
});
assertResponseContent(responseContent);
const eventTimings = await client.request({
to: netActor,
type: "getEventTimings",
});
assertEventTimings(eventTimings);
await commands.destroy();
DevToolsServer.LONG_STRING_LENGTH = ORIGINAL_LONG_STRING_LENGTH;
DevToolsServer.LONG_STRING_INITIAL_LENGTH =
ORIGINAL_LONG_STRING_INITIAL_LENGTH;
});
function assertRequestHeaders(response) {
info("checking request headers");
ok(!!response.headers.length, "request headers > 0");
Assert.greater(response.headersSize, 0, "request headersSize > 0");
checkHeadersOrCookies(response.headers, {
Referer: /network_requests_iframe\.html/,
Cookie: /bug768096/,
});
}
function assertRequestCookies(response) {
info("checking request cookies");
is(response.cookies.length, 3, "request cookies length");
checkHeadersOrCookies(response.cookies, {
foobar: "fooval",
omgfoo: "bug768096",
badcookie: "bug826798=st3fan",
});
}
function assertRequestPostData(response) {
info("checking request POST data");
checkObject(response, {
postData: {
text: {
type: "longString",
initial: /^Hello world! foobaz barr.+foobaz barrfo$/,
length: 563,
actor: /[a-z]/,
},
},
postDataDiscarded: false,
});
is(
response.postData.text.initial.length,
LONG_STRING_INITIAL_LENGTH,
"postData text initial length"
);
}
function assertResponseHeaders(response) {
info("checking response headers");
ok(!!response.headers.length, "response headers > 0");
Assert.greater(response.headersSize, 0, "response headersSize > 0");
checkHeadersOrCookies(response.headers, {
"content-type": /^application\/(json|octet-stream)$/,
"content-length": /^\d+$/,
"x-very-short": "hello world",
"x-very-long": {
type: "longString",
length: 521,
initial: /^Lorem ipsum.+\. Donec vitae d$/,
actor: /[a-z]/,
},
});
}
function assertResponseCookies(response) {
info("checking response cookies");
is(response.cookies.length, 0, "response cookies length");
}
function assertResponseContent(response) {
info("checking response content");
checkObject(response, {
content: {
text: {
type: "longString",
initial: /^\{ id: "test JSON data"(.|\r|\n)+ barfoo ba$/g,
length: 1070,
actor: /[a-z]/,
},
},
contentDiscarded: false,
});
is(
response.content.text.initial.length,
LONG_STRING_INITIAL_LENGTH,
"content initial length"
);
}
function assertEventTimings(response) {
info("checking event timings");
checkObject(response, {
timings: {
blocked: /^-1|\d+$/,
dns: /^-1|\d+$/,
connect: /^-1|\d+$/,
send: /^-1|\d+$/,
wait: /^-1|\d+$/,
receive: /^-1|\d+$/,
},
totalTime: /^\d+$/,
});
}