From 5eb691c4d2916c490c0e5ed6cad013d5f788e972 Mon Sep 17 00:00:00 2001 From: George Roman Date: Thu, 18 Apr 2019 17:22:57 +0300 Subject: [PATCH] Finish the implementation of the HTMLMediaElement canPlayType method --- components/script/dom/htmlmediaelement.rs | 21 ++------ .../mime-types/canPlayType.html.ini | 50 ++----------------- 2 files changed, 10 insertions(+), 61 deletions(-) diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index c6b9c8a7939b..85ccd80156db 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -62,7 +62,6 @@ use html5ever::{LocalName, Prefix}; use http::header::{self, HeaderMap, HeaderValue}; use ipc_channel::ipc; use ipc_channel::router::ROUTER; -use mime::{self, Mime}; use net_traits::image::base::Image; use net_traits::image_cache::ImageResponse; use net_traits::request::{CredentialsMode, Destination, Referrer, RequestBuilder}; @@ -72,7 +71,7 @@ use script_layout_interface::HTMLMediaData; use servo_config::pref; use servo_media::player::frame::{Frame, FrameRenderer}; use servo_media::player::{PlaybackState, Player, PlayerError, PlayerEvent, StreamType}; -use servo_media::ServoMedia; +use servo_media::{ServoMedia, SupportsMediaType}; use servo_url::ServoUrl; use std::cell::Cell; use std::collections::VecDeque; @@ -1661,20 +1660,10 @@ impl HTMLMediaElementMethods for HTMLMediaElement { // https://html.spec.whatwg.org/multipage/#dom-navigator-canplaytype fn CanPlayType(&self, type_: DOMString) -> CanPlayTypeResult { - match type_.parse::() { - // XXX GStreamer is currently not very reliable playing OGG and most of - // the media related WPTs uses OGG if we report that we are able to - // play this type. So we report that we are unable to play it to force - // the usage of other types. - // https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/520 - Ok(ref mime) - if (mime.type_() == mime::APPLICATION && mime.subtype() == mime::OCTET_STREAM) || - (mime.subtype() == mime::OGG) => - { - CanPlayTypeResult::_empty - }, - Err(_) => CanPlayTypeResult::_empty, - _ => CanPlayTypeResult::Maybe, + match ServoMedia::get().unwrap().can_play_type(&type_) { + SupportsMediaType::No => CanPlayTypeResult::_empty, + SupportsMediaType::Maybe => CanPlayTypeResult::Maybe, + SupportsMediaType::Probably => CanPlayTypeResult::Probably, } } 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 bc63975b5c0e..acc60d48f6a6 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 @@ -2,9 +2,6 @@ [video/mp4; codecs="mp4v.20.8" (optional)] expected: FAIL - [video/webm with bogus codec] - expected: FAIL - [video/3gpp; codecs="samr" (optional)] expected: FAIL @@ -14,16 +11,10 @@ [audio/webm (optional)] expected: FAIL - [audio/mp4; codecs="mp4a.40.2" (optional)] - expected: FAIL - - [audio/mp4 with bogus codec] + [audio/webm with and without codecs] expected: FAIL - [audio/webm; codecs="vorbis" (optional)] - expected: FAIL - - [video/webm; codecs="vp9" (optional)] + [audio/mp4; codecs="mp4a.40.2" (optional)] expected: FAIL [video/ogg; codecs="theora" (optional)] @@ -32,15 +23,6 @@ [video/mp4; codecs="avc1.64001E" (optional)] expected: FAIL - [video/ogg; codecs="opus" (optional)] - expected: FAIL - - [fictional formats and codecs not supported] - expected: FAIL - - [video/mp4 with bogus codec] - expected: FAIL - [video/mp4 (optional)] expected: FAIL @@ -50,10 +32,10 @@ [audio/ogg; codecs="opus" (optional)] expected: FAIL - [video/webm; codecs="vp8.0" (optional)] + [video/webm (optional)] expected: FAIL - [video/webm (optional)] + [video/webm with and without codecs] expected: FAIL [video/mp4; codecs="avc1.4D401E" (optional)] @@ -62,9 +44,6 @@ [audio/wav; codecs="1" (optional)] expected: FAIL - [video/3gpp with bogus codec] - expected: FAIL - [audio/wav (optional)] expected: FAIL @@ -80,9 +59,6 @@ [audio/mp4 (optional)] expected: FAIL - [video/webm; codecs="opus" (optional)] - expected: FAIL - [video/3gpp (optional)] expected: FAIL @@ -95,24 +71,8 @@ [audio/ogg; codecs="vorbis" (optional)] expected: FAIL - [audio/webm; codecs="opus" (optional)] - expected: FAIL - - [video/webm; codecs="vorbis" (optional)] - expected: FAIL - - [audio/wav with bogus codec] + [video/ogg; codecs="opus" (optional)] expected: FAIL [video/3gpp; codecs="mp4v.20.8" (optional)] expected: FAIL - - [video/webm; codecs="vp9.0" (optional)] - expected: FAIL - - [video/webm; codecs="vp8" (optional)] - expected: FAIL - - [audio/webm with bogus codec] - expected: FAIL -