WPT
wpt / screen-capture / getdisplaymedia.https.html
Spec: Screen Capture ↗
Runs: Chrome 155.0.8039.0 (wpt@6ec9fd59f, 2026-09-03) | Firefox 157.0a1 (wpt@6ec9fd59f, 2026-09-03) | Safari 251 preview (wpt@5ce815a83, 2026-08-27) | Ladybird 1.0-795e1 (wpt@7e3d005d7, 2026-09-03) | Servo Servo 0.6 (wpt@09159dcb3, 2026-09-02) | Blitz 188486089 (wpt@a95401e4e, 2026-09-02)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 77/78 | 61/78 | 3/78 | 0/78 | 0/78 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| getDisplayMedia in navigator.mediaDevices | PASS | PASS | PASS | FAIL | FAIL | — |
| getDisplayMedia() must require user activation | FAIL | PASS | PASS | FAIL | FAIL | — |
| getDisplayMedia({"video":true}) must succeed with video | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":true,"audio":false}) must succeed with video | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{}}) must succeed with video | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"audio":false}) must succeed with video | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({}) must succeed with video | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia(undefined) must succeed with video | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":false}) must fail with TypeError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"advanced":[{"width":320}]}}) must fail with TypeError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"width":{"min":320}}}) must fail with TypeError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"width":{"exact":320}}}) must fail with TypeError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"height":{"min":240}}}) must fail with TypeError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"height":{"exact":240}}}) must fail with TypeError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"frameRate":{"min":4}}}) must fail with TypeError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"frameRate":{"exact":4}}}) must fail with TypeError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":true,"audio":true}) must succeed with video maybe audio | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"audio":true}) must succeed with video maybe audio | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({video: {"width":{"max":360}}}) must be constrained | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({video: {"height":{"max":240}}}) must be constrained | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({video: {"width":{"max":360},"height":{"max":240}}}) must be constrained | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({video: {"frameRate":{"max":4}}}) must be constrained | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({video: {"frameRate":{"max":4},"width":{"max":360}}}) must be constrained | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({video: {"frameRate":{"max":4},"height":{"max":240}}}) must be constrained | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({video: {"frameRate":{"max":4},"width":{"max":360},"height":{"max":240}}}) must be constrained | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({video: {"width":160}}) must be downscaled precisely | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({video: {"height":120}}) must be downscaled precisely | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({video: {"width":80}}) must be downscaled precisely | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({video: {"height":60}}) must be downscaled precisely | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({video: {"width":158}}) must be downscaled precisely | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({video: {"height":118}}) must be downscaled precisely | PASS | PASS | FAIL | FAIL | FAIL | — |
| applyConstraints(width or height) must downscale precisely | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"width":{"max":0}}}) must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"height":{"max":0}}}) must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"frameRate":{"max":0}}}) must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"width":{"max":-1}}}) must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"height":{"max":-1}}}) must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"frameRate":{"max":-1}}}) must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| applyConstraints({"width":{"max":0}}) for display media must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| applyConstraints({"height":{"max":0}}) for display media must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| applyConstraints({"frameRate":{"max":0}}) for display media must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| applyConstraints({"width":{"max":-1}}) for display media must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| applyConstraints({"height":{"max":-1}}) for display media must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| applyConstraints({"frameRate":{"max":-1}}) for display media must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| applyConstraints({"width":{"min":100,"max":10}}) for display media must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| applyConstraints({"height":{"min":100,"max":10}}) for display media must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| applyConstraints({"frameRate":{"min":100,"max":10}}) for display media must fail with OverconstrainedError | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia() resolves with stream with video track | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"displaySurface":"monitor"}}) with getSettings | PASS | FAIL | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"displaySurface":"window"}}) with getSettings | PASS | FAIL | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"displaySurface":"browser"}}) with getSettings | PASS | FAIL | FAIL | FAIL | FAIL | — |
| displaySurface is supported | PASS | FAIL | PASS | FAIL | FAIL | — |
| getDisplayMedia({"video":{"displaySurface":"monitor"}}) must succeed | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"displaySurface":"window"}}) must succeed | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"displaySurface":"browser"}}) must succeed | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"selfBrowserSurface":"include"}) must succeed | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"selfBrowserSurface":"exclude"}) must succeed | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"surfaceSwitching":"include"}) must succeed | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"surfaceSwitching":"exclude"}) must succeed | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"systemAudio":"include"}) must succeed | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"systemAudio":"exclude"}) must succeed | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"windowAudio":"exclude"}) must succeed | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"windowAudio":"window"}) must succeed | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"windowAudio":"system"}) must succeed | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"audioSelection":"preferred"}) must succeed | PASS | PASS | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"selfBrowserSurface":"invalid"}) must fail with TypeError | PASS | FAIL | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"surfaceSwitching":"invalid"}) must fail with TypeError | PASS | FAIL | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"systemAudio":"invalid"}) must fail with TypeError | PASS | FAIL | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"windowAudio":"invalid"}) must fail with TypeError | PASS | FAIL | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"monitorTypeSurfaces":"invalid"}) must fail with TypeError | PASS | FAIL | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"audioSelection":"invalid"}) must fail with TypeError | PASS | FAIL | FAIL | FAIL | FAIL | — |
| suppressLocalAudioPlayback is supported | PASS | FAIL | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"audio":{"suppressLocalAudioPlayback":true}}) with getSettings | PASS | FAIL | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"audio":{"suppressLocalAudioPlayback":false}}) with getSettings | PASS | FAIL | FAIL | FAIL | FAIL | — |
| getDisplayMedia() with getCapabilities | PASS | FAIL | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"displaySurface":"monitor"},"monitorTypeSurfaces":"exclude"}) rejects with TypeError | PASS | FAIL | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"video":{"displaySurface":"monitor"},"monitorTypeSurfaces":"include"}) resolves with a monitor track | PASS | FAIL | FAIL | FAIL | FAIL | — |
| getDisplayMedia({"monitorTypeSurfaces":"exclude"}) resolves with a non monitor track | PASS | FAIL | FAIL | FAIL | FAIL | — |