forked from mirrors/gecko-dev
Backed out changeset a07c835a4bf7 (bug 1845150) Backed out changeset 0016d7f4e556 (bug 1845150) Backed out changeset 46cfe5fe6e6a (bug 1845150) Backed out changeset 83190b8a08d0 (bug 1845150) Backed out changeset ada948351267 (bug 1845150) Backed out changeset 7aa4340bfd96 (bug 1845150) Backed out changeset 683745289588 (bug 1845150)
232 lines
7.1 KiB
JavaScript
232 lines
7.1 KiB
JavaScript
const TEST_URL =
|
|
getRootDirectory(gTestPath).replace(
|
|
"chrome://mochitests/content",
|
|
"https://example.com"
|
|
) + "empty_file.html";
|
|
|
|
/*
|
|
* Register cleanup function to reset prefs after other tasks have run.
|
|
*/
|
|
|
|
add_task(async function () {
|
|
// Note: SpecialPowers.pushPrefEnv has problems with the "Enable DRM"
|
|
// button on the notification box toggling the prefs. So manually
|
|
// set/unset the prefs the UI we're testing toggles.
|
|
let emeWasEnabled = Services.prefs.getBoolPref("media.eme.enabled", false);
|
|
let cdmWasEnabled = Services.prefs.getBoolPref(
|
|
"media.gmp-widevinecdm.enabled",
|
|
false
|
|
);
|
|
|
|
// Restore the preferences to their pre-test state on test finish.
|
|
registerCleanupFunction(function () {
|
|
// Unlock incase lock test threw and didn't unlock.
|
|
Services.prefs.unlockPref("media.eme.enabled");
|
|
Services.prefs.setBoolPref("media.eme.enabled", emeWasEnabled);
|
|
Services.prefs.setBoolPref("media.gmp-widevinecdm.enabled", cdmWasEnabled);
|
|
});
|
|
});
|
|
|
|
/*
|
|
* Bug 1366167 - Tests that the "Enable DRM" prompt shows if EME is requested while EME is disabled.
|
|
*/
|
|
|
|
add_task(async function test_drm_prompt_shows_for_toplevel() {
|
|
await BrowserTestUtils.withNewTab(TEST_URL, async function (browser) {
|
|
// Turn off EME and Widevine CDM.
|
|
Services.prefs.setBoolPref("media.eme.enabled", false);
|
|
Services.prefs.setBoolPref("media.gmp-widevinecdm.enabled", false);
|
|
|
|
// Have content request access to Widevine, UI should drop down to
|
|
// prompt user to enable DRM.
|
|
let result = await SpecialPowers.spawn(browser, [], async function () {
|
|
try {
|
|
let config = [
|
|
{
|
|
initDataTypes: ["webm"],
|
|
videoCapabilities: [{ contentType: 'video/webm; codecs="vp9"' }],
|
|
},
|
|
];
|
|
await content.navigator.requestMediaKeySystemAccess(
|
|
"com.widevine.alpha",
|
|
config
|
|
);
|
|
} catch (ex) {
|
|
return { rejected: true };
|
|
}
|
|
return { rejected: false };
|
|
});
|
|
is(
|
|
result.rejected,
|
|
true,
|
|
"EME request should be denied because EME disabled."
|
|
);
|
|
|
|
// Verify the UI prompt showed.
|
|
let box = gBrowser.getNotificationBox(browser);
|
|
let notification = box.currentNotification;
|
|
|
|
ok(notification, "Notification should be visible");
|
|
is(
|
|
notification.getAttribute("value"),
|
|
"drmContentDisabled",
|
|
"Should be showing the right notification"
|
|
);
|
|
|
|
// Verify the "Enable DRM" button is there.
|
|
let buttons = notification.buttonContainer.querySelectorAll(
|
|
".notification-button"
|
|
);
|
|
is(buttons.length, 1, "Should have one button.");
|
|
|
|
// Prepare a Promise that should resolve when the "Enable DRM" button's
|
|
// page reload completes.
|
|
let refreshPromise = BrowserTestUtils.browserLoaded(browser);
|
|
buttons[0].click();
|
|
|
|
// Wait for the reload to complete.
|
|
await refreshPromise;
|
|
|
|
// Verify clicking the "Enable DRM" button enabled DRM.
|
|
let enabled = Services.prefs.getBoolPref("media.eme.enabled", true);
|
|
is(
|
|
enabled,
|
|
true,
|
|
"EME should be enabled after click on 'Enable DRM' button"
|
|
);
|
|
});
|
|
});
|
|
|
|
add_task(async function test_eme_locked() {
|
|
await BrowserTestUtils.withNewTab(TEST_URL, async function (browser) {
|
|
// Turn off EME and Widevine CDM.
|
|
Services.prefs.setBoolPref("media.eme.enabled", false);
|
|
Services.prefs.lockPref("media.eme.enabled");
|
|
|
|
// Have content request access to Widevine, UI should drop down to
|
|
// prompt user to enable DRM.
|
|
let result = await SpecialPowers.spawn(browser, [], async function () {
|
|
try {
|
|
let config = [
|
|
{
|
|
initDataTypes: ["webm"],
|
|
videoCapabilities: [{ contentType: 'video/webm; codecs="vp9"' }],
|
|
},
|
|
];
|
|
await content.navigator.requestMediaKeySystemAccess(
|
|
"com.widevine.alpha",
|
|
config
|
|
);
|
|
} catch (ex) {
|
|
return { rejected: true };
|
|
}
|
|
return { rejected: false };
|
|
});
|
|
is(
|
|
result.rejected,
|
|
true,
|
|
"EME request should be denied because EME disabled."
|
|
);
|
|
|
|
// Verify the UI prompt did not show.
|
|
let box = gBrowser.getNotificationBox(browser);
|
|
let notification = box.currentNotification;
|
|
|
|
is(
|
|
notification,
|
|
null,
|
|
"Notification should not be displayed since pref is locked"
|
|
);
|
|
|
|
// Unlock the pref for any tests that follow.
|
|
Services.prefs.unlockPref("media.eme.enabled");
|
|
});
|
|
});
|
|
|
|
/*
|
|
* Bug 1642465 - Ensure cross origin frames requesting access prompt in the same way as same origin.
|
|
*/
|
|
|
|
add_task(async function test_drm_prompt_shows_for_cross_origin_iframe() {
|
|
await BrowserTestUtils.withNewTab(TEST_URL, async function (browser) {
|
|
// Turn off EME and Widevine CDM.
|
|
Services.prefs.setBoolPref("media.eme.enabled", false);
|
|
Services.prefs.setBoolPref("media.gmp-widevinecdm.enabled", false);
|
|
|
|
// Have content request access to Widevine, UI should drop down to
|
|
// prompt user to enable DRM.
|
|
const CROSS_ORIGIN_URL = TEST_URL.replace("example.com", "example.org");
|
|
let result = await SpecialPowers.spawn(
|
|
browser,
|
|
[CROSS_ORIGIN_URL],
|
|
async function (crossOriginUrl) {
|
|
let frame = content.document.createElement("iframe");
|
|
frame.src = crossOriginUrl;
|
|
await new Promise(resolve => {
|
|
frame.addEventListener("load", () => {
|
|
resolve();
|
|
});
|
|
content.document.body.appendChild(frame);
|
|
});
|
|
|
|
return content.SpecialPowers.spawn(frame, [], async function () {
|
|
try {
|
|
let config = [
|
|
{
|
|
initDataTypes: ["webm"],
|
|
videoCapabilities: [
|
|
{ contentType: 'video/webm; codecs="vp9"' },
|
|
],
|
|
},
|
|
];
|
|
await content.navigator.requestMediaKeySystemAccess(
|
|
"com.widevine.alpha",
|
|
config
|
|
);
|
|
} catch (ex) {
|
|
return { rejected: true };
|
|
}
|
|
return { rejected: false };
|
|
});
|
|
}
|
|
);
|
|
is(
|
|
result.rejected,
|
|
true,
|
|
"EME request should be denied because EME disabled."
|
|
);
|
|
|
|
// Verify the UI prompt showed.
|
|
let box = gBrowser.getNotificationBox(browser);
|
|
let notification = box.currentNotification;
|
|
|
|
ok(notification, "Notification should be visible");
|
|
is(
|
|
notification.getAttribute("value"),
|
|
"drmContentDisabled",
|
|
"Should be showing the right notification"
|
|
);
|
|
|
|
// Verify the "Enable DRM" button is there.
|
|
let buttons = notification.buttonContainer.querySelectorAll(
|
|
".notification-button"
|
|
);
|
|
is(buttons.length, 1, "Should have one button.");
|
|
|
|
// Prepare a Promise that should resolve when the "Enable DRM" button's
|
|
// page reload completes.
|
|
let refreshPromise = BrowserTestUtils.browserLoaded(browser);
|
|
buttons[0].click();
|
|
|
|
// Wait for the reload to complete.
|
|
await refreshPromise;
|
|
|
|
// Verify clicking the "Enable DRM" button enabled DRM.
|
|
let enabled = Services.prefs.getBoolPref("media.eme.enabled", true);
|
|
is(
|
|
enabled,
|
|
true,
|
|
"EME should be enabled after click on 'Enable DRM' button"
|
|
);
|
|
});
|
|
});
|