forked from mirrors/gecko-dev
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"
|
|
);
|
|
});
|
|
});
|