167 lines
4.9 KiB
JavaScript
167 lines
4.9 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
Services.prefs.setBoolPref("network.early-hints.enabled", true);
|
|
|
|
async function test_referrer_policy(input, expected_results) {
|
|
// reset the count
|
|
let headers = new Headers();
|
|
headers.append("X-Early-Hint-Count-Start", "");
|
|
await fetch(
|
|
"https://example.com/browser/netwerk/test/browser/early_hint_pixel_count.sjs",
|
|
{ headers }
|
|
);
|
|
|
|
await fetch(
|
|
"https://example.com/browser/netwerk/test/browser/early_hint_referrer_policy_html.sjs?action=reset_referrer_results"
|
|
);
|
|
|
|
let requestUrl = `https://example.com/browser/netwerk/test/browser/early_hint_referrer_policy_html.sjs?as=${
|
|
input.resource_type
|
|
}&hinted=${input.hinted ? "1" : "0"}${
|
|
input.header_referrer_policy
|
|
? "&header_referrer_policy=" + input.header_referrer_policy
|
|
: ""
|
|
}
|
|
${
|
|
input.link_referrer_policy
|
|
? "&link_referrer_policy=" + input.link_referrer_policy
|
|
: ""
|
|
}`;
|
|
|
|
await BrowserTestUtils.withNewTab(
|
|
{
|
|
gBrowser,
|
|
url: requestUrl,
|
|
waitForLoad: true,
|
|
},
|
|
async function () {}
|
|
);
|
|
|
|
let gotRequestCount = await fetch(
|
|
"https://example.com/browser/netwerk/test/browser/early_hint_pixel_count.sjs"
|
|
).then(response => response.json());
|
|
|
|
// Retrieve the request referrer from the server
|
|
let referrer_response = await fetch(
|
|
"https://example.com/browser/netwerk/test/browser/early_hint_referrer_policy_html.sjs?action=get_request_referrer_results"
|
|
).then(response => response.text());
|
|
|
|
Assert.ok(
|
|
referrer_response === expected_results.referrer,
|
|
"Request referrer matches expected - " + input.test_name
|
|
);
|
|
|
|
await Assert.deepEqual(
|
|
gotRequestCount,
|
|
{ hinted: expected_results.hinted, normal: expected_results.normal },
|
|
`${input.testName} (${input.resource_type}): Unexpected amount of requests made`
|
|
);
|
|
}
|
|
|
|
add_task(async function test_103_referrer_policies() {
|
|
let tests = [
|
|
{
|
|
input: {
|
|
test_name: "image - no policies",
|
|
resource_type: "image",
|
|
header_referrer_policy: "",
|
|
link_referrer_policy: "",
|
|
hinted: true,
|
|
},
|
|
expected: {
|
|
hinted: 1,
|
|
normal: 0,
|
|
referrer:
|
|
"https://example.com/browser/netwerk/test/browser/early_hint_referrer_policy_html.sjs?as=image&hinted=1",
|
|
},
|
|
},
|
|
{
|
|
input: {
|
|
test_name: "image - origin on header",
|
|
resource_type: "image",
|
|
header_referrer_policy: "origin",
|
|
link_referrer_policy: "",
|
|
hinted: true,
|
|
},
|
|
expected: { hinted: 1, normal: 0, referrer: "https://example.com/" },
|
|
},
|
|
{
|
|
input: {
|
|
test_name: "image - origin on link",
|
|
resource_type: "image",
|
|
header_referrer_policy: "",
|
|
link_referrer_policy: "origin",
|
|
hinted: true,
|
|
},
|
|
expected: { hinted: 1, normal: 0, referrer: "https://example.com/" },
|
|
},
|
|
{
|
|
input: {
|
|
test_name: "image - origin on both",
|
|
resource_type: "image",
|
|
header_referrer_policy: "origin",
|
|
link_referrer_policy: "origin",
|
|
hinted: true,
|
|
},
|
|
expected: { hinted: 1, normal: 0, referrer: "https://example.com/" },
|
|
},
|
|
{
|
|
input: {
|
|
test_name: "image - no-referrer on header",
|
|
resource_type: "image",
|
|
header_referrer_policy: "no-referrer",
|
|
link_referrer_policy: "",
|
|
hinted: true,
|
|
},
|
|
expected: { hinted: 1, normal: 0, referrer: "" },
|
|
},
|
|
{
|
|
input: {
|
|
test_name: "image - no-referrer on link",
|
|
resource_type: "image",
|
|
header_referrer_policy: "",
|
|
link_referrer_policy: "no-referrer",
|
|
hinted: true,
|
|
},
|
|
expected: { hinted: 1, normal: 0, referrer: "" },
|
|
},
|
|
{
|
|
input: {
|
|
test_name: "image - no-referrer on both",
|
|
resource_type: "image",
|
|
header_referrer_policy: "no-referrer",
|
|
link_referrer_policy: "no-referrer",
|
|
hinted: true,
|
|
},
|
|
expected: { hinted: 1, normal: 0, referrer: "" },
|
|
},
|
|
{
|
|
// link referrer policy takes precedence
|
|
input: {
|
|
test_name: "image - origin on header, no-referrer on link",
|
|
resource_type: "image",
|
|
header_referrer_policy: "origin",
|
|
link_referrer_policy: "no-referrer",
|
|
hinted: true,
|
|
},
|
|
expected: { hinted: 1, normal: 0, referrer: "" },
|
|
},
|
|
{
|
|
// link referrer policy takes precedence
|
|
input: {
|
|
test_name: "image - no-referrer on header, origin on link",
|
|
resource_type: "image",
|
|
header_referrer_policy: "no-referrer",
|
|
link_referrer_policy: "origin",
|
|
hinted: true,
|
|
},
|
|
expected: { hinted: 1, normal: 0, referrer: "https://example.com/" },
|
|
},
|
|
];
|
|
|
|
for (let test of tests) {
|
|
await test_referrer_policy(test.input, test.expected);
|
|
}
|
|
});
|