Skip to content

App content iframe lacks allow="encrypted-media", EME (DRM playback) blocked for all tab/meeting apps #14456

Description

@Nelrohd

Steps to reproduce

  1. 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.
  2. 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);
  1. 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.

Metadata

Metadata

Assignees

Labels

teams-developer-supportQuestion related to extensibility (Bot, ME, Tab) would be marked under this label

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions