diff options
-rw-r--r-- | components/script/dom/htmlmediaelement.rs | 17 | ||||
-rw-r--r-- | tests/wpt/metadata/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html.ini | 86 |
2 files changed, 36 insertions, 67 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index 1122e267e7e..a37a06d4047 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -31,10 +31,13 @@ use dom::node::{window_from_node, document_from_node, Node, UnbindContext}; use dom::promise::Promise; use dom::virtualmethods::VirtualMethods; use dom_struct::dom_struct; +#[cfg(all(any(target_os = "macos", target_os = "linux"), not(any(target_arch = "arm", target_arch = "aarch64"))))] +use gecko_media::{CanPlayType, GeckoMedia}; use html5ever::{LocalName, Prefix}; use ipc_channel::ipc; use ipc_channel::router::ROUTER; use microtask::{Microtask, MicrotaskRunnable}; +#[allow(unused_imports)] use mime::{Mime, SubLevel, TopLevel}; use net_traits::{FetchResponseListener, FetchMetadata, Metadata, NetworkError}; use net_traits::request::{CredentialsMode, Destination, RequestInit}; @@ -869,6 +872,20 @@ impl HTMLMediaElementMethods for HTMLMediaElement { // https://html.spec.whatwg.org/multipage/#dom-navigator-canplaytype fn CanPlayType(&self, type_: DOMString) -> CanPlayTypeResult { + #[cfg(all( + any(target_os = "macos", target_os = "linux"), + not(any(target_arch = "arm", target_arch = "aarch64"))))] + { + let gecko_media = match GeckoMedia::get() { + Ok(gecko_media) => gecko_media, + Err(_error) => return CanPlayTypeResult::_empty, + }; + return match gecko_media.can_play_type(&type_) { + CanPlayType::No => CanPlayTypeResult::_empty, + CanPlayType::Maybe => CanPlayTypeResult::Maybe, + CanPlayType::Probably => CanPlayTypeResult::Probably + }; + } match type_.parse::<Mime>() { Ok(Mime(TopLevel::Application, SubLevel::OctetStream, _)) | Err(_) => { diff --git a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html.ini index dc43bf6b602..6b0ad4e3e0f 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html.ini @@ -1,125 +1,77 @@ [canPlayType.html] type: testharness - [video/x-new-fictional-format] - expected: FAIL - - [audio/mp4; codecs="mp4a.40.2" (optional)] - expected: FAIL - - [audio/mp4 with bogus codec] - expected: FAIL - - [audio/ogg; codecs="opus" (optional)] - expected: FAIL - - [audio/ogg; codecs="vorbis" (optional)] - expected: FAIL - - [audio/ogg with bogus codec] - expected: FAIL - - [audio/wav; codecs="1" (optional)] - expected: FAIL - - [audio/wav with bogus codec] - expected: FAIL - [audio/webm; codecs="opus" (optional)] expected: FAIL [audio/webm; codecs="vorbis" (optional)] expected: FAIL - [audio/webm with bogus codec] - expected: FAIL - [video/3gpp; codecs="samr" (optional)] expected: FAIL [video/3gpp; codecs="mp4v.20.8" (optional)] expected: FAIL - [video/3gpp with bogus codec] - expected: FAIL - - [video/mp4; codecs="mp4a.40.2" (optional)] - expected: FAIL - - [video/mp4; codecs="avc1.42E01E" (optional)] - expected: FAIL - - [video/mp4; codecs="avc1.4D401E" (optional)] - expected: FAIL - - [video/mp4; codecs="avc1.58A01E" (optional)] - expected: FAIL - - [video/mp4; codecs="avc1.64001E" (optional)] - expected: FAIL - [video/mp4; codecs="mp4v.20.8" (optional)] expected: FAIL [video/mp4; codecs="mp4v.20.240" (optional)] expected: FAIL - [video/mp4 with bogus codec] - expected: FAIL - - [video/ogg; codecs="opus" (optional)] + [video/webm; codecs="opus" (optional)] expected: FAIL - [video/ogg; codecs="vorbis" (optional)] + [video/webm; codecs="vorbis" (optional)] expected: FAIL - [video/ogg; codecs="theora" (optional)] + [video/webm; codecs="vp8" (optional)] expected: FAIL - [video/ogg with bogus codec] + [video/webm; codecs="vp8.0" (optional)] expected: FAIL - [video/webm; codecs="opus" (optional)] + [video/webm; codecs="vp9" (optional)] expected: FAIL - [video/webm; codecs="vorbis" (optional)] + [video/webm; codecs="vp9.0" (optional)] expected: FAIL - [video/webm; codecs="vp8" (optional)] + [audio/mp4 with and without codecs] expected: FAIL - [video/webm; codecs="vp8.0" (optional)] + [audio/ogg with and without codecs] expected: FAIL - [video/webm; codecs="vp9" (optional)] + [audio/wav with and without codecs] expected: FAIL - [video/webm; codecs="vp9.0" (optional)] + [video/mp4 with and without codecs] expected: FAIL - [video/webm with bogus codec] + [video/ogg with and without codecs] expected: FAIL - [audio/mp4 with and without codecs] + [audio/mp4 (optional)] expected: FAIL - [audio/ogg with and without codecs] + [audio/ogg (optional)] expected: FAIL - [audio/wav with and without codecs] + [audio/wav (optional)] expected: FAIL - [audio/webm with and without codecs] + [audio/webm (optional)] expected: FAIL - [video/3gpp with and without codecs] + [video/3gpp (optional)] expected: FAIL - [video/mp4 with and without codecs] + [video/mp4 (optional)] expected: FAIL - [video/ogg with and without codecs] + [video/ogg (optional)] expected: FAIL - [video/webm with and without codecs] + [video/webm (optional)] expected: FAIL |