blob: 708e997db5707cf7c86f461cc57a5e3bf6ca9825 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../resources/inspector-test.js"></script>
<script>
function triggerOverrideLoad(urlSuffix) {
let url = "http://127.0.0.1:8000/inspector/network/resources/override.txt";
if (urlSuffix)
url += urlSuffix;
fetch(url).then(() => {
TestPage.dispatchEventToFrontend("LoadComplete");
});
}
function test()
{
let suite = InspectorTest.createAsyncSuite("LocalResourceOverride");
async function logResource(resource) {
let responseSource = resource.responseSource === WI.Resource.ResponseSource.InspectorOverride ? String(resource.responseSource) : "<not-InspectorOverride>";
InspectorTest.log(`URL: ${resource.url}`);
InspectorTest.log(`MIME Type: ${resource.mimeType}`);
InspectorTest.log(`Status: ${resource.statusCode} ${resource.statusText}`);
InspectorTest.log(`Response Source: ${responseSource}`);
InspectorTest.log(`Response Headers:`);
let keys = Object.keys(resource.responseHeaders);
keys.sort();
for (let name of keys) {
let value = resource.responseHeaders[name];
if (!name.startsWith("X-") && !name.startsWith("Content-"))
value = "<filtered>";
InspectorTest.log(` ${name}: ${value}`);
}
let {rawContent, rawBase64Encoded} = await resource.requestContent();
InspectorTest.log(`Content: ${rawBase64Encoded ? "[base64] " : ""}${rawContent}`);
}
function addTestCase({name, description, setup, teardown, expression, overrides}) {
suite.addTestCase({
name, description, setup, teardown,
async test() {
// Create overrides.
let localResourceOverrides = [];
for (let override of overrides) {
InspectorTest.log("Creating Local Resource Override for: " + override.url);
let localResourceOverride = WI.LocalResourceOverride.create(override);
WI.networkManager.addLocalResourceOverride(localResourceOverride);
localResourceOverrides.push(localResourceOverride);
}
InspectorTest.log("Triggering load...");
let [resourceWasAddedEvent, responseReceivedEvent, loadCompleteEvent] = await Promise.all([
WI.Frame.awaitEvent(WI.Frame.Event.ResourceWasAdded),
WI.Resource.awaitEvent(WI.Resource.Event.ResponseReceived),
InspectorTest.awaitEvent("LoadComplete"),
InspectorTest.evaluateInPage(expression),
]);
InspectorTest.log("Resource Loaded:");
let resource = resourceWasAddedEvent.data.resource;
await logResource(resource);
// Remove overrides.
for (let localResourceOverride of localResourceOverrides)
WI.networkManager.removeLocalResourceOverride(localResourceOverride);
}
});
}
addTestCase({
name: "LocalResourceOverride.None",
description: "Load without an override.",
expression: `triggerOverrideLoad()`,
overrides: [],
});
addTestCase({
name: "LocalResourceOverride.Text",
description: "Load an override with text content.",
expression: `triggerOverrideLoad()`,
overrides: [{
url: "http://127.0.0.1:8000/inspector/network/resources/override.txt",
mimeType: "text/plain",
content: `PASS - OVERRIDDEN TEXT`,
base64Encoded: false,
statusCode: 987,
statusText: "Override Status Text",
headers: {
"X-Override-Header-1": "Override-Header-Value-1",
"X-Override-Header-2": "Override-Header-Value-2",
},
}]
});
addTestCase({
name: "LocalResourceOverride.JavaScript",
description: "Load an override with javascript content.",
expression: `triggerOverrideLoad()`,
overrides: [{
url: "http://127.0.0.1:8000/inspector/network/resources/override.txt",
mimeType: "application/javascript",
content: `/* PASS */ (function() { /* OVERRIDDEN */ })();`,
base64Encoded: false,
statusCode: 200,
statusText: "Super OK",
headers: {
"X-Custom-Header": "Header value",
},
}]
});
addTestCase({
name: "LocalResourceOverride.Image",
description: "Load an override with image content.",
expression: `triggerOverrideLoad()`,
overrides: [{
url: "http://127.0.0.1:8000/inspector/network/resources/override.txt",
mimeType: "image/png",
content: btoa("<data>"),
base64Encoded: true,
statusCode: 200,
statusText: "OK",
headers: {},
}]
});
addTestCase({
name: "LocalResourceOverride.URL.QueryString",
description: "Test overrides with different query strings.",
expression: `triggerOverrideLoad("?s=2")`,
overrides: [{
url: "http://127.0.0.1:8000/inspector/network/resources/override.txt?s=1",
mimeType: "text/plain",
content: "FAIL",
base64Encoded: false,
statusCode: 500,
statusText: "FAIL",
headers: {"X-Expected": "FAIL"},
}, {
url: "http://127.0.0.1:8000/inspector/network/resources/override.txt?s=2",
mimeType: "text/plain",
content: "PASS",
base64Encoded: false,
statusCode: 200,
statusText: "OK",
headers: {"X-Expected": "PASS"},
}]
});
addTestCase({
name: "LocalResourceOverride.URL.Fragment",
description: "Test override for a load with a fragment.",
expression: `triggerOverrideLoad("#frag")`,
overrides: [{
url: "http://127.0.0.1:8000/inspector/network/resources/override.txt",
mimeType: "text/plain",
content: "PASS",
base64Encoded: false,
statusCode: 200,
statusText: "OK",
headers: {"X-Expected": "PASS"},
}]
});
addTestCase({
name: "LocalResourceOverride.404",
description: "Test for a 404 override.",
expression: `triggerOverrideLoad()`,
overrides: [{
url: "http://127.0.0.1:8000/inspector/network/resources/override.txt",
mimeType: "text/plain",
content: "PASS",
base64Encoded: false,
statusCode: 404,
statusText: "Not Found",
headers: {"X-Expected": "PASS"},
disabled: false,
}]
});
addTestCase({
name: "LocalResourceOverride.Enabled",
description: "Test for an enabled override.",
expression: `triggerOverrideLoad()`,
overrides: [{
url: "http://127.0.0.1:8000/inspector/network/resources/override.txt",
mimeType: "text/plain",
content: "PASS",
base64Encoded: false,
statusCode: 200,
statusText: "OK",
headers: {"X-Expected": "PASS"},
disabled: false,
}]
});
addTestCase({
name: "LocalResourceOverride.Disabled",
description: "Test for a disabled override.",
expression: `triggerOverrideLoad()`,
overrides: [{
url: "http://127.0.0.1:8000/inspector/network/resources/override.txt",
mimeType: "text/plain",
content: "FAIL",
base64Encoded: false,
statusCode: 500,
statusText: "FAIL",
headers: {"X-Expected": "FAIL"},
disabled: true,
}]
});
addTestCase({
name: "LocalResourceOverride.GlobalDisabled",
description: "Test for an override when they are globally disabled.",
expression: `triggerOverrideLoad()`,
async setup() { WI.networkManager.interceptionEnabled = false; },
async teardown() { WI.networkManager.interceptionEnabled = true; },
overrides: [{
url: "http://127.0.0.1:8000/inspector/network/resources/override.txt",
mimeType: "text/plain",
content: "FAIL",
base64Encoded: false,
statusCode: 500,
statusText: "FAIL",
headers: {"X-Expected": "FAIL"},
}]
});
suite.addTestCase({
name: "LocalResourceOverride.URL.Fragment",
description: "LocalResourceOverride creation strips a fragment",
async test() {
let localResourceOverride = WI.LocalResourceOverride.create({
url: "http://127.0.0.1:8000/inspector/network/resources/override.txt#test",
mimeType: "text/plain",
content: "OVERRIDDEN TEXT",
base64Encoded: false,
statusCode: 200,
statusText: "OK",
headers: {},
});
InspectorTest.expectEqual(localResourceOverride.localResource.url, "http://127.0.0.1:8000/inspector/network/resources/override.txt", "LocalResourceOverride creation should strip fragments.");
}
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Test for some LocalResourceOverride loads.</p>
</body>
</html>