diff options
-rw-r--r-- | components/script/dom/htmlscriptelement.rs | 29 | ||||
-rw-r--r-- | components/script/dom/htmlserializer.rs | 4 | ||||
-rw-r--r-- | components/script/script_task.rs | 41 | ||||
-rw-r--r-- | ports/cef/core.rs | 40 | ||||
-rw-r--r-- | tests/content/test_innerHTML.html | 4 | ||||
-rw-r--r-- | tests/wpt/metadata/html/semantics/embedded-content/the-img-element/update-the-source-set.html.ini | 146 |
6 files changed, 109 insertions, 155 deletions
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index 662e88f02e1..df1a2287462 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -40,8 +40,6 @@ use url::UrlParser; pub struct HTMLScriptElement { htmlelement: HTMLElement, - error_occurred: Cell<bool>, - /// https://html.spec.whatwg.org/multipage/scripting.html#already-started already_started: Cell<bool>, @@ -70,7 +68,6 @@ impl HTMLScriptElement { creator: ElementCreator) -> HTMLScriptElement { HTMLScriptElement { htmlelement: HTMLElement::new_inherited(HTMLElementTypeId::HTMLScriptElement, localName, prefix, document), - error_occurred: Cell::new(false), already_started: Cell::new(false), parser_inserted: Cell::new(creator == ElementCreator::ParserCreated), non_blocking: Cell::new(creator != ElementCreator::ParserCreated), @@ -257,18 +254,25 @@ impl<'a> HTMLScriptElementHelpers for JSRef<'a, HTMLScriptElement> { ScriptOrigin::Internal => { let chan = window.script_chan(); let handler = Trusted::new(window.get_cx(), self, chan.clone()); - chan.send(ScriptMsg::RunnableMsg(box handler)).unwrap(); + let dispatcher = Box::new(EventDispatcher { + element: handler, + is_error: false, + }); + chan.send(ScriptMsg::RunnableMsg(dispatcher)).unwrap(); } } } fn queue_error_event(self) { - self.error_occurred.set(true); let window = window_from_node(self).root(); let window = window.r(); let chan = window.script_chan(); let handler = Trusted::new(window.get_cx(), self, chan.clone()); - chan.send(ScriptMsg::RunnableMsg(box handler)).unwrap(); + let dispatcher = Box::new(EventDispatcher { + element: handler, + is_error: true, + }); + chan.send(ScriptMsg::RunnableMsg(dispatcher)).unwrap(); } fn dispatch_load_event(self) { @@ -404,10 +408,15 @@ impl<'a> HTMLScriptElementMethods for JSRef<'a, HTMLScriptElement> { } } -impl Runnable for Trusted<HTMLScriptElement> { - fn handler(self: Box<Trusted<HTMLScriptElement>>) { - let target = self.to_temporary().root(); - if target.r().error_occurred.get() { +struct EventDispatcher { + element: Trusted<HTMLScriptElement>, + is_error: bool, +} + +impl Runnable for EventDispatcher { + fn handler(self: Box<EventDispatcher>) { + let target = self.element.to_temporary().root(); + if self.is_error { target.r().dispatch_error_event(); } else { target.r().dispatch_load_event(); diff --git a/components/script/dom/htmlserializer.rs b/components/script/dom/htmlserializer.rs index 7d0cc77387c..9ad6cd77e3b 100644 --- a/components/script/dom/htmlserializer.rs +++ b/components/script/dom/htmlserializer.rs @@ -21,8 +21,8 @@ use std::borrow::ToOwned; pub fn serialize(iterator: &mut NodeIterator) -> String { let mut html = String::new(); let mut open_elements: Vec<String> = vec!(); - let depth = iterator.depth; - for node in iterator { + while let Some(node) = iterator.next() { + let depth = iterator.depth; while open_elements.len() > depth { html.push_str("</"); html.push_str(open_elements.pop().unwrap().as_slice()); diff --git a/components/script/script_task.rs b/components/script/script_task.rs index f29e5690cf5..16785a8abef 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -66,8 +66,7 @@ use util::task::spawn_named_with_send_on_failure; use util::task_state; use geom::point::Point2D; -use hyper::header::{Header, Headers, HeaderFormat}; -use hyper::header::parsing as header_parsing; +use hyper::header::{LastModified, Headers}; use js::jsapi::{JS_SetWrapObjectCallbacks, JS_SetGCZeal, JS_DEFAULT_ZEAL_FREQ, JS_GC}; use js::jsapi::{JSContext, JSRuntime, JSObject}; use js::jsapi::{JS_SetGCParameter, JSGC_MAX_BYTES}; @@ -80,14 +79,13 @@ use libc; use std::any::Any; use std::borrow::ToOwned; use std::cell::Cell; -use std::fmt::{self, Display}; use std::mem::replace; use std::num::ToPrimitive; use std::rc::Rc; use std::result::Result; use std::sync::mpsc::{channel, Sender, Receiver, Select}; use std::u32; -use time::{Tm, strptime}; +use time::Tm; thread_local!(pub static STACK_ROOTS: Cell<Option<RootCollectionPtr>> = Cell::new(None)); @@ -1278,41 +1276,6 @@ pub fn get_page(page: &Rc<Page>, pipeline_id: PipelineId) -> Rc<Page> { This is a bug.") } -//FIXME(seanmonstar): uplift to Hyper -#[derive(Clone)] -struct LastModified(pub Tm); - -impl Header for LastModified { - #[inline] - fn header_name() -> &'static str { - "Last-Modified" - } - - // Parses an RFC 2616 compliant date/time string, - fn parse_header(raw: &[Vec<u8>]) -> Option<LastModified> { - header_parsing::from_one_raw_str(raw).and_then(|s: String| { - let s = s.as_slice(); - strptime(s, "%a, %d %b %Y %T %Z").or_else(|_| { - strptime(s, "%A, %d-%b-%y %T %Z") - }).or_else(|_| { - strptime(s, "%c") - }).ok().map(|tm| LastModified(tm)) - }) - } -} - -impl HeaderFormat for LastModified { - // a localized date/time string in a format suitable - // for document.lastModified. - fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { - let LastModified(ref tm) = *self; - match tm.tm_utcoff { - 0 => <_ as Display>::fmt(&tm.rfc822(), f), - _ => <_ as Display>::fmt(&tm.to_utc().rfc822(), f) - } - } -} - fn dom_last_modified(tm: &Tm) -> String { format!("{}", tm.to_local().strftime("%m/%d/%Y %H:%M:%S").unwrap()) } diff --git a/ports/cef/core.rs b/ports/cef/core.rs index f330a82a4fa..111d2c72487 100644 --- a/ports/cef/core.rs +++ b/ports/cef/core.rs @@ -6,7 +6,6 @@ use command_line::command_line_init; use interfaces::cef_app_t; use types::{cef_main_args_t, cef_settings_t}; -use geom::size::TypedSize2D; use libc::{c_char, c_int, c_void}; use util::opts; use std::borrow::ToOwned; @@ -70,36 +69,15 @@ pub extern "C" fn cef_initialize(args: *const cef_main_args_t, } }; - let urls = vec![HOME_URL.to_owned()]; - opts::set_opts(opts::Opts { - urls: urls, - paint_threads: rendering_threads, - gpu_painting: false, - tile_size: 512, - device_pixels_per_px: None, - time_profiler_period: None, - memory_profiler_period: None, - enable_experimental: false, - nonincremental_layout: false, - layout_threads: rendering_threads, - output_file: None, - headless: false, - hard_fail: false, - bubble_inline_sizes_separately: false, - show_debug_borders: false, - show_debug_fragment_borders: false, - show_debug_parallel_paint: false, - show_debug_parallel_layout: false, - enable_text_antialiasing: true, - trace_layout: false, - devtools_port: None, - initial_window_size: TypedSize2D(800, 600), - profile_tasks: false, - user_agent: None, - dump_flow_tree: false, - validate_display_list_geometry: false, - resources_path: resources_path(), - }); + let mut temp_opts = opts::default_opts(); + temp_opts.urls = vec![HOME_URL.to_owned()]; + temp_opts.paint_threads = rendering_threads; + temp_opts.layout_threads = rendering_threads; + temp_opts.headless = false; + temp_opts.hard_fail = false; + temp_opts.enable_text_antialiasing = true; + temp_opts.resources_path = resources_path(); + opts::set_opts(temp_opts); return 1 } diff --git a/tests/content/test_innerHTML.html b/tests/content/test_innerHTML.html index 710dc256de4..b140cfbe894 100644 --- a/tests/content/test_innerHTML.html +++ b/tests/content/test_innerHTML.html @@ -4,7 +4,9 @@ <script> var a = document.createElement("div"); a.appendChild(document.createElement("pre")).appendChild(new Text("")); - is(a.innerHTML, "<pre></pre>"); + var b = document.createElement("div"); + b.appendChild(a); + is(b.innerHTML, "<div><pre></pre></div>"); </script> </head> </html> diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/update-the-source-set.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/update-the-source-set.html.ini index dc6f217a5af..4116da857ef 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/update-the-source-set.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/update-the-source-set.html.ini @@ -48,219 +48,221 @@ [<img srcset="data:,a" data-expect="data:,a">] expected: FAIL - [<picture></picture>foo<img src="data:,a" data-expect="data:,a">] + [<picture>foo<img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><!--foo--><img src="data:,a" data-expect="data:,a">] + [<picture><!--foo--><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><br><img src="data:,a" data-expect="data:,a">] + [<picture><br><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><p></p><img src="data:,a" data-expect="data:,a">] + [<picture><p></p><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><video></video><source srcset="data:,b"><img src="data:,a" data-expect="data:,a">] + [<picture><video><source srcset="data:,b"></video><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><span></span><source srcset="data:,b"><img src="data:,a" data-expect="data:,a">] + [<picture><span><source srcset="data:,b"></span><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><img src="data:,a"><img src="data:,b" data-expect="data:,b">] + [<picture><svg><source srcset="data:,b"></svg><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><img src="data:,a" data-expect="data:,a">foo] + [<picture><svg><source srcset="data:,b"><img src="data:,a" data-expect="data:,b"></svg></picture>] expected: FAIL - [<picture></picture><img src="data:,a" data-expect="data:,a"><br>] + [<picture><svg><font><source srcset="data:,b"></font></svg><font><img src="data:,a" data-expect="data:,a"></font></picture>] expected: FAIL - [<picture></picture><img src="data:,a" data-expect="data:,a"><!--foo-->] + [<picture><svg><!--<font face> tag breaks out of svg--><font face=""></font><source srcset="data:,b"></svg><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><img src="data:,a" data-expect="data:,a"><img src="data:,b">] + [<picture><img src="data:,a"><img src="data:,b" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><img data-expect=""><img src="data:,b">] + [<picture><source><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><img src="data:,a" data-expect="data:,a"><source srcset="data:,b">] + [<picture><source src="data:,b"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><img data-expect=""><source srcset="data:,b">] + [<picture><source srcset=""><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><svg></svg><source srcset="data:,b"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset=", ,"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><svg></svg><source srcset="data:,b"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b 1x 1x"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><svg></svg><!--<font face> tag breaks out of svg--><font face=""></font><source srcset="data:,b"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" media=""><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" media="all"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source src="data:,b"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" media="all and (min-width:0)"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset=""><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" media="all and !"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset=", ,"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" media="all and (!)"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b 1x 1x"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" media="not all"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" media=""><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" media="not all and (min-width:0)"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" media="all"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" media="not all and (max-width:0)"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" media="all and (min-width:0)"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" media="not all and !"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" media="all and !"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" media="not all and (!)"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" media="all and (!)"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" media="all, !"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" media="not all"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" media=","><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" media="not all and (min-width:0)"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" media=", all"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" media="not all and (max-width:0)"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type=""><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" media="not all and !"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type=" "><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" media="not all and (!)"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="image/gif"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" media="all, !"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type=" image/gif"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" media=","><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="image/gif "><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" media=", all"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="image/gif;"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type=""><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="image/gif;encodings"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type=" "><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="image/gif;encodings="><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/gif"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="image/gif;encodings=foobar"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type=" image/gif"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="image/png"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/gif "><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="image/jpeg"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/gif;"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="image/svg+xml"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/gif;encodings"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="image/x-icon"><img src="data:,a" data-expect="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/gif;encodings="><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="text/xml"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/gif;encodings=foobar"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="text/html"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/png"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="text/plain"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/jpeg"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="text/css"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/svg+xml"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="video/mp4"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/x-icon"><img src="data:,a" data-expect="data:,b">] + [<picture><source srcset="data:,b" type="video/ogg"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="text/xml"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="video/webm"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="text/html"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="unknown/unknown"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="text/plain"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="application/octet-stream"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="text/css"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="application/x-shockwave-flash"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="video/mp4"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="image\gif"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="video/ogg"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="gif"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="video/webm"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type=".gif"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="unknown/unknown"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="*"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="application/octet-stream"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="*/*"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="application/x-shockwave-flash"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="image/*"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image\\gif"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type=","><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="gif"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="image/gif, image/png"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type=".gif"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="image/gif image/png"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="*"><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b" type="image/foobarbaz"><img src="data:,a" data-expect="data:,a"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="*/*"><img src="data:,a" data-expect="data:,a">] + [<picture><img src="data:,a" data-expect="data:,a">foo</picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/*"><img src="data:,a" data-expect="data:,a">] + [<picture><img src="data:,a" data-expect="data:,a"><br></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type=","><img src="data:,a" data-expect="data:,a">] + [<picture><img src="data:,a" data-expect="data:,a"><!--foo--></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/gif, image/png"><img src="data:,a" data-expect="data:,a">] + [<picture><img src="data:,a" data-expect="data:,a"><img src="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/gif image/png"><img src="data:,a" data-expect="data:,a">] + [<picture><img data-expect=""><img src="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b" type="image/foobarbaz"><img src="data:,a" data-expect="data:,a">] + [<picture><img src="data:,a" data-expect="data:,a"><source srcset="data:,b"></picture>] expected: FAIL - [<picture></picture><span></span><source srcset="data:,b"><img data-expect="">] + [<picture><img data-expect=""><source srcset="data:,b"></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b"><span></span><img src="data:,a" data-expect="data:,a">] + [<picture><span><source srcset="data:,b"><img data-expect=""></span></picture>] expected: FAIL - [<picture></picture><source srcset="data:,b"><img data-expect="data:,b">] + [<picture><span><source srcset="data:,b"><img src="data:,a" data-expect="data:,a"></span></picture>] expected: FAIL - [<picture></picture><svg></svg><font></font><source srcset="data:,b"><font></font><img src="data:,a" data-expect="data:,a">] + [<picture><source srcset="data:,b"><span><img src="data:,a" data-expect="data:,a"></span></picture>] expected: FAIL + [<picture><source srcset="data:,b"><img data-expect="data:,b"></picture>] + expected: FAIL |