blob: c3dd35ac3d05a6de713d10826909f8a55e2293ae [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="../resources/inspector-test.js"></script>
<script>
function createTemporaryFile(name, contents) {
if (!window.internals)
return "";
let path = window.internals.createTemporaryFile(name, contents);
if (!path) {
TestPage.addResult(`FAIL: could not create file`);
return "";
}
return path;
}
function triggerOverrideLoad() {
fetch("http://127.0.0.1:8000/inspector/network/resources/override.txt").then(() => {
TestPage.dispatchEventToFrontend("LoadComplete");
});
}
function test()
{
let suite = InspectorTest.createAsyncSuite("LocalResourceOverride");
suite.addTestCase({
name: "LocalResourceOverride.MappedToFile.Valid",
description: "Test that `WI.LocalResource.prototype.mapToFile` correctly loads a file that exists.",
async test() {
const url = "http://127.0.0.1:8000/inspector/network/resources/override.txt";
InspectorTest.log("Creating Local Resource Override for: " + url);
let localResourceOverride = WI.LocalResourceOverride.create(url, WI.LocalResourceOverride.InterceptType.Response, {
responseMIMEType: "text/plain",
responseContent: "FAIL: Should load from file.",
});
WI.networkManager.addLocalResourceOverride(localResourceOverride);
InspectorTest.log("Linking to file...");
localResourceOverride.localResource.mappedFilePath = await InspectorTest.evaluateInPage(`createTemporaryFile("LocalResourceOverride_MappedToFile_Valid", "PASS: Should load from file.")`);
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(`triggerOverrideLoad()`),
]);
InspectorTest.pass("Resource Loaded.");
let resource = resourceWasAddedEvent.data.resource;
let {rawContent, rawBase64Encoded} = await resource.requestContent();
InspectorTest.log(`Resource Content: '${rawBase64Encoded ? "[base64] " : ""}${rawContent}'`);
let localResourceCurrentRevision = localResourceOverride.localResource.currentRevision;
InspectorTest.log(`Local Resource Override Content: '${localResourceCurrentRevision.base64Encoded ? "[base64] " : ""}${localResourceCurrentRevision.content}'`)
WI.networkManager.removeLocalResourceOverride(localResourceOverride);
}
});
suite.addTestCase({
name: "LocalResourceOverride.MappedToFile.MappedFileChanged",
description: "Test that `WI.LocalResource.prototype.mapToFile` correctly re-loads the mapped file.",
async test() {
const url = "http://127.0.0.1:8000/inspector/network/resources/override.txt";
InspectorTest.log("Creating Local Resource Override for: " + url);
let localResourceOverride = WI.LocalResourceOverride.create(url, WI.LocalResourceOverride.InterceptType.Response, {
responseMIMEType: "text/plain",
responseContent: "FAIL: Should load from file.",
});
WI.networkManager.addLocalResourceOverride(localResourceOverride);
InspectorTest.log("Linking to file...");
// Simulate the file contents changing after the frontend has already loaded it, as `set mappedFilePath` will immediately attempt to load the file's contents.
localResourceOverride.localResource._mappedFilePath = await InspectorTest.evaluateInPage(`createTemporaryFile("LocalResourceOverride_MappedToFile_MappedFileChanged", "PASS: Should load from file.")`);
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(`triggerOverrideLoad()`),
]);
InspectorTest.pass("Resource Loaded.");
let resource = resourceWasAddedEvent.data.resource;
let {rawContent, rawBase64Encoded} = await resource.requestContent();
InspectorTest.log(`Resource Content: '${rawBase64Encoded ? "[base64] " : ""}${rawContent}'`);
let localResourceCurrentRevision = localResourceOverride.localResource.currentRevision;
InspectorTest.log(`Local Resource Override Content: '${localResourceCurrentRevision.base64Encoded ? "[base64] " : ""}${localResourceCurrentRevision.content}'`)
WI.networkManager.removeLocalResourceOverride(localResourceOverride);
}
});
suite.addTestCase({
name: "LocalResourceOverride.MappedToFile.MappedFileDeleted",
description: "Test that `WI.LocalResource.prototype.mapToFile` does not crash if the previously mapped file no longer exists.",
async test() {
const url = "http://127.0.0.1:8000/inspector/network/resources/override.txt";
InspectorTest.log("Creating Local Resource Override for: " + url);
let localResourceOverride = WI.LocalResourceOverride.create(url, WI.LocalResourceOverride.InterceptType.Response, {
responseMIMEType: "text/plain",
responseContent: "PASS: Should not load from file.",
});
WI.networkManager.addLocalResourceOverride(localResourceOverride);
InspectorTest.log("Linking to file...");
// Simulate the file being deleted after the frontend has already loaded it, as `set mappedFilePath` will immediately attempt to load the file's contents.
localResourceOverride.localResource._mappedFilePath = "DOES NOT EXIST";
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(`triggerOverrideLoad()`),
]);
InspectorTest.pass("Resource Loaded.");
let resource = resourceWasAddedEvent.data.resource;
let {rawContent, rawBase64Encoded} = await resource.requestContent();
InspectorTest.log(`Resource Content: '${rawBase64Encoded ? "[base64] " : ""}${rawContent}'`);
let localResourceCurrentRevision = localResourceOverride.localResource.currentRevision;
InspectorTest.log(`Local Resource Override Content: '${localResourceCurrentRevision.base64Encoded ? "[base64] " : ""}${localResourceCurrentRevision.content}'`)
WI.networkManager.removeLocalResourceOverride(localResourceOverride);
}
});
suite.addTestCase({
name: "LocalResourceOverride.MappedToFile.Invalid",
description: "Test that `WI.LocalResource.prototype.mapToFile` does not crash when attempting to load a file that does not exist.",
async test() {
const url = "http://127.0.0.1:8000/inspector/network/resources/override.txt";
InspectorTest.log("Creating Local Resource Override for: " + url);
let localResourceOverride = WI.LocalResourceOverride.create(url, WI.LocalResourceOverride.InterceptType.Response, {
responseMIMEType: "text/plain",
responseContent: "PASS: Should not load from file.",
});
WI.networkManager.addLocalResourceOverride(localResourceOverride);
InspectorTest.log("Linking to file...");
localResourceOverride.localResource.mappedFilePath = "DOES NOT EXIST";
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(`triggerOverrideLoad()`),
]);
InspectorTest.pass("Resource Loaded.");
let resource = resourceWasAddedEvent.data.resource;
let {rawContent, rawBase64Encoded} = await resource.requestContent();
InspectorTest.log(`Resource Content: '${rawBase64Encoded ? "[base64] " : ""}${rawContent}'`);
let localResourceCurrentRevision = localResourceOverride.localResource.currentRevision;
InspectorTest.log(`Local Resource Override Content: '${localResourceCurrentRevision.base64Encoded ? "[base64] " : ""}${localResourceCurrentRevision.content}'`)
WI.networkManager.removeLocalResourceOverride(localResourceOverride);
}
});
suite.runTestCasesAndFinish();
}
</script>
</head>
<body onload="runTest()">
<p>Tests for LocalResourceOverride being mapped to a file.</p>
</body>
</html>