aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/htmlmediaelement.rs17
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/media-elements/mime-types/canPlayType.html.ini86
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