WebM is not enabled in WebKitTestRunner when GPU Process is used void GPUProcessProxy::updatePreferences() { .... WebPageGroup::forEach([&] (auto& group) mutable { if (!group.preferences().useGPUProcessForMediaEnabled()) return; #if ENABLE(OPUS) if (group.preferences().opusDecoderEnabled()) hasEnabledOpus = true; #endif #if ENABLE(VORBIS) if (group.preferences().vorbisDecoderEnabled()) hasEnabledVorbis = true; #endif #if ENABLE(WEBM_FORMAT_READER) if (group.preferences().webMFormatReaderEnabled()) hasEnabledWebMFormatReader = true; #endif #if ENABLE(MEDIA_SOURCE) && ENABLE(VP9) if (group.preferences().webMParserEnabled()) hasEnabledWebMParser = true; #endif }); ... It's not correct to iterate the WebPageGroup::forEach. The WebKitTestRunner and MiniBrowser do not seem to use a preferences object that is part of a WebPageGroup. They seem to be using a brand new preferences object. Tested by: run-webkit-tests --debug --force media/media-can-play-webm.html (observe the double negative result expectations in internal)
One option would be to just simplify and unilaterally always enable the codecs and the format reader in the GPU process. If I understand correctly there shouldn't be any security downside, at least.
<rdar://problem/81850175>