mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01: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](https://github.com/rayguo17/servo/actions/runs/14347535616) 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));
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue