From setResponseOverride";
replacedHttpResponse.setResponseHeader(
"some-header",
"some-value",
false
);
replacedHttpResponse.setResponseHeader(
"Set-Cookie",
"foo=bar;Path=/",
false
);
aSubject.setResponseOverride(replacedHttpResponse);
}
},
};
Services.obs.addObserver(observer,
"http-on-before-connect");
const onTabLoaded = BrowserTestUtils.withNewTab(
{
gBrowser,
url:
"https://example.com/browser/netwerk/test/browser/dummy.html",
waitForLoad:
true,
},
async
function (browser) {
await ContentTask.spawn(browser, [], async
function () {
Assert.ok(
!!content.document.getElementById(
"from-response-override"),
"Page was loaded using the response override"
);
Assert.equal(
content.document.cookie,
"foo=bar",
"Cookie was set from the response override headers"
);
// Perform another request to the same URL to check status and headers override.
const response = await content.fetch(
"https://example.com/browser/netwerk/test/browser/dummy.html"
);
Assert.equal(
response.status,
200,
"Status was set from the response override"
);
Assert.equal(
response.statusText,
"Och Aye",
"Status text was set from the response override"
);
Assert.equal(
response.headers.get(
"some-header"),
"some-value",
"same-header header was set from the response override"
);
});
}
);
await onTabLoaded;
Services.obs.removeObserver(observer,
"http-on-before-connect");
});
// Test that a response override with 302 Found status + Location header
// redirects to the URL specified in the Location header.
add_task(async
function test_set_response_override_redirects() {
let observer = {
QueryInterface: ChromeUtils.generateQI([
"nsIObserver"]),
observe(aSubject, aTopic) {
aSubject = aSubject.QueryInterface(Ci.nsIHttpChannelInternal);
if (
aTopic ==
"http-on-before-connect" &&
aSubject.URI.spec ==
"https://example.com/browser/netwerk/test/browser/dummy.html"
) {
const replacedHttpResponse = Cc[
"@mozilla.org/network/replaced-http-response;1"
].createInstance(Ci.nsIReplacedHttpResponse);
replacedHttpResponse.responseStatus = 302;
replacedHttpResponse.responseStatusText =
"Found";
replacedHttpResponse.setResponseHeader(
"Location",
"https://example.com/browser/netwerk/test/browser/dummy.html?redirected=true",
false
);
aSubject.setResponseOverride(replacedHttpResponse);
}
},
};
Services.obs.addObserver(observer,
"http-on-before-connect");
const onTabLoaded = BrowserTestUtils.withNewTab(
{
gBrowser,
url:
"https://example.com/browser/netwerk/test/browser/dummy.html",
waitForLoad:
true,
},
async
function (browser) {
await ContentTask.spawn(browser, [], async
function () {
Assert.equal(
content.location.href,
"https://example.com/browser/netwerk/test/browser/dummy.html?redirected=true",
"Navigation was redirected based on the overridden response"
);
});
}
);
await onTabLoaded;
Services.obs.removeObserver(observer,
"http-on-before-connect");
});