blob: 2852574102b5882b5b80e6760e62fb56fb111bb8 [file] [log] [blame]
// This goes before everything else to keep console message line number invariant.
var lastXHRIndex = 0;
function xhrLoadedCallback()
{
// We need to make sure the console message text is unique so that we don't end up with repeat count update only.
console.log("XHR loaded: " + (++lastXHRIndex));
}
function makeSimpleXHR(method, url, async, callback)
{
makeSimpleXHRWithPayload(method, url, async, null, callback);
}
function makeSimpleXHRWithPayload(method, url, async, payload, callback)
{
makeXHR(method, url, async, undefined, undefined, [], false, payload, callback)
}
function makeXHR(method, url, async, user, password, headers, withCredentials, payload, type, callback)
{
var xhr = new XMLHttpRequest();
if (type == undefined)
xhr.responseType = "";
else
xhr.responseType = type;
xhr.onreadystatechange = function()
{
if (xhr.readyState === XMLHttpRequest.DONE) {
if (typeof(callback) === "function")
callback();
}
}
xhr.open(method, url, async, user, password);
xhr.withCredentials = withCredentials;
for (var i = 0; i < headers.length; ++i)
xhr.setRequestHeader(headers[i][0], headers[i][1]);
xhr.send(payload);
}
function makeXHRForJSONArguments(jsonArgs)
{
var args = JSON.parse(jsonArgs);
makeXHR(args.method, args.url, args.async, args.user, args.password, args.headers || [], args.withCredentials, args.payload, args.type, xhrLoadedCallback);
}
function makeFetch(url, requestInitializer)
{
return fetch(url, requestInitializer).then(res => {
// Call text(). Otherwise the backpressure mechanism may block loading.
res.text();
return res;
}).catch(e => e);
}
function makeFetchInWorker(url, requestInitializer)
{
return new Promise((resolve) => {
var worker = new Worker('/inspector/network/resources/fetch-worker.js');
worker.onmessage = (event) => {
resolve(event.data);
};
worker.postMessage({url: url, init: requestInitializer});
});
}
var initialize_NetworkTest = function() {
InspectorTest.preloadPanel("network");
/**
* @param {!SDK.NetworkRequest} request
* @return {!Promise<!SDK.NetworkRequest>}
*/
InspectorTest.waitForRequestResponse = function(request)
{
if (request.responseReceivedTime !== -1)
return Promise.resolve(request);
return InspectorTest.waitForEvent(SDK.NetworkManager.Events.RequestUpdated, InspectorTest.networkManager,
updateRequest => updateRequest === request && request.responseReceivedTime !== -1);
}
/**
* @param {!SDK.NetworkRequest} request
* @return {!Promise<!Network.NetworkRequestNode>}
*/
InspectorTest.waitForNetworkLogViewNodeForRequest = function(request)
{
var networkLogView = UI.panels.network._networkLogView;
var node = networkLogView.nodeForRequest(request);
if (node)
return Promise.resolve(node);
console.assert(networkLogView._staleRequests.has(request));
return InspectorTest.addSnifferPromise(networkLogView, '_didRefreshForTest').then(() => {
var node = networkLogView.nodeForRequest(request);
console.assert(node);
return node;
});
}
/**
* @param {!SDK.NetworkRequest} wsRequest
* @param {string} message
* @return {!Promise<!SDK.NetworkRequest.WebSocketFrame>}
*/
InspectorTest.waitForWebsocketFrameReceived = function(wsRequest, message)
{
for (var frame of wsRequest.frames()) {
if (checkFrame(frame))
return Promise.resolve(frame);
}
return InspectorTest.waitForEvent(SDK.NetworkRequest.Events.WebsocketFrameAdded, wsRequest, checkFrame);
function checkFrame(frame) {
return frame.type === SDK.NetworkRequest.WebSocketFrameType.Receive && frame.text === message;
}
}
InspectorTest.recordNetwork = function()
{
UI.panels.network._networkLogView.setRecording(true);
}
InspectorTest.networkRequests = function()
{
return Array.from(NetworkLog.networkLog.requests());
}
InspectorTest.dumpNetworkRequests = function()
{
var requests = InspectorTest.networkRequests();
requests.sort(function(a, b) {return a.url().localeCompare(b.url());});
InspectorTest.addResult("resources count = " + requests.length);
for (i = 0; i < requests.length; i++)
InspectorTest.addResult(requests[i].url());
}
// |url| must be a regular expression to match request URLs.
InspectorTest.findRequestsByURLPattern = function(urlPattern)
{
return InspectorTest.networkRequests().filter(function(value) {
return urlPattern.test(value.url());
});
}
InspectorTest.makeSimpleXHR = function(method, url, async, callback)
{
InspectorTest.makeXHR(method, url, async, undefined, undefined, [], false, undefined, undefined, callback);
}
InspectorTest.makeSimpleXHRWithPayload = function(method, url, async, payload, callback)
{
InspectorTest.makeXHR(method, url, async, undefined, undefined, [], false, payload, undefined, callback);
}
InspectorTest.makeXHR = function(method, url, async, user, password, headers, withCredentials, payload, type, callback)
{
var args = {};
args.method = method;
args.url = url;
args.async = async;
args.user = user;
args.password = password;
args.headers = headers;
args.withCredentials = withCredentials;
args.payload = payload;
args.type = type;
var jsonArgs = JSON.stringify(args).replace(/\"/g, "\\\"");
function innerCallback(msg)
{
if (msg.messageText.indexOf("XHR loaded") !== -1) {
if (callback)
callback();
} else {
InspectorTest.addConsoleSniffer(innerCallback);
}
}
InspectorTest.addConsoleSniffer(innerCallback);
InspectorTest.evaluateInPage("makeXHRForJSONArguments(\"" + jsonArgs + "\")");
}
InspectorTest.makeFetch = function(url, requestInitializer, callback)
{
InspectorTest.callFunctionInPageAsync("makeFetch", [url, requestInitializer]).then(callback);
}
InspectorTest.makeFetchInWorker = function(url, requestInitializer, callback)
{
InspectorTest.callFunctionInPageAsync("makeFetchInWorker", [url, requestInitializer]).then(callback);
}
/**
* @return {!Promise}
*/
InspectorTest.clearNetworkCache = function()
{
// This turns cache off and then on, effectively clearning the cache.
var networkAgent = InspectorTest.NetworkAgent;
var promise = networkAgent.setCacheDisabled(true);
return promise.then(() => networkAgent.setCacheDisabled(false));
}
InspectorTest.HARPropertyFormatters = {
bodySize: "formatAsTypeName",
compression: "formatAsTypeName",
connection: "formatAsTypeName",
headers: "formatAsTypeName",
headersSize: "formatAsTypeName",
id: "formatAsTypeName",
onContentLoad: "formatAsTypeName",
onLoad: "formatAsTypeName",
receive: "formatAsTypeName",
startedDateTime: "formatAsRecentTime",
time: "formatAsTypeName",
timings: "formatAsTypeName",
version: "formatAsTypeName",
wait: "formatAsTypeName",
_transferSize: "formatAsTypeName",
_error: "skip"
};
// addObject checks own properties only, so make a deep copy rather than use prototype.
InspectorTest.HARPropertyFormattersWithSize = JSON.parse(JSON.stringify(InspectorTest.HARPropertyFormatters));
InspectorTest.HARPropertyFormattersWithSize.size = "formatAsTypeName";
};