Steps to reproduce
- Install any tab or meeting app whose content plays DRM-protected video (Widevine/PlayReady via Encrypted Media Extensions). Reproduces in both the new Teams desktop client (WebView2) and Teams on the web, on Windows and macOS.
- From inside the app's iframe, run:
navigator.requestMediaKeySystemAccess('com.widevine.alpha', [{
initDataTypes: ['cenc'],
videoCapabilities: [{ contentType: 'video/mp4; codecs="avc1.64001f"' }],
}]).then(console.log, console.error);
- The promise rejects with
SecurityError before any key system is evaluated. Confirming diagnostic from inside the iframe:
document.featurePolicy.allowsFeature('encrypted-media') // → false
Root cause: EME is gated by the encrypted-media Permissions Policy feature (default allowlist 'self'). Teams embeds app content in a cross-origin iframe without allow="encrypted-media", so the permission can never be granted from the app side. The same code succeeds when the app origin is loaded in a standalone tab.
Expected behavior
Apps can play DRM-protected media inside Teams. The app-content iframe should include encrypted-media in its allow attribute, either unconditionally, or opt-in via an app-manifest declaration (devicePermissions or a new capability), the same mechanism by which clipboard access was requested and delivered (#3588, OfficeDev/microsoft-teams-library-js#738).
This affects every ISV that needs protected media in Teams (our use case: studio-grade secure content review during meetings, where DRM is contractually required by the content owners). There is no app-side workaround: Permissions Policy delegation is parent-controlled by design, and serving unprotected streams defeats the content-protection requirement.
Actual behavior
navigator.requestMediaKeySystemAccess() rejects with SecurityError for every key system (Widevine, PlayReady), so no DRM-protected content can play in any embedded app surface. document.featurePolicy.allowsFeature('encrypted-media') returns false inside the app iframe.
Error details
[Violation] Permissions policy violation: encrypted-media is not allowed in this document.
Encrypted Media access has been blocked because of a Feature Policy applied to the current document.
Steps to reproduce
SecurityErrorbefore any key system is evaluated. Confirming diagnostic from inside the iframe:Root cause: EME is gated by the encrypted-media Permissions Policy feature (default allowlist 'self'). Teams embeds app content in a cross-origin iframe without allow="encrypted-media", so the permission can never be granted from the app side. The same code succeeds when the app origin is loaded in a standalone tab.
Expected behavior
Apps can play DRM-protected media inside Teams. The app-content iframe should include
encrypted-mediain itsallowattribute, either unconditionally, or opt-in via an app-manifest declaration (devicePermissionsor a new capability), the same mechanism by which clipboard access was requested and delivered (#3588, OfficeDev/microsoft-teams-library-js#738).This affects every ISV that needs protected media in Teams (our use case: studio-grade secure content review during meetings, where DRM is contractually required by the content owners). There is no app-side workaround: Permissions Policy delegation is parent-controlled by design, and serving unprotected streams defeats the content-protection requirement.
Actual behavior
navigator.requestMediaKeySystemAccess()rejects withSecurityErrorfor every key system (Widevine, PlayReady), so no DRM-protected content can play in any embedded app surface.document.featurePolicy.allowsFeature('encrypted-media')returnsfalseinside the app iframe.Error details