mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
dom: should change media element's currentSrc to children source element's src in resource selection algorithm. (#36408)
Set the `htmlmediaelement`'s `currenSrc` in
resource-selection-algorithm.
Change the `htmlsourceelement`'s src and srcset to USVString type.
According to
[Spec](https://html.spec.whatwg.org/multipage/media.html#concept-media-load-algorithm),
Step 9.3 for mode is children, should set the `currentSrc` to `src` of
children `htmlsourceelement`.
Also, In the `htmlsourceelement` [interface
definition](https://html.spec.whatwg.org/multipage/embedded-content.html#the-source-element),
the `src` and `srcset` attribute should be type `USVString`.
Testing: More WPT tests related to resource selection algorithm are
passing.
Fix: Some spec fix
[Try](1434753561
)
cc @xiaochengh
Signed-off-by: rayguo17 <rayguo17@gmail.com>
This commit is contained in:
parent
c8ecb57d97
commit
972ca77ce1
7 changed files with 22 additions and 45 deletions
|
@ -52,7 +52,6 @@ use crate::dom::bindings::codegen::Bindings::AttrBinding::AttrMethods;
|
|||
use crate::dom::bindings::codegen::Bindings::HTMLMediaElementBinding::{
|
||||
CanPlayTypeResult, HTMLMediaElementConstants, HTMLMediaElementMethods,
|
||||
};
|
||||
use crate::dom::bindings::codegen::Bindings::HTMLSourceElementBinding::HTMLSourceElementMethods;
|
||||
use crate::dom::bindings::codegen::Bindings::MediaErrorBinding::MediaErrorConstants::*;
|
||||
use crate::dom::bindings::codegen::Bindings::MediaErrorBinding::MediaErrorMethods;
|
||||
use crate::dom::bindings::codegen::Bindings::NavigatorBinding::Navigator_Binding::NavigatorMethods;
|
||||
|
@ -836,15 +835,20 @@ impl HTMLMediaElement {
|
|||
Mode::Children(source) => {
|
||||
// This is only a partial implementation
|
||||
// FIXME: https://github.com/servo/servo/issues/21481
|
||||
let src = source.Src();
|
||||
let src = source
|
||||
.upcast::<Element>()
|
||||
.get_attribute(&ns!(), &local_name!("src"));
|
||||
// Step 9.attr.2.
|
||||
if src.is_empty() {
|
||||
source
|
||||
.upcast::<EventTarget>()
|
||||
.fire_event(atom!("error"), can_gc);
|
||||
self.queue_dedicated_media_source_failure_steps();
|
||||
return;
|
||||
}
|
||||
let src: String = match src {
|
||||
Some(src) if !src.Value().is_empty() => src.Value().into(),
|
||||
_ => {
|
||||
source
|
||||
.upcast::<EventTarget>()
|
||||
.fire_event(atom!("error"), can_gc);
|
||||
self.queue_dedicated_media_source_failure_steps();
|
||||
return;
|
||||
},
|
||||
};
|
||||
// Step 9.attr.3.
|
||||
let url_record = match base_url.join(&src) {
|
||||
Ok(url) => url,
|
||||
|
@ -856,6 +860,8 @@ impl HTMLMediaElement {
|
|||
return;
|
||||
},
|
||||
};
|
||||
// Step 9.attr.7
|
||||
*self.current_src.borrow_mut() = url_record.as_str().into();
|
||||
// Step 9.attr.8.
|
||||
self.resource_fetch_algorithm(Resource::Url(url_record));
|
||||
},
|
||||
|
|
|
@ -11,7 +11,7 @@ use crate::dom::bindings::codegen::Bindings::HTMLSourceElementBinding::HTMLSourc
|
|||
use crate::dom::bindings::codegen::Bindings::NodeBinding::Node_Binding::NodeMethods;
|
||||
use crate::dom::bindings::inheritance::Castable;
|
||||
use crate::dom::bindings::root::{Dom, DomRoot, Root};
|
||||
use crate::dom::bindings::str::DOMString;
|
||||
use crate::dom::bindings::str::{DOMString, USVString};
|
||||
use crate::dom::document::Document;
|
||||
use crate::dom::element::AttributeMutation;
|
||||
use crate::dom::htmlelement::HTMLElement;
|
||||
|
@ -119,10 +119,10 @@ impl VirtualMethods for HTMLSourceElement {
|
|||
|
||||
impl HTMLSourceElementMethods<crate::DomTypeHolder> for HTMLSourceElement {
|
||||
// https://html.spec.whatwg.org/multipage/#dom-source-src
|
||||
make_getter!(Src, "src");
|
||||
make_url_getter!(Src, "src");
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-source-src
|
||||
make_setter!(SetSrc, "src");
|
||||
make_url_setter!(SetSrc, "src");
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-source-type
|
||||
make_getter!(Type, "type");
|
||||
|
@ -131,10 +131,10 @@ impl HTMLSourceElementMethods<crate::DomTypeHolder> for HTMLSourceElement {
|
|||
make_setter!(SetType, "type");
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-source-srcset
|
||||
make_getter!(Srcset, "srcset");
|
||||
make_url_getter!(Srcset, "srcset");
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-source-srcset
|
||||
make_setter!(SetSrcset, "srcset");
|
||||
make_url_setter!(SetSrcset, "srcset");
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-source-sizes
|
||||
make_getter!(Sizes, "sizes");
|
||||
|
|
|
@ -8,11 +8,11 @@ interface HTMLSourceElement : HTMLElement {
|
|||
[HTMLConstructor] constructor();
|
||||
|
||||
[CEReactions]
|
||||
attribute DOMString src;
|
||||
attribute USVString src;
|
||||
[CEReactions]
|
||||
attribute DOMString type;
|
||||
[CEReactions]
|
||||
attribute DOMString srcset;
|
||||
attribute USVString srcset;
|
||||
[CEReactions]
|
||||
attribute DOMString sizes;
|
||||
[CEReactions]
|
||||
|
|
|
@ -8,8 +8,5 @@
|
|||
[The 'src' attribute of the 'embed' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'src' attribute of the 'source' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'data' attribute of the 'object' element]
|
||||
expected: FAIL
|
||||
|
|
|
@ -8,8 +8,5 @@
|
|||
[The 'src' attribute of the 'embed' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'src' attribute of the 'source' element]
|
||||
expected: FAIL
|
||||
|
||||
[The 'data' attribute of the 'object' element]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[resource-selection-candidate-insert-before.html]
|
||||
[inserting another source before the candidate]
|
||||
expected: FAIL
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
[currentSrc.html]
|
||||
[audio.currentSrc after adding source element with src attribute " "]
|
||||
expected: FAIL
|
||||
|
||||
[video.currentSrc after adding source element with src attribute "."]
|
||||
expected: FAIL
|
||||
|
||||
[video.currentSrc after adding source element with src attribute "data:,"]
|
||||
expected: FAIL
|
||||
|
||||
[audio.currentSrc after adding source element with src attribute "."]
|
||||
expected: FAIL
|
||||
|
||||
[audio.currentSrc after adding source element with src attribute "data:,"]
|
||||
expected: FAIL
|
||||
|
||||
[video.currentSrc after adding source element with src attribute " "]
|
||||
expected: FAIL
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue