Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/*
* Description of the Test:
* We load an https page which uses a CSP including block-all-mixed-content.
* The page embedded an audio, img and video. ML2 should upgrade them and
* CSP should not be triggered.
*/
const PRE_PATH = getRootDirectory(gTestPath).replace(
);
let gExpectedMessages = 0;
let gExpectBlockAllMsg = false;
function onConsoleMessage({ message }) {
// Check if csp warns about block-all-mixed content being obsolete
if (message.includes("Content-Security-Policy")) {
if (gExpectBlockAllMsg) {
ok(
message.includes("block-all-mixed-content obsolete"),
"CSP warns about block-all-mixed content being obsolete"
);
} else {
ok(
message.includes("Blocking insecure request"),
"CSP error about blocking insecure request"
);
}
}
if (message.includes("Mixed Content:")) {
ok(
message.includes("Upgrading insecure display request"),
"msg included a mixed content upgrade"
);
gExpectedMessages--;
}
}
async function checkLoadedElements() {
let url =
PRE_PATH +
"file_csp_block_all_mixedcontent_and_mixed_content_display_upgrade.html";
return BrowserTestUtils.withNewTab(
{
gBrowser,
url,
waitForLoad: true,
},
async function (browser) {
return ContentTask.spawn(browser, [], async function () {
console.log(content.document.innerHTML);
// Check image loaded
let image = content.document.getElementById("some-img");
let imageLoaded = image && image.complete && image.naturalHeight !== 0;
// Check audio loaded
let audio = content.document.getElementById("some-audio");
let audioLoaded = audio && audio.readyState >= 2;
// Check video loaded
let video = content.document.getElementById("some-video");
//let videoPlayable = await once(video, "loadeddata").then(_ => true);
let videoLoaded = video && video.readyState === 4;
return { audio: audioLoaded, img: imageLoaded, video: videoLoaded };
});
}
);
}
add_task(async function test_upgrade_all() {
await SpecialPowers.pushPrefEnv({
set: [
["security.mixed_content.upgrade_display_content", true],
// Not enabled by default outside Nightly.
["security.mixed_content.upgrade_display_content.image", true],
],
});
Services.console.registerListener(onConsoleMessage);
// Starting the test
gExpectedMessages = 3;
gExpectBlockAllMsg = true;
let loadedElements = await checkLoadedElements();
is(loadedElements.img, true, "Image loaded and was upgraded");
is(loadedElements.video, true, "Video loaded and was upgraded");
is(loadedElements.audio, true, "Audio loaded and was upgraded");
await BrowserTestUtils.waitForCondition(() => gExpectedMessages === 0);
// Clean up
Services.console.unregisterListener(onConsoleMessage);
SpecialPowers.popPrefEnv();
});
add_task(async function test_dont_upgrade_image() {
await SpecialPowers.pushPrefEnv({
set: [
["security.mixed_content.upgrade_display_content", true],
["security.mixed_content.upgrade_display_content.image", false],
],
});
Services.console.registerListener(onConsoleMessage);
// Starting the test
gExpectedMessages = 2;
gExpectBlockAllMsg = false;
let loadedElements = await checkLoadedElements();
is(loadedElements.img, false, "Image was not loaded");
is(loadedElements.video, true, "Video loaded and was upgraded");
is(loadedElements.audio, true, "Audio loaded and was upgraded");
await BrowserTestUtils.waitForCondition(() => gExpectedMessages === 0);
// Clean up
Services.console.unregisterListener(onConsoleMessage);
SpecialPowers.popPrefEnv();
});
add_task(async function test_dont_upgrade_audio() {
await SpecialPowers.pushPrefEnv({
set: [
["security.mixed_content.upgrade_display_content", true],
["security.mixed_content.upgrade_display_content.image", true],
["security.mixed_content.upgrade_display_content.audio", false],
],
});
Services.console.registerListener(onConsoleMessage);
// Starting the test
gExpectedMessages = 2;
gExpectBlockAllMsg = false;
let loadedElements = await checkLoadedElements();
is(loadedElements.img, true, "Image loaded and was upgraded");
is(loadedElements.video, true, "Video loaded and was upgraded");
is(loadedElements.audio, false, "Audio was not loaded");
await BrowserTestUtils.waitForCondition(() => gExpectedMessages === 0);
// Clean up
Services.console.unregisterListener(onConsoleMessage);
SpecialPowers.popPrefEnv();
});
add_task(async function test_dont_upgrade_video() {
await SpecialPowers.pushPrefEnv({
set: [
["security.mixed_content.upgrade_display_content", true],
["security.mixed_content.upgrade_display_content.image", true],
["security.mixed_content.upgrade_display_content.video", false],
],
});
Services.console.registerListener(onConsoleMessage);
// Starting the test
gExpectedMessages = 2;
gExpectBlockAllMsg = false;
let loadedElements = await checkLoadedElements();
is(loadedElements.img, true, "Image loaded and was upgraded");
is(loadedElements.video, false, "Video was not loaded");
is(loadedElements.audio, true, "Audio loaded and was upgraded");
await BrowserTestUtils.waitForCondition(() => gExpectedMessages === 0);
// Clean up
Services.console.unregisterListener(onConsoleMessage);
SpecialPowers.popPrefEnv();
});