/* 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/. */
"use strict" ;
Services.prefs.setBoolPref(
"network.early-hints.enabled" ,
true );
// This verifies hints, requests server-side and client-side that the image actually loaded
async
function test_image_preload_hint_request_loaded(
input,
expected_results,
image_should_load
) {
// 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 }
);
let requestUrl = `https:
//example.com/browser/netwerk/test/browser/early_hint_csp_options_html.sjs?as=${
input.resource_type
}&hinted=${input.hinted ?
"1" :
"0" }${input.csp ?
"&csp=" + input.csp :
"" }${
input.csp_in_early_hint
?
"&csp_in_early_hint=" + input.csp_in_early_hint
:
""
}${input.host ?
"&host=" + input.host :
"" }`;
console.log(
"requestUrl: " + requestUrl);
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: requestUrl,
waitForLoad:
true ,
},
async
function (browser) {
let imageLoaded = await ContentTask.spawn(browser, [],
function () {
let image = content.document.getElementById(
"test_image" );
return image && image.complete && image.naturalHeight !== 0;
});
await
Assert .ok(
image_should_load == imageLoaded,
"test_image_preload_hint_request_loaded: the image can be loaded as expected " +
requestUrl
);
}
);
let gotRequestCount = await fetch(
"https://example.com/browser/netwerk/test/browser/early_hint_pixel_count.sjs "
).then(response => response.json());
await
Assert .deepEqual(gotRequestCount, expected_results, input.test_name);
Services.cache2.clear();
}
// These tests verify whether or not the image actually loaded in the document
add_task(async
function test_images_loaded_with_csp() {
let tests = [
{
input: {
test_name:
"image loaded - no csp" ,
resource_type:
"image" ,
csp:
"" ,
csp_in_early_hint:
"" ,
host:
"" ,
hinted:
true ,
},
expected: { hinted: 1, normal: 0 },
image_should_load:
true ,
},
{
input: {
test_name:
"image loaded - img-src none" ,
resource_type:
"image" ,
csp:
"img-src 'none';" ,
csp_in_early_hint:
"" ,
host:
"" ,
hinted:
true ,
},
expected: { hinted: 1, normal: 0 },
image_should_load:
false ,
},
{
input: {
test_name:
"image loaded - img-src none in EH response" ,
resource_type:
"image" ,
csp:
"" ,
csp_in_early_hint:
"img-src 'none';" ,
host:
"" ,
hinted:
true ,
},
expected: { hinted: 0, normal: 1 },
image_should_load:
true ,
},
{
input: {
test_name:
"image loaded - img-src none in both headers" ,
resource_type:
"image" ,
csp:
"img-src 'none';" ,
csp_in_early_hint:
"img-src 'none';" ,
host:
"" ,
hinted:
true ,
},
expected: { hinted: 0, normal: 0 },
image_should_load:
false ,
},
{
input: {
test_name:
"image loaded - img-src self" ,
resource_type:
"image" ,
csp:
"img-src 'self';" ,
csp_in_early_hint:
"" ,
host:
"" ,
hinted:
true ,
},
expected: { hinted: 1, normal: 0 },
image_should_load:
true ,
},
{
input: {
test_name:
"image loaded - img-src self in EH response" ,
resource_type:
"image" ,
csp:
"" ,
csp_in_early_hint:
"img-src 'self';" ,
host:
"" ,
hinted:
true ,
},
expected: { hinted: 1, normal: 0 },
image_should_load:
true ,
},
{
input: {
test_name:
"image loaded - conflicting csp, early hint skipped" ,
resource_type:
"image" ,
csp:
"img-src 'self';" ,
csp_in_early_hint:
"img-src 'none';" ,
host:
"" ,
hinted:
true ,
},
expected: { hinted: 0, normal: 1 },
image_should_load:
true ,
},
{
input: {
test_name:
"image loaded - conflicting csp, resource not loaded in document" ,
resource_type:
"image" ,
csp:
"img-src 'none';" ,
csp_in_early_hint:
"img-src 'self';" ,
host:
"" ,
hinted:
true ,
},
expected: { hinted: 1, normal: 0 },
image_should_load:
false ,
},
];
for (let test of tests) {
await test_image_preload_hint_request_loaded(
test.input,
test.expected,
test.image_should_load
);
}
});
Messung V0.5 C=94 H=91 G=92
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland