diff --git a/components/layout/construct.rs b/components/layout/construct.rs index bbfe17d22b7..afdf903c500 100644 --- a/components/layout/construct.rs +++ b/components/layout/construct.rs @@ -351,11 +351,13 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> } Some(LayoutNodeType::Element(LayoutElementType::HTMLImageElement)) => { let image_info = box ImageFragmentInfo::new(node.image_url(), + node, &self.layout_context); SpecificFragmentInfo::Image(image_info) } Some(LayoutNodeType::Element(LayoutElementType::HTMLObjectElement)) => { let image_info = box ImageFragmentInfo::new(node.object_data(), + node, &self.layout_context); SpecificFragmentInfo::Image(image_info) } @@ -1219,6 +1221,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode> let marker_fragments = match node.style(self.style_context()).get_list().list_style_image { Either::First(ref url_value) => { let image_info = box ImageFragmentInfo::new(url_value.url().map(|u| u.clone()), + node, &self.layout_context); vec![Fragment::new(node, SpecificFragmentInfo::Image(image_info), self.layout_context)] } diff --git a/components/layout/context.rs b/components/layout/context.rs index e67e7da6fb1..1dff9f6ea5e 100644 --- a/components/layout/context.rs +++ b/components/layout/context.rs @@ -5,22 +5,22 @@ //! Data needed by the layout thread. use fnv::FnvHasher; -use gfx::display_list::WebRenderImageInfo; +use gfx::display_list::{WebRenderImageInfo, OpaqueNode}; use gfx::font_cache_thread::FontCacheThread; use gfx::font_context::FontContext; use heapsize::HeapSizeOf; -use ipc_channel::ipc; -use net_traits::image::base::Image; -use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheThread, ImageResponse, ImageState}; +use net_traits::image_cache_thread::{ImageCacheThread, ImageState, CanRequestImages}; use net_traits::image_cache_thread::{ImageOrMetadataAvailable, UsePlaceholder}; +use opaque_node::OpaqueNodeMethods; use parking_lot::RwLock; -use servo_config::opts; +use script_layout_interface::{PendingImage, PendingImageState}; use servo_url::ServoUrl; use std::borrow::{Borrow, BorrowMut}; use std::cell::{RefCell, RefMut}; use std::collections::HashMap; use std::hash::BuildHasherDefault; use std::sync::{Arc, Mutex}; +use std::thread; use style::context::{SharedStyleContext, ThreadLocalStyleContext}; use style::dom::TElement; @@ -82,9 +82,6 @@ pub struct LayoutContext { /// The shared image cache thread. pub image_cache_thread: Mutex, - /// A channel for the image cache to send responses to. - pub image_cache_sender: Mutex, - /// Interface to the font cache thread. pub font_cache_thread: Mutex, @@ -92,6 +89,20 @@ pub struct LayoutContext { pub webrender_image_cache: Arc>>>, + + /// A list of in-progress image loads to be shared with the script thread. + /// A None value means that this layout was not initiated by the script thread. + pub pending_images: Option>> +} + +impl Drop for LayoutContext { + fn drop(&mut self) { + if !thread::panicking() { + if let Some(ref pending_images) = self.pending_images { + assert!(pending_images.lock().unwrap().is_empty()); + } + } + } } impl LayoutContext { @@ -100,71 +111,60 @@ impl LayoutContext { &self.style_context } - fn get_or_request_image_synchronously(&self, url: ServoUrl, use_placeholder: UsePlaceholder) - -> Option> { - debug_assert!(opts::get().output_file.is_some() || opts::get().exit_after_load); + pub fn get_or_request_image_or_meta(&self, + node: OpaqueNode, + url: ServoUrl, + use_placeholder: UsePlaceholder) + -> Option { + //XXXjdm For cases where we do not request an image, we still need to + // ensure the node gets another script-initiated reflow or it + // won't be requested at all. + let can_request = if self.pending_images.is_some() { + CanRequestImages::Yes + } else { + CanRequestImages::No + }; - // See if the image is already available - let result = self.image_cache_thread.lock().unwrap() - .find_image(url.clone(), use_placeholder); - - match result { - Ok(image) => return Some(image), - Err(ImageState::LoadError) => { - // Image failed to load, so just return nothing - return None - } - Err(_) => {} - } - - // If we are emitting an output file, then we need to block on - // image load or we risk emitting an output file missing the image. - let (sync_tx, sync_rx) = ipc::channel().unwrap(); - self.image_cache_thread.lock().unwrap().request_image(url, ImageCacheChan(sync_tx), None); - loop { - match sync_rx.recv() { - Err(_) => return None, - Ok(response) => { - match response.image_response { - ImageResponse::Loaded(image) | ImageResponse::PlaceholderLoaded(image) => { - return Some(image) - } - ImageResponse::None | ImageResponse::MetadataLoaded(_) => {} - } - } - } - } - } - - pub fn get_or_request_image_or_meta(&self, url: ServoUrl, use_placeholder: UsePlaceholder) - -> Option { - // If we are emitting an output file, load the image synchronously. - if opts::get().output_file.is_some() || opts::get().exit_after_load { - return self.get_or_request_image_synchronously(url, use_placeholder) - .map(|img| ImageOrMetadataAvailable::ImageAvailable(img)); - } // See if the image is already available let result = self.image_cache_thread.lock().unwrap() .find_image_or_metadata(url.clone(), - use_placeholder); + use_placeholder, + can_request); match result { Ok(image_or_metadata) => Some(image_or_metadata), // Image failed to load, so just return nothing Err(ImageState::LoadError) => None, - // Not yet requested, async mode - request image or metadata from the cache - Err(ImageState::NotRequested) => { - let sender = self.image_cache_sender.lock().unwrap().clone(); - self.image_cache_thread.lock().unwrap() - .request_image_and_metadata(url, sender, None); + // Not yet requested - request image or metadata from the cache + Err(ImageState::NotRequested(id)) => { + let image = PendingImage { + state: PendingImageState::Unrequested(url), + node: node.to_untrusted_node_address(), + id: id, + }; + self.pending_images.as_ref().unwrap().lock().unwrap().push(image); None } // Image has been requested, is still pending. Return no image for this paint loop. // When the image loads it will trigger a reflow and/or repaint. - Err(ImageState::Pending) => None, + Err(ImageState::Pending(id)) => { + //XXXjdm if self.pending_images is not available, we should make sure that + // this node gets marked dirty again so it gets a script-initiated + // reflow that deals with this properly. + if let Some(ref pending_images) = self.pending_images { + let image = PendingImage { + state: PendingImageState::PendingResponse, + node: node.to_untrusted_node_address(), + id: id, + }; + pending_images.lock().unwrap().push(image); + } + None + } } } pub fn get_webrender_image_for_url(&self, + node: OpaqueNode, url: ServoUrl, use_placeholder: UsePlaceholder) -> Option { @@ -174,7 +174,7 @@ impl LayoutContext { return Some((*existing_webrender_image).clone()) } - match self.get_or_request_image_or_meta(url.clone(), use_placeholder) { + match self.get_or_request_image_or_meta(node, url.clone(), use_placeholder) { Some(ImageOrMetadataAvailable::ImageAvailable(image)) => { let image_info = WebRenderImageInfo::from_image(&*image); if image_info.key.is_none() { diff --git a/components/layout/display_list_builder.rs b/components/layout/display_list_builder.rs index 848188d14a0..5eb4534a0c5 100644 --- a/components/layout/display_list_builder.rs +++ b/components/layout/display_list_builder.rs @@ -683,7 +683,8 @@ impl FragmentDisplayListBuilding for Fragment { index: usize) { let background = style.get_background(); let webrender_image = state.layout_context - .get_webrender_image_for_url(image_url.clone(), + .get_webrender_image_for_url(self.node, + image_url.clone(), UsePlaceholder::No); if let Some(webrender_image) = webrender_image { diff --git a/components/layout/fragment.rs b/components/layout/fragment.rs index ec1e87e6dd2..9cc0efbce6e 100644 --- a/components/layout/fragment.rs +++ b/components/layout/fragment.rs @@ -367,11 +367,14 @@ impl ImageFragmentInfo { /// /// FIXME(pcwalton): The fact that image fragments store the cache in the fragment makes little /// sense to me. - pub fn new(url: Option, - layout_context: &LayoutContext) + pub fn new(url: Option, + node: &N, + layout_context: &LayoutContext) -> ImageFragmentInfo { let image_or_metadata = url.and_then(|url| { - layout_context.get_or_request_image_or_meta(url, UsePlaceholder::Yes) + layout_context.get_or_request_image_or_meta(node.opaque(), + url, + UsePlaceholder::Yes) }); let (image, metadata) = match image_or_metadata { diff --git a/components/layout/query.rs b/components/layout/query.rs index 5c78a1bc75d..2f26fede59f 100644 --- a/components/layout/query.rs +++ b/components/layout/query.rs @@ -17,6 +17,7 @@ use gfx_traits::ScrollRootId; use inline::LAST_FRAGMENT_OF_ELEMENT; use ipc_channel::ipc::IpcSender; use opaque_node::OpaqueNodeMethods; +use script_layout_interface::PendingImage; use script_layout_interface::rpc::{ContentBoxResponse, ContentBoxesResponse}; use script_layout_interface::rpc::{HitTestResponse, LayoutRPC}; use script_layout_interface::rpc::{MarginStyleResponse, NodeGeometryResponse}; @@ -27,6 +28,7 @@ use script_traits::LayoutMsg as ConstellationMsg; use script_traits::UntrustedNodeAddress; use sequential; use std::cmp::{min, max}; +use std::mem; use std::ops::Deref; use std::sync::{Arc, Mutex}; use style::computed_values; @@ -89,6 +91,9 @@ pub struct LayoutThreadData { /// Index in a text fragment. We need this do determine the insertion point. pub text_index_response: TextIndexResponse, + + /// A list of images requests that need to be initiated. + pub pending_images: Vec, } pub struct LayoutRPCImpl(pub Arc>); @@ -216,6 +221,12 @@ impl LayoutRPC for LayoutRPCImpl { let rw_data = rw_data.lock().unwrap(); rw_data.text_index_response.clone() } + + fn pending_images(&self) -> Vec { + let &LayoutRPCImpl(ref rw_data) = self; + let mut rw_data = rw_data.lock().unwrap(); + mem::replace(&mut rw_data.pending_images, vec![]) + } } struct UnioningFragmentBorderBoxIterator { diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs index 8626385a026..8d6f2377130 100644 --- a/components/layout_thread/lib.rs +++ b/components/layout_thread/lib.rs @@ -75,7 +75,7 @@ use layout::wrapper::LayoutNodeLayoutData; use layout::wrapper::drop_style_and_layout_data; use layout_traits::LayoutThreadFactory; use msg::constellation_msg::{FrameId, PipelineId}; -use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheResult, ImageCacheThread}; +use net_traits::image_cache_thread::ImageCacheThread; use net_traits::image_cache_thread::UsePlaceholder; use parking_lot::RwLock; use profile_traits::mem::{self, Report, ReportKind, ReportsChan}; @@ -98,6 +98,7 @@ use servo_url::ServoUrl; use std::borrow::ToOwned; use std::collections::HashMap; use std::hash::BuildHasherDefault; +use std::mem as std_mem; use std::ops::{Deref, DerefMut}; use std::process; use std::sync::{Arc, Mutex, MutexGuard}; @@ -137,12 +138,6 @@ pub struct LayoutThread { /// The port on which we receive messages from the constellation. pipeline_port: Receiver, - /// The port on which we receive messages from the image cache - image_cache_receiver: Receiver, - - /// The channel on which the image cache can send messages to ourself. - image_cache_sender: ImageCacheChan, - /// The port on which we receive messages from the font cache thread. font_cache_receiver: Receiver<()>, @@ -404,11 +399,6 @@ impl LayoutThread { // Proxy IPC messages from the pipeline to the layout thread. let pipeline_receiver = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(pipeline_port); - // Ask the router to proxy IPC messages from the image cache thread to the layout thread. - let (ipc_image_cache_sender, ipc_image_cache_receiver) = ipc::channel().unwrap(); - let image_cache_receiver = - ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_image_cache_receiver); - // Ask the router to proxy IPC messages from the font cache thread to the layout thread. let (ipc_font_cache_sender, ipc_font_cache_receiver) = ipc::channel().unwrap(); let font_cache_receiver = @@ -437,8 +427,6 @@ impl LayoutThread { image_cache_thread: image_cache_thread, font_cache_thread: font_cache_thread, first_reflow: true, - image_cache_receiver: image_cache_receiver, - image_cache_sender: ImageCacheChan(ipc_image_cache_sender), font_cache_receiver: font_cache_receiver, font_cache_sender: ipc_font_cache_sender, parallel_traversal: parallel_traversal, @@ -470,6 +458,7 @@ impl LayoutThread { margin_style_response: MarginStyleResponse::empty(), stacking_context_scroll_offsets: HashMap::new(), text_index_response: TextIndexResponse(None), + pending_images: vec![], })), error_reporter: CSSErrorReporter { pipelineid: id, @@ -506,7 +495,8 @@ impl LayoutThread { fn build_layout_context(&self, rw_data: &LayoutThreadData, screen_size_changed: bool, - goal: ReflowGoal) + goal: ReflowGoal, + request_images: bool) -> LayoutContext { let thread_local_style_context_creation_data = ThreadLocalStyleContextCreationInfo::new(self.new_animations_sender.clone()); @@ -530,9 +520,9 @@ impl LayoutThread { default_computed_values: Arc::new(ComputedValues::initial_values().clone()), }, image_cache_thread: Mutex::new(self.image_cache_thread.clone()), - image_cache_sender: Mutex::new(self.image_cache_sender.clone()), font_cache_thread: Mutex::new(self.font_cache_thread.clone()), webrender_image_cache: self.webrender_image_cache.clone(), + pending_images: if request_images { Some(Mutex::new(vec![])) } else { None }, } } @@ -541,14 +531,12 @@ impl LayoutThread { enum Request { FromPipeline(LayoutControlMsg), FromScript(Msg), - FromImageCache, FromFontCache, } let request = { let port_from_script = &self.port; let port_from_pipeline = &self.pipeline_port; - let port_from_image_cache = &self.image_cache_receiver; let port_from_font_cache = &self.font_cache_receiver; select! { msg = port_from_pipeline.recv() => { @@ -557,10 +545,6 @@ impl LayoutThread { msg = port_from_script.recv() => { Request::FromScript(msg.unwrap()) }, - msg = port_from_image_cache.recv() => { - msg.unwrap(); - Request::FromImageCache - }, msg = port_from_font_cache.recv() => { msg.unwrap(); Request::FromFontCache @@ -590,9 +574,6 @@ impl LayoutThread { Request::FromScript(msg) => { self.handle_request_helper(msg, possibly_locked_rw_data) }, - Request::FromImageCache => { - self.repaint(possibly_locked_rw_data) - }, Request::FromFontCache => { let _rw_data = possibly_locked_rw_data.lock(); self.outstanding_web_fonts.fetch_sub(1, Ordering::SeqCst); @@ -603,37 +584,6 @@ impl LayoutThread { } } - /// Repaint the scene, without performing style matching. This is typically - /// used when an image arrives asynchronously and triggers a relayout and - /// repaint. - /// TODO: In the future we could detect if the image size hasn't changed - /// since last time and avoid performing a complete layout pass. - fn repaint<'a, 'b>(&mut self, possibly_locked_rw_data: &mut RwData<'a, 'b>) -> bool { - let mut rw_data = possibly_locked_rw_data.lock(); - - if let Some(mut root_flow) = self.root_flow.clone() { - let flow = flow::mut_base(FlowRef::deref_mut(&mut root_flow)); - flow.restyle_damage.insert(REPAINT); - } - - let reflow_info = Reflow { - goal: ReflowGoal::ForDisplay, - page_clip_rect: max_rect(), - }; - let mut layout_context = self.build_layout_context(&*rw_data, - false, - reflow_info.goal); - - self.perform_post_style_recalc_layout_passes(&reflow_info, - None, - None, - &mut *rw_data, - &mut layout_context); - - - true - } - /// Receives and dispatches messages from other threads. fn handle_request_helper<'a, 'b>(&mut self, request: Msg, @@ -1166,7 +1116,8 @@ impl LayoutThread { // Create a layout context for use throughout the following passes. let mut layout_context = self.build_layout_context(&*rw_data, viewport_size_changed, - data.reflow_info.goal); + data.reflow_info.goal, + true); // NB: Type inference falls apart here for some reason, so we need to be very verbose. :-( let traversal_driver = if self.parallel_flag && self.parallel_traversal.is_some() { @@ -1247,6 +1198,12 @@ impl LayoutThread { query_type: &ReflowQueryType, rw_data: &mut LayoutThreadData, context: &mut LayoutContext) { + let pending_images = match context.pending_images { + Some(ref pending) => std_mem::replace(&mut *pending.lock().unwrap(), vec![]), + None => vec![], + }; + rw_data.pending_images = pending_images; + let mut root_flow = match self.root_flow.clone() { Some(root_flow) => root_flow, None => return, @@ -1367,7 +1324,8 @@ impl LayoutThread { let mut layout_context = self.build_layout_context(&*rw_data, false, - reflow_info.goal); + reflow_info.goal, + false); if let Some(mut root_flow) = self.root_flow.clone() { // Perform an abbreviated style recalc that operates without access to the DOM. @@ -1387,6 +1345,8 @@ impl LayoutThread { None, &mut *rw_data, &mut layout_context); + + assert!(layout_context.pending_images.is_none()); } fn reflow_with_newly_loaded_web_font<'a, 'b>(&mut self, possibly_locked_rw_data: &mut RwData<'a, 'b>) { @@ -1400,7 +1360,8 @@ impl LayoutThread { let mut layout_context = self.build_layout_context(&*rw_data, false, - reflow_info.goal); + reflow_info.goal, + false); // No need to do a style recalc here. if self.root_flow.is_none() { diff --git a/components/net/image_cache_thread.rs b/components/net/image_cache_thread.rs index 51d8324bd48..5beacb8a1a4 100644 --- a/components/net/image_cache_thread.rs +++ b/components/net/image_cache_thread.rs @@ -5,12 +5,11 @@ use immeta::load_from_buf; use ipc_channel::ipc::{self, IpcReceiver, IpcSender}; use ipc_channel::router::ROUTER; -use net_traits::{CoreResourceThread, NetworkError, fetch_async, FetchResponseMsg}; +use net_traits::{NetworkError, FetchResponseMsg}; use net_traits::image::base::{Image, ImageMetadata, PixelFormat, load_from_memory}; -use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheCommand, ImageCacheThread, ImageState}; -use net_traits::image_cache_thread::{ImageCacheResult, ImageOrMetadataAvailable, ImageResponse, UsePlaceholder}; -use net_traits::image_cache_thread::ImageResponder; -use net_traits::request::{Destination, RequestInit, Type as RequestType}; +use net_traits::image_cache_thread::{ImageCacheCommand, ImageCacheThread, ImageState}; +use net_traits::image_cache_thread::{ImageOrMetadataAvailable, ImageResponse, UsePlaceholder}; +use net_traits::image_cache_thread::{ImageResponder, PendingImageId, CanRequestImages}; use servo_config::resource_files::resources_dir_path; use servo_url::ServoUrl; use std::borrow::ToOwned; @@ -58,20 +57,54 @@ fn is_image_opaque(format: webrender_traits::ImageFormat, bytes: &[u8]) -> bool struct PendingLoad { // The bytes loaded so far. Reset to an empty vector once loading // is complete and the buffer has been transmitted to the decoder. - bytes: Vec, + bytes: ImageBytes, // Image metadata, if available. metadata: Option, // Once loading is complete, the result of the operation. result: Option>, - listeners: Vec, + listeners: Vec, // The url being loaded. Do not forget that this may be several Mb // if we are loading a data: url. url: ServoUrl, } +enum ImageBytes { + InProgress(Vec), + Complete(Arc>), +} + +impl ImageBytes { + fn extend_from_slice(&mut self, data: &[u8]) { + match *self { + ImageBytes::InProgress(ref mut bytes) => bytes.extend_from_slice(data), + ImageBytes::Complete(_) => panic!("attempted modification of complete image bytes"), + } + } + + fn mark_complete(&mut self) -> Arc> { + let bytes = { + let own_bytes = match *self { + ImageBytes::InProgress(ref mut bytes) => bytes, + ImageBytes::Complete(_) => panic!("attempted modification of complete image bytes"), + }; + mem::replace(own_bytes, vec![]) + }; + let bytes = Arc::new(bytes); + *self = ImageBytes::Complete(bytes.clone()); + bytes + } + + fn as_slice(&self) -> &[u8] { + match *self { + ImageBytes::InProgress(ref bytes) => &bytes, + ImageBytes::Complete(ref bytes) => &*bytes, + } + } +} + enum LoadResult { Loaded(Image), PlaceholderLoaded(Arc), @@ -81,7 +114,7 @@ enum LoadResult { impl PendingLoad { fn new(url: ServoUrl) -> PendingLoad { PendingLoad { - bytes: vec!(), + bytes: ImageBytes::InProgress(vec!()), metadata: None, result: None, listeners: vec!(), @@ -89,7 +122,7 @@ impl PendingLoad { } } - fn add_listener(&mut self, listener: ImageListener) { + fn add_listener(&mut self, listener: ImageResponder) { self.listeners.push(listener); } } @@ -109,11 +142,12 @@ struct AllPendingLoads { keygen: LoadKeyGenerator, } -// Result of accessing a cache. -#[derive(Eq, PartialEq)] -enum CacheResult { - Hit, // The value was in the cache. - Miss, // The value was not in the cache and needed to be regenerated. +/// Result of accessing a cache. +enum CacheResult<'a> { + /// The value was in the cache. + Hit(LoadKey, &'a mut PendingLoad), + /// The value was not in the cache and needed to be regenerated. + Miss(Option<(LoadKey, &'a mut PendingLoad)>), } impl AllPendingLoads { @@ -131,20 +165,11 @@ impl AllPendingLoads { self.loads.is_empty() } - // get a PendingLoad from its LoadKey. Prefer this to `get_by_url`, - // for performance reasons. + // get a PendingLoad from its LoadKey. fn get_by_key_mut(&mut self, key: &LoadKey) -> Option<&mut PendingLoad> { self.loads.get_mut(key) } - // get a PendingLoad from its url. When possible, prefer `get_by_key_mut`. - fn get_by_url(&self, url: &ServoUrl) -> Option<&PendingLoad> { - self.url_to_load_key.get(url). - and_then(|load_key| - self.loads.get(load_key) - ) - } - fn remove(&mut self, key: &LoadKey) -> Option { self.loads.remove(key). and_then(|pending_load| { @@ -153,13 +178,18 @@ impl AllPendingLoads { }) } - fn get_cached(&mut self, url: ServoUrl) -> (CacheResult, LoadKey, &mut PendingLoad) { + fn get_cached<'a>(&'a mut self, url: ServoUrl, can_request: CanRequestImages) + -> CacheResult<'a> { match self.url_to_load_key.entry(url.clone()) { Occupied(url_entry) => { let load_key = url_entry.get(); - (CacheResult::Hit, *load_key, self.loads.get_mut(load_key).unwrap()) + CacheResult::Hit(*load_key, self.loads.get_mut(load_key).unwrap()) } Vacant(url_entry) => { + if can_request == CanRequestImages::No { + return CacheResult::Miss(None); + } + let load_key = self.keygen.next(); url_entry.insert(load_key); @@ -168,7 +198,7 @@ impl AllPendingLoads { Occupied(_) => unreachable!(), Vacant(load_entry) => { let mut_load = load_entry.insert(pending_load); - (CacheResult::Miss, load_key, mut_load) + CacheResult::Miss(Some((load_key, mut_load))) } } } @@ -182,27 +212,20 @@ impl AllPendingLoads { /// fetched again. struct CompletedLoad { image_response: ImageResponse, + id: PendingImageId, } impl CompletedLoad { - fn new(image_response: ImageResponse) -> CompletedLoad { + fn new(image_response: ImageResponse, id: PendingImageId) -> CompletedLoad { CompletedLoad { image_response: image_response, + id: id, } } } -/// Stores information to notify a client when the state -/// of an image changes. -struct ImageListener { - sender: ImageCacheChan, - responder: Option, - send_metadata_msg: bool, -} - // A key used to communicate during loading. -#[derive(Eq, Hash, PartialEq, Clone, Copy)] -struct LoadKey(u64); +type LoadKey = PendingImageId; struct LoadKeyGenerator { counter: u64 @@ -214,34 +237,9 @@ impl LoadKeyGenerator { counter: 0 } } - fn next(&mut self) -> LoadKey { + fn next(&mut self) -> PendingImageId { self.counter += 1; - LoadKey(self.counter) - } -} - -impl ImageListener { - fn new(sender: ImageCacheChan, responder: Option, send_metadata_msg: bool) -> ImageListener { - ImageListener { - sender: sender, - responder: responder, - send_metadata_msg: send_metadata_msg, - } - } - - fn notify(&self, image_response: ImageResponse) { - if !self.send_metadata_msg { - if let ImageResponse::MetadataLoaded(_) = image_response { - return; - } - } - - let ImageCacheChan(ref sender) = self.sender; - let msg = ImageCacheResult { - responder: self.responder.clone(), - image_response: image_response, - }; - sender.send(msg).ok(); + PendingImageId(self.counter) } } @@ -252,16 +250,11 @@ struct ResourceLoadInfo { /// Implementation of the image cache struct ImageCache { - progress_sender: Sender, - decoder_sender: Sender, // Worker threads for decoding images. thread_pool: ThreadPool, - // Resource thread handle - core_resource_thread: CoreResourceThread, - // Images that are loading over network, or decoding. pending_loads: AllPendingLoads, @@ -284,7 +277,6 @@ struct DecoderMsg { struct Receivers { cmd_receiver: Receiver, decoder_receiver: Receiver, - progress_receiver: Receiver, } impl Receivers { @@ -292,16 +284,12 @@ impl Receivers { fn recv(&self) -> SelectResult { let cmd_receiver = &self.cmd_receiver; let decoder_receiver = &self.decoder_receiver; - let progress_receiver = &self.progress_receiver; select! { msg = cmd_receiver.recv() => { SelectResult::Command(msg.unwrap()) }, msg = decoder_receiver.recv() => { SelectResult::Decoder(msg.unwrap()) - }, - msg = progress_receiver.recv() => { - SelectResult::Progress(msg.unwrap()) } } } @@ -310,7 +298,6 @@ impl Receivers { /// The types of messages that the main image cache thread receives. enum SelectResult { Command(ImageCacheCommand), - Progress(ResourceLoadInfo), Decoder(DecoderMsg), } @@ -347,8 +334,7 @@ fn get_placeholder_image(webrender_api: &webrender_traits::RenderApi) -> io::Res } impl ImageCache { - fn run(core_resource_thread: CoreResourceThread, - webrender_api: webrender_traits::RenderApi, + fn run(webrender_api: webrender_traits::RenderApi, ipc_command_receiver: IpcReceiver) { // Preload the placeholder image, used when images fail to load. let placeholder_image = get_placeholder_image(&webrender_api).ok(); @@ -356,15 +342,12 @@ impl ImageCache { // Ask the router to proxy messages received over IPC to us. let cmd_receiver = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_command_receiver); - let (progress_sender, progress_receiver) = channel(); let (decoder_sender, decoder_receiver) = channel(); let mut cache = ImageCache { - progress_sender: progress_sender, decoder_sender: decoder_sender, thread_pool: ThreadPool::new(4), pending_loads: AllPendingLoads::new(), completed_loads: HashMap::new(), - core_resource_thread: core_resource_thread, placeholder_image: placeholder_image, webrender_api: webrender_api, }; @@ -372,7 +355,6 @@ impl ImageCache { let receivers = Receivers { cmd_receiver: cmd_receiver, decoder_receiver: decoder_receiver, - progress_receiver: progress_receiver, }; let mut exit_sender: Option> = None; @@ -382,9 +364,6 @@ impl ImageCache { SelectResult::Command(cmd) => { exit_sender = cache.handle_cmd(cmd); } - SelectResult::Progress(msg) => { - cache.handle_progress(msg); - } SelectResult::Decoder(msg) => { cache.handle_decoder(msg); } @@ -406,22 +385,22 @@ impl ImageCache { ImageCacheCommand::Exit(sender) => { return Some(sender); } - ImageCacheCommand::RequestImage(url, result_chan, responder) => { - self.request_image(url, result_chan, responder, false); + ImageCacheCommand::AddListener(id, responder) => { + self.add_listener(id, responder); } - ImageCacheCommand::RequestImageAndMetadata(url, result_chan, responder) => { - self.request_image(url, result_chan, responder, true); - } - ImageCacheCommand::GetImageIfAvailable(url, use_placeholder, consumer) => { - let result = self.get_image_if_available(url, use_placeholder); + ImageCacheCommand::GetImageOrMetadataIfAvailable(url, + use_placeholder, + can_request, + consumer) => { + let result = self.get_image_or_meta_if_available(url, use_placeholder, can_request); + // TODO(#15501): look for opportunities to clean up cache if this send fails. let _ = consumer.send(result); } - ImageCacheCommand::GetImageOrMetadataIfAvailable(url, use_placeholder, consumer) => { - let result = self.get_image_or_meta_if_available(url, use_placeholder); - let _ = consumer.send(result); - } - ImageCacheCommand::StoreDecodeImage(url, image_vector) => { - self.store_decode_image(url, image_vector); + ImageCacheCommand::StoreDecodeImage(id, data) => { + self.handle_progress(ResourceLoadInfo { + action: data, + key: id + }); } }; @@ -433,41 +412,41 @@ impl ImageCache { match (msg.action, msg.key) { (FetchResponseMsg::ProcessRequestBody, _) | (FetchResponseMsg::ProcessRequestEOF, _) => return, - (FetchResponseMsg::ProcessResponse(_), _) => {} + (FetchResponseMsg::ProcessResponse(_response), _) => {} (FetchResponseMsg::ProcessResponseChunk(data), _) => { + debug!("got some data for {:?}", msg.key); let pending_load = self.pending_loads.get_by_key_mut(&msg.key).unwrap(); pending_load.bytes.extend_from_slice(&data); //jmr0 TODO: possibly move to another task? if let None = pending_load.metadata { - if let Ok(metadata) = load_from_buf(&pending_load.bytes) { + if let Ok(metadata) = load_from_buf(&pending_load.bytes.as_slice()) { let dimensions = metadata.dimensions(); let img_metadata = ImageMetadata { width: dimensions.width, - height: dimensions.height }; - pending_load.metadata = Some(img_metadata.clone()); + height: dimensions.height }; for listener in &pending_load.listeners { - listener.notify(ImageResponse::MetadataLoaded(img_metadata.clone()).clone()); + listener.respond(ImageResponse::MetadataLoaded(img_metadata.clone())); } + pending_load.metadata = Some(img_metadata); } } } (FetchResponseMsg::ProcessResponseEOF(result), key) => { + debug!("received EOF for {:?}", key); match result { Ok(()) => { let pending_load = self.pending_loads.get_by_key_mut(&msg.key).unwrap(); pending_load.result = Some(result); - let bytes = mem::replace(&mut pending_load.bytes, vec!()); + let bytes = pending_load.bytes.mark_complete(); let sender = self.decoder_sender.clone(); + debug!("async decoding {} ({:?})", pending_load.url, key); self.thread_pool.execute(move || { - let image = load_from_memory(&bytes); - let msg = DecoderMsg { - key: key, - image: image - }; + let msg = decode_bytes_sync(key, &*bytes); sender.send(msg).unwrap(); }); } Err(_) => { + debug!("processing error for {:?}", key); match self.placeholder_image.clone() { Some(placeholder_image) => { self.complete_load(msg.key, LoadResult::PlaceholderLoaded( @@ -492,7 +471,10 @@ impl ImageCache { // Change state of a url from pending -> loaded. fn complete_load(&mut self, key: LoadKey, mut load_result: LoadResult) { - let pending_load = self.pending_loads.remove(&key).unwrap(); + let pending_load = match self.pending_loads.remove(&key) { + Some(load) => load, + None => return, + }; match load_result { LoadResult::Loaded(ref mut image) => { @@ -518,145 +500,122 @@ impl ImageCache { LoadResult::None => ImageResponse::None, }; - let completed_load = CompletedLoad::new(image_response.clone()); + let completed_load = CompletedLoad::new(image_response.clone(), key); self.completed_loads.insert(pending_load.url.into(), completed_load); for listener in pending_load.listeners { - listener.notify(image_response.clone()); + listener.respond(image_response.clone()); } } - // Request an image from the cache. If the image hasn't been - // loaded/decoded yet, it will be loaded/decoded in the - // background. If send_metadata_msg is set, the channel will be notified - // that image metadata is available, possibly before the image has finished - // loading. - fn request_image(&mut self, - url: ServoUrl, - result_chan: ImageCacheChan, - responder: Option, - send_metadata_msg: bool) { - let image_listener = ImageListener::new(result_chan, responder, send_metadata_msg); - - // Check if already completed - match self.completed_loads.get(&url) { - Some(completed_load) => { - // It's already completed, return a notify straight away - image_listener.notify(completed_load.image_response.clone()); + /// Add a listener for a given image if it is still pending, or notify the + /// listener if the image is complete. + fn add_listener(&mut self, + id: PendingImageId, + listener: ImageResponder) { + if let Some(load) = self.pending_loads.get_by_key_mut(&id) { + if let Some(ref metadata) = load.metadata { + listener.respond(ImageResponse::MetadataLoaded(metadata.clone())); } - None => { - // Check if the load is already pending - let (cache_result, load_key, mut pending_load) = self.pending_loads.get_cached(url.clone()); - pending_load.add_listener(image_listener); - match cache_result { - CacheResult::Miss => { - // A new load request! Request the load from - // the resource thread. - // https://html.spec.whatwg.org/multipage/#update-the-image-data - // step 12. - // - // TODO(emilio): ServoUrl in more places please! - let request = RequestInit { - url: url.clone(), - type_: RequestType::Image, - destination: Destination::Image, - origin: url.clone(), - .. RequestInit::default() - }; + load.add_listener(listener); + return; + } + if let Some(load) = self.completed_loads.values().find(|l| l.id == id) { + listener.respond(load.image_response.clone()); + return; + } + warn!("Couldn't find cached entry for listener {:?}", id); + } - let progress_sender = self.progress_sender.clone(); - fetch_async(request, &self.core_resource_thread, move |action| { - let action = match action { - FetchResponseMsg::ProcessRequestBody | - FetchResponseMsg::ProcessRequestEOF => return, - a => a - }; - progress_sender.send(ResourceLoadInfo { - action: action, - key: load_key, - }).unwrap(); - }); - } - CacheResult::Hit => { - // Request is already on its way. - } + /// Return a completed image if it exists, or None if there is no complete load + /// or the complete load is not fully decoded or is unavailable. + fn get_completed_image_if_available(&self, + url: &ServoUrl, + placeholder: UsePlaceholder) + -> Option> { + self.completed_loads.get(url).map(|completed_load| { + match (&completed_load.image_response, placeholder) { + (&ImageResponse::Loaded(ref image), _) | + (&ImageResponse::PlaceholderLoaded(ref image), UsePlaceholder::Yes) => { + Ok(ImageOrMetadataAvailable::ImageAvailable(image.clone())) + } + (&ImageResponse::PlaceholderLoaded(_), UsePlaceholder::No) | + (&ImageResponse::None, _) | + (&ImageResponse::MetadataLoaded(_), _) => { + Err(ImageState::LoadError) } } - } - } - - fn get_image_if_available(&mut self, - url: ServoUrl, - placeholder: UsePlaceholder, ) - -> Result, ImageState> { - let img_or_metadata = self.get_image_or_meta_if_available(url, placeholder); - match img_or_metadata { - Ok(ImageOrMetadataAvailable::ImageAvailable(image)) => Ok(image), - Ok(ImageOrMetadataAvailable::MetadataAvailable(_)) => Err(ImageState::Pending), - Err(err) => Err(err), - } + }) } + /// Return any available metadata or image for the given URL, or an indication that + /// the image is not yet available if it is in progress, or else reserve a slot in + /// the cache for the URL if the consumer can request images. fn get_image_or_meta_if_available(&mut self, url: ServoUrl, - placeholder: UsePlaceholder) + placeholder: UsePlaceholder, + can_request: CanRequestImages) -> Result { - match self.completed_loads.get(&url) { - Some(completed_load) => { - match (completed_load.image_response.clone(), placeholder) { - (ImageResponse::Loaded(image), _) | - (ImageResponse::PlaceholderLoaded(image), UsePlaceholder::Yes) => { - Ok(ImageOrMetadataAvailable::ImageAvailable(image)) + if let Some(result) = self.get_completed_image_if_available(&url, placeholder) { + debug!("{} is available", url); + return result; + } + + let decoded = { + let result = self.pending_loads.get_cached(url.clone(), can_request); + match result { + CacheResult::Hit(key, pl) => match (&pl.result, &pl.metadata) { + (&Some(Ok(_)), _) => { + debug!("sync decoding {} ({:?})", url, key); + decode_bytes_sync(key, &pl.bytes.as_slice()) } - (ImageResponse::PlaceholderLoaded(_), UsePlaceholder::No) | - (ImageResponse::None, _) | - (ImageResponse::MetadataLoaded(_), _) => { - Err(ImageState::LoadError) + (&None, &Some(ref meta)) => { + debug!("metadata available for {} ({:?})", url, key); + return Ok(ImageOrMetadataAvailable::MetadataAvailable(meta.clone())) } + (&Some(Err(_)), _) | (&None, &None) => { + debug!("{} ({:?}) is still pending", url, key); + return Err(ImageState::Pending(key)); + } + }, + CacheResult::Miss(Some((key, _pl))) => { + debug!("should be requesting {} ({:?})", url, key); + return Err(ImageState::NotRequested(key)); + } + CacheResult::Miss(None) => { + debug!("couldn't find an entry for {}", url); + return Err(ImageState::LoadError); } } - None => { - let pl = match self.pending_loads.get_by_url(&url) { - Some(pl) => pl, - None => return Err(ImageState::NotRequested), - }; + }; - let meta = match pl.metadata { - Some(ref meta) => meta, - None => return Err(ImageState::Pending), - }; - - Ok(ImageOrMetadataAvailable::MetadataAvailable(meta.clone())) - } + // In the case where a decode is ongoing (or waiting in a queue) but we have the + // full response available, we decode the bytes synchronously and ignore the + // async decode when it finishes later. + // TODO: make this behaviour configurable according to the caller's needs. + self.handle_decoder(decoded); + match self.get_completed_image_if_available(&url, placeholder) { + Some(result) => result, + None => Err(ImageState::LoadError), } } - - fn store_decode_image(&mut self, - ref_url: ServoUrl, - loaded_bytes: Vec) { - let (cache_result, load_key, _) = self.pending_loads.get_cached(ref_url.clone()); - assert!(cache_result == CacheResult::Miss); - let action = FetchResponseMsg::ProcessResponseChunk(loaded_bytes); - let _ = self.progress_sender.send(ResourceLoadInfo { - action: action, - key: load_key, - }); - let action = FetchResponseMsg::ProcessResponseEOF(Ok(())); - let _ = self.progress_sender.send(ResourceLoadInfo { - action: action, - key: load_key, - }); - } } /// Create a new image cache. -pub fn new_image_cache_thread(core_resource_thread: CoreResourceThread, - webrender_api: webrender_traits::RenderApi) -> ImageCacheThread { +pub fn new_image_cache_thread(webrender_api: webrender_traits::RenderApi) -> ImageCacheThread { let (ipc_command_sender, ipc_command_receiver) = ipc::channel().unwrap(); thread::Builder::new().name("ImageCacheThread".to_owned()).spawn(move || { - ImageCache::run(core_resource_thread, webrender_api, ipc_command_receiver) + ImageCache::run(webrender_api, ipc_command_receiver) }).expect("Thread spawning failed"); ImageCacheThread::new(ipc_command_sender) } + +fn decode_bytes_sync(key: LoadKey, bytes: &[u8]) -> DecoderMsg { + let image = load_from_memory(bytes); + DecoderMsg { + key: key, + image: image + } +} diff --git a/components/net_traits/image_cache_thread.rs b/components/net_traits/image_cache_thread.rs index 4fb7aedee04..49bd1ea1c8f 100644 --- a/components/net_traits/image_cache_thread.rs +++ b/components/net_traits/image_cache_thread.rs @@ -2,6 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +use FetchResponseMsg; use image::base::{Image, ImageMetadata}; use ipc_channel::ipc::{self, IpcSender}; use servo_url::ServoUrl; @@ -13,27 +14,45 @@ use std::sync::Arc; /// and/or repaint. #[derive(Clone, Deserialize, Serialize)] pub struct ImageResponder { - sender: IpcSender, + id: PendingImageId, + sender: IpcSender, +} + +#[derive(Deserialize, Serialize)] +pub struct PendingImageResponse { + pub response: ImageResponse, + pub id: PendingImageId, } impl ImageResponder { - pub fn new(sender: IpcSender) -> ImageResponder { + pub fn new(sender: IpcSender, id: PendingImageId) -> ImageResponder { ImageResponder { sender: sender, + id: id, } } pub fn respond(&self, response: ImageResponse) { - self.sender.send(response).unwrap() + // This send can fail if thread waiting for this notification has panicked. + // That's not a case that's worth warning about. + // TODO(#15501): are there cases in which we should perform cleanup? + let _ = self.sender.send(PendingImageResponse { + response: response, + id: self.id, + }); } } +/// The unique id for an image that has previously been requested. +#[derive(Copy, Clone, PartialEq, Eq, Deserialize, Serialize, HeapSizeOf, Hash, Debug)] +pub struct PendingImageId(pub u64); + /// The current state of an image in the cache. #[derive(PartialEq, Copy, Clone, Deserialize, Serialize)] pub enum ImageState { - Pending, + Pending(PendingImageId), LoadError, - NotRequested, + NotRequested(PendingImageId), } /// The returned image. @@ -56,45 +75,22 @@ pub enum ImageOrMetadataAvailable { MetadataAvailable(ImageMetadata), } -/// Channel used by the image cache to send results. -#[derive(Clone, Deserialize, Serialize)] -pub struct ImageCacheChan(pub IpcSender); - -/// The result of an image cache command that is returned to the -/// caller. -#[derive(Deserialize, Serialize)] -pub struct ImageCacheResult { - pub responder: Option, - pub image_response: ImageResponse, -} - /// Commands that the image cache understands. #[derive(Deserialize, Serialize)] pub enum ImageCacheCommand { - /// Request an image asynchronously from the cache. Supply a channel - /// to receive the result, and optionally an image responder - /// that is passed to the result channel. - RequestImage(ServoUrl, ImageCacheChan, Option), - - /// Requests an image and a "metadata-ready" notification message asynchronously from the - /// cache. The cache will make an effort to send metadata before the image is completely - /// loaded. Supply a channel to receive the results, and optionally an image responder - /// that is passed to the result channel. - RequestImageAndMetadata(ServoUrl, ImageCacheChan, Option), - - /// Synchronously check the state of an image in the cache. - /// TODO(gw): Profile this on some real world sites and see - /// if it's worth caching the results of this locally in each - /// layout / paint thread. - GetImageIfAvailable(ServoUrl, UsePlaceholder, IpcSender, ImageState>>), - /// Synchronously check the state of an image in the cache. If the image is in a loading /// state and but its metadata has been made available, it will be sent as a response. - GetImageOrMetadataIfAvailable(ServoUrl, UsePlaceholder, IpcSender>), + GetImageOrMetadataIfAvailable(ServoUrl, + UsePlaceholder, + CanRequestImages, + IpcSender>), + + /// Add a new listener for the given pending image. + AddListener(PendingImageId, ImageResponder), /// Instruct the cache to store this data as a newly-complete network request and continue /// decoding the result into pixel data - StoreDecodeImage(ServoUrl, Vec), + StoreDecodeImage(PendingImageId, FetchResponseMsg), /// Clients must wait for a response before shutting down the ResourceThread Exit(IpcSender<()>), @@ -106,6 +102,15 @@ pub enum UsePlaceholder { Yes, } +/// Whether a consumer is in a position to request images or not. This can occur when +/// animations are being processed by the layout thread while the script thread is executing +/// in parallel. +#[derive(Copy, Clone, PartialEq, Deserialize, Serialize)] +pub enum CanRequestImages { + No, + Yes, +} + /// The client side of the image cache thread. This can be safely cloned /// and passed to different threads. #[derive(Clone, Deserialize, Serialize)] @@ -122,52 +127,41 @@ impl ImageCacheThread { } } - /// Asynchronously request an image. See ImageCacheCommand::RequestImage. - pub fn request_image(&self, url: ServoUrl, result_chan: ImageCacheChan, responder: Option) { - let msg = ImageCacheCommand::RequestImage(url, result_chan, responder); - let _ = self.chan.send(msg); - } - - /// Asynchronously request an image and metadata. - /// See ImageCacheCommand::RequestImageAndMetadata - pub fn request_image_and_metadata(&self, - url: ServoUrl, - result_chan: ImageCacheChan, - responder: Option) { - let msg = ImageCacheCommand::RequestImageAndMetadata(url, result_chan, responder); - let _ = self.chan.send(msg); - } - - /// Get the current state of an image. See ImageCacheCommand::GetImageIfAvailable. - pub fn find_image(&self, url: ServoUrl, use_placeholder: UsePlaceholder) -> Result, ImageState> { - let (sender, receiver) = ipc::channel().unwrap(); - let msg = ImageCacheCommand::GetImageIfAvailable(url, use_placeholder, sender); - let _ = self.chan.send(msg); - try!(receiver.recv().map_err(|_| ImageState::LoadError)) - } - /// Get the current state of an image, returning its metadata if available. /// See ImageCacheCommand::GetImageOrMetadataIfAvailable. /// /// FIXME: We shouldn't do IPC for data uris! pub fn find_image_or_metadata(&self, url: ServoUrl, - use_placeholder: UsePlaceholder) + use_placeholder: UsePlaceholder, + can_request: CanRequestImages) -> Result { let (sender, receiver) = ipc::channel().unwrap(); - let msg = ImageCacheCommand::GetImageOrMetadataIfAvailable(url, use_placeholder, sender); + let msg = ImageCacheCommand::GetImageOrMetadataIfAvailable(url, + use_placeholder, + can_request, + sender); let _ = self.chan.send(msg); try!(receiver.recv().map_err(|_| ImageState::LoadError)) } - /// Decode the given image bytes and cache the result for the given URL. - pub fn store_complete_image_bytes(&self, url: ServoUrl, image_data: Vec) { - let msg = ImageCacheCommand::StoreDecodeImage(url, image_data); - let _ = self.chan.send(msg); + /// Add a new listener for the given pending image id. If the image is already present, + /// the responder will still receive the expected response. + pub fn add_listener(&self, id: PendingImageId, responder: ImageResponder) { + let msg = ImageCacheCommand::AddListener(id, responder); + self.chan.send(msg).expect("Image cache thread is not available"); + } + + /// Inform the image cache about a response for a pending request. + pub fn notify_pending_response(&self, id: PendingImageId, data: FetchResponseMsg) { + let msg = ImageCacheCommand::StoreDecodeImage(id, data); + self.chan.send(msg).expect("Image cache thread is not available"); } /// Shutdown the image cache thread. pub fn exit(&self) { + // If the image cache is not available when we're trying to shut it down, + // that is not worth warning about. let (response_chan, response_port) = ipc::channel().unwrap(); let _ = self.chan.send(ImageCacheCommand::Exit(response_chan)); let _ = response_port.recv(); diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index 8f1e004e8b0..d2ffee09887 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -192,7 +192,7 @@ pub trait FetchTaskTarget { fn process_response_eof(&mut self, response: &Response); } -#[derive(Serialize, Deserialize)] +#[derive(Clone, Serialize, Deserialize)] pub enum FilteredMetadata { Basic(Metadata), Cors(Metadata), @@ -200,7 +200,7 @@ pub enum FilteredMetadata { OpaqueRedirect } -#[derive(Serialize, Deserialize)] +#[derive(Clone, Serialize, Deserialize)] pub enum FetchMetadata { Unfiltered(Metadata), Filtered { diff --git a/components/script/document_loader.rs b/components/script/document_loader.rs index 30d83019c5f..a4ce36a2f57 100644 --- a/components/script/document_loader.rs +++ b/components/script/document_loader.rs @@ -116,6 +116,13 @@ impl DocumentLoader { request: RequestInit, fetch_target: IpcSender) { self.add_blocking_load(load); + self.fetch_async_background(request, fetch_target); + } + + /// Initiate a new fetch that does not block the document load event. + pub fn fetch_async_background(&mut self, + request: RequestInit, + fetch_target: IpcSender) { self.resource_threads.sender().send(CoreResourceMsg::Fetch(request, fetch_target)).unwrap(); } diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 0e605780a20..4d38b39d333 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -62,7 +62,7 @@ use msg::constellation_msg::{FrameId, FrameType, PipelineId}; use net_traits::{Metadata, NetworkError, ReferrerPolicy, ResourceThreads}; use net_traits::filemanager_thread::RelativePos; use net_traits::image::base::{Image, ImageMetadata}; -use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheThread}; +use net_traits::image_cache_thread::{ImageCacheThread, PendingImageId}; use net_traits::request::{Request, RequestInit}; use net_traits::response::{Response, ResponseBody}; use net_traits::response::HttpsState; @@ -320,7 +320,7 @@ unsafe_no_jsmanaged_fields!(bool, f32, f64, String, AtomicBool, AtomicUsize, Uui unsafe_no_jsmanaged_fields!(usize, u8, u16, u32, u64); unsafe_no_jsmanaged_fields!(isize, i8, i16, i32, i64); unsafe_no_jsmanaged_fields!(ServoUrl, ImmutableOrigin, MutableOrigin); -unsafe_no_jsmanaged_fields!(Image, ImageMetadata, ImageCacheChan, ImageCacheThread); +unsafe_no_jsmanaged_fields!(Image, ImageMetadata, ImageCacheThread, PendingImageId); unsafe_no_jsmanaged_fields!(Metadata); unsafe_no_jsmanaged_fields!(NetworkError); unsafe_no_jsmanaged_fields!(Atom, Prefix, LocalName, Namespace, QualName); diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index fff339e1cc7..065b966d939 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -429,7 +429,9 @@ impl CanvasRenderingContext2D { let img = match self.request_image_from_cache(url) { ImageResponse::Loaded(img) => img, - ImageResponse::PlaceholderLoaded(_) | ImageResponse::None | ImageResponse::MetadataLoaded(_) => { + ImageResponse::PlaceholderLoaded(_) | + ImageResponse::None | + ImageResponse::MetadataLoaded(_) => { return None; } }; diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs index b174d2ec9a8..a51463f4674 100644 --- a/components/script/dom/htmlcanvaselement.rs +++ b/components/script/dom/htmlcanvaselement.rs @@ -337,15 +337,20 @@ impl<'a> From<&'a WebGLContextAttributes> for GLContextAttributes { pub mod utils { use dom::window::Window; - use ipc_channel::ipc; - use net_traits::image_cache_thread::{ImageCacheChan, ImageResponse}; + use net_traits::image_cache_thread::{ImageResponse, UsePlaceholder, ImageOrMetadataAvailable}; + use net_traits::image_cache_thread::CanRequestImages; use servo_url::ServoUrl; pub fn request_image_from_cache(window: &Window, url: ServoUrl) -> ImageResponse { let image_cache = window.image_cache_thread(); - let (response_chan, response_port) = ipc::channel().unwrap(); - image_cache.request_image(url.into(), ImageCacheChan(response_chan), None); - let result = response_port.recv().unwrap(); - result.image_response + let response = + image_cache.find_image_or_metadata(url.into(), + UsePlaceholder::No, + CanRequestImages::No); + match response { + Ok(ImageOrMetadataAvailable::ImageAvailable(image)) => + ImageResponse::Loaded(image), + _ => ImageResponse::None, + } } } diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index ec9f2e1ec80..af98b013410 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use app_units::{Au, AU_PER_PX}; +use document_loader::{LoadType, LoadBlocker}; use dom::activation::Activatable; use dom::attr::Attr; use dom::bindings::cell::DOMRefCell; @@ -16,6 +17,7 @@ use dom::bindings::error::Fallible; use dom::bindings::inheritance::Castable; use dom::bindings::js::{LayoutJS, Root}; use dom::bindings::refcounted::Trusted; +use dom::bindings::reflector::DomObject; use dom::bindings::str::DOMString; use dom::document::Document; use dom::element::{AttributeMutation, Element, RawLayoutElementHelpers}; @@ -34,13 +36,18 @@ use euclid::point::Point2D; use html5ever_atoms::LocalName; use ipc_channel::ipc; use ipc_channel::router::ROUTER; +use net_traits::{FetchResponseListener, FetchMetadata, NetworkError, FetchResponseMsg}; use net_traits::image::base::{Image, ImageMetadata}; -use net_traits::image_cache_thread::{ImageResponder, ImageResponse}; +use net_traits::image_cache_thread::{ImageResponder, ImageResponse, PendingImageId, ImageState}; +use net_traits::image_cache_thread::{UsePlaceholder, ImageOrMetadataAvailable, CanRequestImages}; +use net_traits::image_cache_thread::ImageCacheThread; +use net_traits::request::{RequestInit, Type as RequestType}; +use network_listener::{NetworkListener, PreInvoke}; use num_traits::ToPrimitive; use script_thread::Runnable; use servo_url::ServoUrl; use std::i32; -use std::sync::Arc; +use std::sync::{Arc, Mutex}; use style::attr::{AttrValue, LengthOrPercentageOrAuto}; use task_source::TaskSource; @@ -53,10 +60,12 @@ enum State { Broken, } #[derive(JSTraceable, HeapSizeOf)] +#[must_root] struct ImageRequest { state: State, parsed_url: Option, source_url: Option, + blocker: Option, #[ignore_heap_size_of = "Arc"] image: Option>, metadata: Option, @@ -74,7 +83,6 @@ impl HTMLImageElement { } } - struct ImageResponseHandlerRunnable { element: Trusted, image: ImageResponse, @@ -94,75 +102,225 @@ impl Runnable for ImageResponseHandlerRunnable { fn name(&self) -> &'static str { "ImageResponseHandlerRunnable" } fn handler(self: Box) { - // Update the image field let element = self.element.root(); - let (image, metadata, trigger_image_load, trigger_image_error) = match self.image { + element.process_image_response(self.image); + } +} + +/// The context required for asynchronously loading an external image. +struct ImageContext { + /// The element that initiated the request. + elem: Trusted, + /// The initial URL requested. + url: ServoUrl, + /// Indicates whether the request failed, and why + status: Result<(), NetworkError>, + /// The cache ID for this request. + id: PendingImageId, +} + +impl ImageContext { + fn image_cache(&self) -> ImageCacheThread { + let elem = self.elem.root(); + window_from_node(&*elem).image_cache_thread().clone() + } +} + +impl FetchResponseListener for ImageContext { + fn process_request_body(&mut self) {} + fn process_request_eof(&mut self) {} + + fn process_response(&mut self, metadata: Result) { + self.image_cache().notify_pending_response( + self.id, + FetchResponseMsg::ProcessResponse(metadata.clone())); + + let metadata = metadata.ok().map(|meta| { + match meta { + FetchMetadata::Unfiltered(m) => m, + FetchMetadata::Filtered { unsafe_, .. } => unsafe_ + } + }); + + let status_code = metadata.as_ref().and_then(|m| { + m.status.as_ref().map(|&(code, _)| code) + }).unwrap_or(0); + + self.status = match status_code { + 0 => Err(NetworkError::Internal("No http status code received".to_owned())), + 200...299 => Ok(()), // HTTP ok status codes + _ => Err(NetworkError::Internal(format!("HTTP error code {}", status_code))) + }; + } + + fn process_response_chunk(&mut self, payload: Vec) { + if self.status.is_ok() { + self.image_cache().notify_pending_response( + self.id, + FetchResponseMsg::ProcessResponseChunk(payload)); + } + } + + fn process_response_eof(&mut self, response: Result<(), NetworkError>) { + let elem = self.elem.root(); + let document = document_from_node(&*elem); + let image_cache = self.image_cache(); + image_cache.notify_pending_response(self.id, + FetchResponseMsg::ProcessResponseEOF(response)); + document.finish_load(LoadType::Image(self.url.clone())); + } +} + +impl PreInvoke for ImageContext {} + +impl HTMLImageElement { + /// Update the current image with a valid URL. + fn update_image_with_url(&self, img_url: ServoUrl, src: DOMString) { + { + let mut current_request = self.current_request.borrow_mut(); + current_request.parsed_url = Some(img_url.clone()); + current_request.source_url = Some(src); + + LoadBlocker::terminate(&mut current_request.blocker); + let document = document_from_node(self); + current_request.blocker = + Some(LoadBlocker::new(&*document, LoadType::Image(img_url.clone()))); + } + + fn add_cache_listener_for_element(image_cache: &ImageCacheThread, + id: PendingImageId, + elem: &HTMLImageElement) { + let trusted_node = Trusted::new(elem); + let (responder_sender, responder_receiver) = ipc::channel().unwrap(); + + let window = window_from_node(elem); + let task_source = window.networking_task_source(); + let wrapper = window.get_runnable_wrapper(); + ROUTER.add_route(responder_receiver.to_opaque(), box move |message| { + // Return the image via a message to the script thread, which marks the element + // as dirty and triggers a reflow. + let runnable = ImageResponseHandlerRunnable::new( + trusted_node.clone(), message.to().unwrap()); + let _ = task_source.queue_with_wrapper(box runnable, &wrapper); + }); + + image_cache.add_listener(id, ImageResponder::new(responder_sender, id)); + } + + let window = window_from_node(self); + let image_cache = window.image_cache_thread(); + let response = + image_cache.find_image_or_metadata(img_url.clone().into(), + UsePlaceholder::Yes, + CanRequestImages::Yes); + match response { + Ok(ImageOrMetadataAvailable::ImageAvailable(image)) => { + self.process_image_response(ImageResponse::Loaded(image)); + } + + Ok(ImageOrMetadataAvailable::MetadataAvailable(m)) => { + self.process_image_response(ImageResponse::MetadataLoaded(m)); + } + + Err(ImageState::Pending(id)) => { + add_cache_listener_for_element(image_cache, id, self); + } + + Err(ImageState::LoadError) => { + self.process_image_response(ImageResponse::None); + } + + Err(ImageState::NotRequested(id)) => { + add_cache_listener_for_element(image_cache, id, self); + self.request_image(img_url, id); + } + } + } + + fn request_image(&self, img_url: ServoUrl, id: PendingImageId) { + let document = document_from_node(self); + let window = window_from_node(self); + + let context = Arc::new(Mutex::new(ImageContext { + elem: Trusted::new(self), + url: img_url.clone(), + status: Ok(()), + id: id, + })); + + let (action_sender, action_receiver) = ipc::channel().unwrap(); + let listener = NetworkListener { + context: context, + task_source: window.networking_task_source(), + wrapper: Some(window.get_runnable_wrapper()), + }; + ROUTER.add_route(action_receiver.to_opaque(), box move |message| { + listener.notify_fetch(message.to().unwrap()); + }); + + let request = RequestInit { + url: img_url.clone(), + origin: document.url().clone(), + type_: RequestType::Image, + pipeline_id: Some(document.global().pipeline_id()), + .. RequestInit::default() + }; + + document.fetch_async(LoadType::Image(img_url), request, action_sender); + } + + fn process_image_response(&self, image: ImageResponse) { + let (image, metadata, trigger_image_load, trigger_image_error) = match image { ImageResponse::Loaded(image) | ImageResponse::PlaceholderLoaded(image) => { - (Some(image.clone()), Some(ImageMetadata { height: image.height, width: image.width } ), true, false) + (Some(image.clone()), + Some(ImageMetadata { height: image.height, width: image.width }), + true, + false) } ImageResponse::MetadataLoaded(meta) => { (None, Some(meta), false, false) } ImageResponse::None => (None, None, false, true) }; - element.current_request.borrow_mut().image = image; - element.current_request.borrow_mut().metadata = metadata; + self.current_request.borrow_mut().image = image; + self.current_request.borrow_mut().metadata = metadata; // Mark the node dirty - let document = document_from_node(&*element); - element.upcast::().dirty(NodeDamage::OtherNodeDamage); + self.upcast::().dirty(NodeDamage::OtherNodeDamage); // Fire image.onload if trigger_image_load { - element.upcast::().fire_event(atom!("load")); + self.upcast::().fire_event(atom!("load")); } // Fire image.onerror if trigger_image_error { - element.upcast::().fire_event(atom!("error")); + self.upcast::().fire_event(atom!("error")); } + LoadBlocker::terminate(&mut self.current_request.borrow_mut().blocker); + // Trigger reflow - let window = window_from_node(&*document); + let window = window_from_node(self); window.add_pending_reflow(); } -} -impl HTMLImageElement { /// Makes the local `image` member match the status of the `src` attribute and starts /// prefetching the image. This method must be called after `src` is changed. fn update_image(&self, value: Option<(DOMString, ServoUrl)>) { let document = document_from_node(self); let window = document.window(); - let image_cache = window.image_cache_thread(); match value { None => { self.current_request.borrow_mut().parsed_url = None; self.current_request.borrow_mut().source_url = None; + LoadBlocker::terminate(&mut self.current_request.borrow_mut().blocker); self.current_request.borrow_mut().image = None; } Some((src, base_url)) => { let img_url = base_url.join(&src); if let Ok(img_url) = img_url { - self.current_request.borrow_mut().parsed_url = Some(img_url.clone()); - self.current_request.borrow_mut().source_url = Some(src); - - let trusted_node = Trusted::new(self); - let (responder_sender, responder_receiver) = ipc::channel().unwrap(); - let task_source = window.networking_task_source(); - let wrapper = window.get_runnable_wrapper(); - ROUTER.add_route(responder_receiver.to_opaque(), box move |message| { - // Return the image via a message to the script thread, which marks the element - // as dirty and triggers a reflow. - let image_response = message.to().unwrap(); - let runnable = box ImageResponseHandlerRunnable::new( - trusted_node.clone(), image_response); - let _ = task_source.queue_with_wrapper(runnable, &wrapper); - }); - - image_cache.request_image_and_metadata(img_url.into(), - window.image_cache_chan(), - Some(ImageResponder::new(responder_sender))); + self.update_image_with_url(img_url, src); } else { // https://html.spec.whatwg.org/multipage/#update-the-image-data // Step 11 (error substeps) @@ -202,6 +360,7 @@ impl HTMLImageElement { } } } + fn new_inherited(local_name: LocalName, prefix: Option, document: &Document) -> HTMLImageElement { HTMLImageElement { htmlelement: HTMLElement::new_inherited(local_name, prefix, document), @@ -210,14 +369,16 @@ impl HTMLImageElement { parsed_url: None, source_url: None, image: None, - metadata: None + metadata: None, + blocker: None, }), pending_request: DOMRefCell::new(ImageRequest { state: State::Unavailable, parsed_url: None, source_url: None, image: None, - metadata: None + metadata: None, + blocker: None, }), } } diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index b6392fbdd19..93cdd1c31d0 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -42,7 +42,7 @@ use dom::location::Location; use dom::mediaquerylist::{MediaQueryList, WeakMediaQueryListVec}; use dom::messageevent::MessageEvent; use dom::navigator::Navigator; -use dom::node::{Node, from_untrusted_node_address, window_from_node}; +use dom::node::{Node, from_untrusted_node_address, window_from_node, NodeDamage}; use dom::performance::Performance; use dom::promise::Promise; use dom::screen::Screen; @@ -52,20 +52,23 @@ use euclid::{Point2D, Rect, Size2D}; use fetch; use gfx_traits::ScrollRootId; use ipc_channel::ipc::{self, IpcSender}; +use ipc_channel::router::ROUTER; use js::jsapi::{HandleObject, HandleValue, JSAutoCompartment, JSContext}; use js::jsapi::{JS_GC, JS_GetRuntime}; use js::jsval::UndefinedValue; use js::rust::Runtime; +use layout_image::fetch_image_for_layout; use msg::constellation_msg::{FrameType, PipelineId}; use net_traits::{ResourceThreads, ReferrerPolicy}; -use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheThread}; +use net_traits::image_cache_thread::{ImageResponder, ImageResponse}; +use net_traits::image_cache_thread::{PendingImageResponse, ImageCacheThread, PendingImageId}; use net_traits::storage_thread::StorageType; use num_traits::ToPrimitive; use open; use profile_traits::mem::ProfilerChan as MemProfilerChan; use profile_traits::time::ProfilerChan as TimeProfilerChan; use rustc_serialize::base64::{FromBase64, STANDARD, ToBase64}; -use script_layout_interface::TrustedNodeAddress; +use script_layout_interface::{TrustedNodeAddress, PendingImageState}; use script_layout_interface::message::{Msg, Reflow, ReflowQueryType, ScriptReflow}; use script_layout_interface::reporter::CSSErrorReporter; use script_layout_interface::rpc::{ContentBoxResponse, ContentBoxesResponse, LayoutRPC}; @@ -73,7 +76,7 @@ use script_layout_interface::rpc::{MarginStyleResponse, NodeScrollRootIdResponse use script_layout_interface::rpc::{ResolvedStyleResponse, TextIndexResponse}; use script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort, ScriptThreadEventCategory}; use script_thread::{MainThreadScriptChan, MainThreadScriptMsg, Runnable, RunnableWrapper}; -use script_thread::SendableMainThreadScriptChan; +use script_thread::{SendableMainThreadScriptChan, ImageCacheMsg}; use script_traits::{ConstellationControlMsg, LoadData, MozBrowserEvent, UntrustedNodeAddress}; use script_traits::{DocumentState, TimerEvent, TimerEventId}; use script_traits::{ScriptMsg as ConstellationMsg, TimerEventRequest, WindowSizeData, WindowSizeType}; @@ -87,6 +90,7 @@ use std::ascii::AsciiExt; use std::borrow::ToOwned; use std::cell::Cell; use std::collections::{HashMap, HashSet}; +use std::collections::hash_map::Entry; use std::default::Default; use std::io::{Write, stderr, stdout}; use std::mem; @@ -165,7 +169,7 @@ pub struct Window { #[ignore_heap_size_of = "channels are hard"] image_cache_thread: ImageCacheThread, #[ignore_heap_size_of = "channels are hard"] - image_cache_chan: ImageCacheChan, + image_cache_chan: Sender, browsing_context: MutNullableJS, document: MutNullableJS, history: MutNullableJS, @@ -253,7 +257,13 @@ pub struct Window { webvr_thread: Option>, /// A map for storing the previous permission state read results. - permission_state_invocation_results: DOMRefCell> + permission_state_invocation_results: DOMRefCell>, + + /// All of the elements that have an outstanding image request that was + /// initiated by layout during a reflow. They are stored in the script thread + /// to ensure that the element can be marked dirty when the image data becomes + /// available at some point in the future. + pending_layout_images: DOMRefCell>>>, } impl Window { @@ -295,10 +305,6 @@ impl Window { &self.script_chan.0 } - pub fn image_cache_chan(&self) -> ImageCacheChan { - self.image_cache_chan.clone() - } - pub fn parent_info(&self) -> Option<(PipelineId, FrameType)> { self.parent_info } @@ -346,6 +352,28 @@ impl Window { pub fn permission_state_invocation_results(&self) -> &DOMRefCell> { &self.permission_state_invocation_results } + + pub fn pending_image_notification(&self, response: PendingImageResponse) { + //XXXjdm could be more efficient to send the responses to the layout thread, + // rather than making the layout thread talk to the image cache to + // obtain the same data. + let mut images = self.pending_layout_images.borrow_mut(); + let nodes = images.entry(response.id); + let nodes = match nodes { + Entry::Occupied(nodes) => nodes, + Entry::Vacant(_) => return, + }; + for node in nodes.get() { + node.dirty(NodeDamage::OtherNodeDamage); + } + match response.response { + ImageResponse::MetadataLoaded(_) => {} + ImageResponse::Loaded(_) | + ImageResponse::PlaceholderLoaded(_) | + ImageResponse::None => { nodes.remove(); } + } + self.add_pending_reflow(); + } } #[cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))] @@ -1168,6 +1196,31 @@ impl Window { self.emit_timeline_marker(marker.end()); } + let pending_images = self.layout_rpc.pending_images(); + for image in pending_images { + let id = image.id; + let js_runtime = self.js_runtime.borrow(); + let js_runtime = js_runtime.as_ref().unwrap(); + let node = from_untrusted_node_address(js_runtime.rt(), image.node); + + if let PendingImageState::Unrequested(ref url) = image.state { + fetch_image_for_layout(url.clone(), &*node, id, self.image_cache_thread.clone()); + } + + let mut images = self.pending_layout_images.borrow_mut(); + let nodes = images.entry(id).or_insert(vec![]); + if nodes.iter().find(|n| &***n as *const _ == &*node as *const _).is_none() { + let (responder, responder_listener) = ipc::channel().unwrap(); + let pipeline = self.upcast::().pipeline_id(); + let image_cache_chan = self.image_cache_chan.clone(); + ROUTER.add_route(responder_listener.to_opaque(), box move |message| { + let _ = image_cache_chan.send((pipeline, message.to().unwrap())); + }); + self.image_cache_thread.add_listener(id, ImageResponder::new(responder, id)); + nodes.push(JS::from_ref(&*node)); + } + } + true } @@ -1227,7 +1280,8 @@ impl Window { let ready_state = document.ReadyState(); - if ready_state == DocumentReadyState::Complete && !reftest_wait { + let pending_images = self.pending_layout_images.borrow().is_empty(); + if ready_state == DocumentReadyState::Complete && !reftest_wait && pending_images { let global_scope = self.upcast::(); let event = ConstellationMsg::SetDocumentState(global_scope.pipeline_id(), DocumentState::Idle); global_scope.constellation_chan().send(event).unwrap(); @@ -1635,7 +1689,7 @@ impl Window { network_task_source: NetworkingTaskSource, history_task_source: HistoryTraversalTaskSource, file_task_source: FileReadingTaskSource, - image_cache_chan: ImageCacheChan, + image_cache_chan: Sender, image_cache_thread: ImageCacheThread, resource_threads: ResourceThreads, bluetooth_thread: IpcSender, @@ -1717,6 +1771,7 @@ impl Window { test_runner: Default::default(), webvr_thread: webvr_thread, permission_state_invocation_results: DOMRefCell::new(HashMap::new()), + pending_layout_images: DOMRefCell::new(HashMap::new()), }; unsafe { diff --git a/components/script/layout_image.rs b/components/script/layout_image.rs new file mode 100644 index 00000000000..d903b435c26 --- /dev/null +++ b/components/script/layout_image.rs @@ -0,0 +1,81 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//! Infrastructure to initiate network requests for images needed by the layout +//! thread. The script thread needs to be responsible for them because there's +//! no guarantee that the responsible nodes will still exist in the future if the +//! layout thread holds on to them during asynchronous operations. + +use dom::bindings::reflector::DomObject; +use dom::node::{Node, document_from_node}; +use ipc_channel::ipc; +use ipc_channel::router::ROUTER; +use net_traits::{FetchResponseMsg, FetchResponseListener, FetchMetadata, NetworkError}; +use net_traits::image_cache_thread::{ImageCacheThread, PendingImageId}; +use net_traits::request::{Type as RequestType, RequestInit as FetchRequestInit}; +use network_listener::{NetworkListener, PreInvoke}; +use servo_url::ServoUrl; +use std::sync::{Arc, Mutex}; + +struct LayoutImageContext { + id: PendingImageId, + cache: ImageCacheThread, +} + +impl FetchResponseListener for LayoutImageContext { + fn process_request_body(&mut self) {} + fn process_request_eof(&mut self) {} + fn process_response(&mut self, metadata: Result) { + self.cache.notify_pending_response( + self.id, + FetchResponseMsg::ProcessResponse(metadata)); + } + + fn process_response_chunk(&mut self, payload: Vec) { + self.cache.notify_pending_response( + self.id, + FetchResponseMsg::ProcessResponseChunk(payload)); + } + + fn process_response_eof(&mut self, response: Result<(), NetworkError>) { + self.cache.notify_pending_response(self.id, + FetchResponseMsg::ProcessResponseEOF(response)); + } +} + +impl PreInvoke for LayoutImageContext {} + +pub fn fetch_image_for_layout(url: ServoUrl, + node: &Node, + id: PendingImageId, + cache: ImageCacheThread) { + let context = Arc::new(Mutex::new(LayoutImageContext { + id: id, + cache: cache, + })); + + let document = document_from_node(node); + let window = document.window(); + + let (action_sender, action_receiver) = ipc::channel().unwrap(); + let listener = NetworkListener { + context: context, + task_source: window.networking_task_source(), + wrapper: Some(window.get_runnable_wrapper()), + }; + ROUTER.add_route(action_receiver.to_opaque(), box move |message| { + listener.notify_fetch(message.to().unwrap()); + }); + + let request = FetchRequestInit { + url: url, + origin: document.url().clone(), + type_: RequestType::Image, + pipeline_id: Some(document.global().pipeline_id()), + .. FetchRequestInit::default() + }; + + // Layout image loads do not delay the document load event. + document.mut_loader().fetch_async_background(request, action_sender); +} diff --git a/components/script/lib.rs b/components/script/lib.rs index e5c93357bd2..81c7eb0901f 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -110,6 +110,7 @@ pub mod document_loader; #[macro_use] mod dom; pub mod fetch; +mod layout_image; pub mod layout_wrapper; mod mem; mod microtask; diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 2ab421c707b..192923294a6 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -73,7 +73,7 @@ use microtask::{MicrotaskQueue, Microtask}; use msg::constellation_msg::{FrameId, FrameType, PipelineId, PipelineNamespace}; use net_traits::{CoreResourceMsg, FetchMetadata, FetchResponseListener}; use net_traits::{IpcSend, Metadata, ReferrerPolicy, ResourceThreads}; -use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheResult, ImageCacheThread}; +use net_traits::image_cache_thread::{PendingImageResponse, ImageCacheThread}; use net_traits::request::{CredentialsMode, Destination, RequestInit}; use net_traits::storage_thread::StorageType; use network_listener::NetworkListener; @@ -120,6 +120,8 @@ use url::Position; use webdriver_handlers; use webvr_traits::WebVRMsg; +pub type ImageCacheMsg = (PipelineId, PendingImageResponse); + thread_local!(pub static STACK_ROOTS: Cell> = Cell::new(None)); thread_local!(static SCRIPT_THREAD_ROOT: Cell> = Cell::new(None)); @@ -230,7 +232,7 @@ enum MixedMessage { FromConstellation(ConstellationControlMsg), FromScript(MainThreadScriptMsg), FromDevtools(DevtoolScriptControlMsg), - FromImageCache(ImageCacheResult), + FromImageCache((PipelineId, PendingImageResponse)), FromScheduler(TimerEvent) } @@ -444,10 +446,10 @@ pub struct ScriptThread { layout_to_constellation_chan: IpcSender, /// The port on which we receive messages from the image cache - image_cache_port: Receiver, + image_cache_port: Receiver, /// The channel on which the image cache can send messages to ourself. - image_cache_channel: ImageCacheChan, + image_cache_channel: Sender, /// For providing contact with the time profiler. time_profiler_chan: time::ProfilerChan, @@ -646,11 +648,6 @@ impl ScriptThread { let (ipc_devtools_sender, ipc_devtools_receiver) = ipc::channel().unwrap(); let devtools_port = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_devtools_receiver); - // Ask the router to proxy IPC messages from the image cache thread to us. - let (ipc_image_cache_channel, ipc_image_cache_port) = ipc::channel().unwrap(); - let image_cache_port = - ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_image_cache_port); - let (timer_event_chan, timer_event_port) = channel(); // Ask the router to proxy IPC messages from the control port to us. @@ -658,6 +655,8 @@ impl ScriptThread { let boxed_script_sender = MainThreadScriptChan(chan.clone()).clone(); + let (image_cache_channel, image_cache_port) = channel(); + ScriptThread { documents: DOMRefCell::new(Documents::new()), browsing_contexts: DOMRefCell::new(HashMap::new()), @@ -666,7 +665,7 @@ impl ScriptThread { job_queue_map: Rc::new(JobQueue::new()), image_cache_thread: state.image_cache_thread, - image_cache_channel: ImageCacheChan(ipc_image_cache_channel), + image_cache_channel: image_cache_channel, image_cache_port: image_cache_port, resource_threads: state.resource_threads, @@ -1111,8 +1110,11 @@ impl ScriptThread { } } - fn handle_msg_from_image_cache(&self, msg: ImageCacheResult) { - msg.responder.unwrap().respond(msg.image_response); + fn handle_msg_from_image_cache(&self, (id, response): (PipelineId, PendingImageResponse)) { + let window = self.documents.borrow().find_window(id); + if let Some(ref window) = window { + window.pending_image_notification(response); + } } fn handle_webdriver_msg(&self, pipeline_id: PipelineId, msg: WebDriverScriptCommand) { diff --git a/components/script_layout_interface/lib.rs b/components/script_layout_interface/lib.rs index 87b76763d7d..1793e06909d 100644 --- a/components/script_layout_interface/lib.rs +++ b/components/script_layout_interface/lib.rs @@ -43,6 +43,9 @@ use canvas_traits::CanvasMsg; use core::nonzero::NonZero; use ipc_channel::ipc::IpcSender; use libc::c_void; +use net_traits::image_cache_thread::PendingImageId; +use script_traits::UntrustedNodeAddress; +use servo_url::ServoUrl; use std::sync::atomic::AtomicIsize; use style::data::ElementData; @@ -137,3 +140,18 @@ pub fn is_image_data(uri: &str) -> bool { static TYPES: &'static [&'static str] = &["data:image/png", "data:image/gif", "data:image/jpeg"]; TYPES.iter().any(|&type_| uri.starts_with(type_)) } + +/// Whether the pending image needs to be fetched or is waiting on an existing fetch. +pub enum PendingImageState { + Unrequested(ServoUrl), + PendingResponse, +} + +/// The data associated with an image that is not yet present in the image cache. +/// Used by the script thread to hold on to DOM elements that need to be repainted +/// when an image fetch is complete. +pub struct PendingImage { + pub state: PendingImageState, + pub node: UntrustedNodeAddress, + pub id: PendingImageId, +} diff --git a/components/script_layout_interface/rpc.rs b/components/script_layout_interface/rpc.rs index 2fb75f6b959..78e99571ee7 100644 --- a/components/script_layout_interface/rpc.rs +++ b/components/script_layout_interface/rpc.rs @@ -2,6 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +use PendingImage; use app_units::Au; use euclid::point::Point2D; use euclid::rect::Rect; @@ -37,7 +38,8 @@ pub trait LayoutRPC { fn offset_parent(&self) -> OffsetParentResponse; /// Query layout for the resolve values of the margin properties for an element. fn margin_style(&self) -> MarginStyleResponse; - + /// Requests the list of not-yet-loaded images that were encountered in the last reflow. + fn pending_images(&self) -> Vec; fn nodes_from_point(&self, page_point: Point2D, client_point: Point2D) -> Vec; fn text_index(&self) -> TextIndexResponse; diff --git a/components/script_plugins/unrooted_must_root.rs b/components/script_plugins/unrooted_must_root.rs index 660a0c58781..ad74f6c4b8f 100644 --- a/components/script_plugins/unrooted_must_root.rs +++ b/components/script_plugins/unrooted_must_root.rs @@ -52,6 +52,7 @@ fn is_unrooted_ty(cx: &LateContext, ty: &ty::TyS, in_new_function: bool) -> bool } else if match_def_path(cx, did.did, &["core", "cell", "Ref"]) || match_def_path(cx, did.did, &["core", "cell", "RefMut"]) || match_def_path(cx, did.did, &["core", "slice", "Iter"]) + || match_def_path(cx, did.did, &["std", "collections", "hash", "map", "Entry"]) || match_def_path(cx, did.did, &["std", "collections", "hash", "map", "OccupiedEntry"]) || match_def_path(cx, did.did, &["std", "collections", "hash", "map", "VacantEntry"]) { // Structures which are semantically similar to an &ptr. diff --git a/components/servo/lib.rs b/components/servo/lib.rs index afda35f1582..69b9bbeceb8 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -281,8 +281,7 @@ fn create_constellation(user_agent: Cow<'static, str>, devtools_chan.clone(), time_profiler_chan.clone(), config_dir); - let image_cache_thread = new_image_cache_thread(public_resource_threads.sender(), - webrender_api_sender.create_api()); + let image_cache_thread = new_image_cache_thread(webrender_api_sender.create_api()); let font_cache_thread = FontCacheThread::new(public_resource_threads.sender(), Some(webrender_api_sender.create_api())); diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html.ini deleted file mode 100644 index 396d39eeb09..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[drawimage_html_image_1.html] - type: reftest - disabled: see _mozilla diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html.ini deleted file mode 100644 index 4dcc60a0824..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[drawimage_html_image_10.html] - type: reftest - disabled: see _mozilla diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html.ini deleted file mode 100644 index f26feab7168..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[drawimage_html_image_11.html] - type: reftest - disabled: see _mozilla diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html.ini deleted file mode 100644 index 8eb54f816a9..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[drawimage_html_image_12.html] - type: reftest - disabled: see _mozilla diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html.ini deleted file mode 100644 index 856288b3d70..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[drawimage_html_image_13.html] - type: reftest - disabled: see _mozilla diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html.ini deleted file mode 100644 index 3ba92dd7d75..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[drawimage_html_image_2.html] - type: reftest - disabled: see _mozilla diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html.ini deleted file mode 100644 index 277d697527d..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[drawimage_html_image_3.html] - type: reftest - disabled: see _mozilla diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html.ini deleted file mode 100644 index 6ced959e23b..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[drawimage_html_image_4.html] - type: reftest - disabled: see _mozilla diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html.ini deleted file mode 100644 index 8cd1d610a01..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[drawimage_html_image_5.html] - type: reftest - disabled: see _mozilla diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html.ini deleted file mode 100644 index 8d2dfb702fb..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[drawimage_html_image_6.html] - type: reftest - disabled: see _mozilla diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html.ini deleted file mode 100644 index e24ff5c2fae..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[drawimage_html_image_7.html] - type: reftest - disabled: see _mozilla diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html.ini deleted file mode 100644 index 13688c76798..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[drawimage_html_image_8.html] - type: reftest - disabled: see _mozilla diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9.html.ini deleted file mode 100644 index 0cf6369939f..00000000000 --- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[drawimage_html_image_9.html] - type: reftest - disabled: see _mozilla diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index edbb4f2386e..bca20e4f735 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -130647,11 +130647,11 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html": [ - "8cff9e2344fbbe84b2ce315f260e69c6ad92dd51", + "461f306d3083248243d7e5a4aac376be59adefd3", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html": [ - "ca239d9a40410e4331863f2d11daabae3e590af3", + "970d92ab928086b48dce22c2a873a0e5adde1355", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10_ref.html": [ @@ -130659,7 +130659,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html": [ - "04415ce09b3b52561f5d179e7a6a8050199189c9", + "9faf39bcfb3ed5f86b78fabcb8566386ca519b6e", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11_ref.html": [ @@ -130667,7 +130667,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html": [ - "efee9a63933437315c9adec573113d8dee786659", + "8f4e8952d6959d7ad3c32ca02a6b91eb29c9bc28", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12_ref.html": [ @@ -130687,7 +130687,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html": [ - "b03f11e43e455e2d1f453ecc2a4de00e00005ebc", + "310d7bf19699754d6248599820e17850f0a8de2c", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2_ref.html": [ @@ -130695,7 +130695,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html": [ - "134fa026f56880acb111a8e91efe3a8bcc03bb6b", + "368a40dff341c6677a23c5ffeb4a69dc447360e6", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3_ref.html": [ @@ -130703,7 +130703,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html": [ - "5d7254f7bbc8c6feffb2a4fcfeecb06fe6ed3d6c", + "a0aa4f32aeb8b0b4178b0efa1446455387f281eb", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4_ref.html": [ @@ -130711,7 +130711,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html": [ - "6a02b961aa4a5eb013366cd85dbea06fd2c08da0", + "7d92f1f10e7bc29564d7a8b8e49d42f552ad0782", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5_ref.html": [ @@ -130719,7 +130719,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html": [ - "ce7cbe3b76274177301acca263f7cdd6c4033aa1", + "c60e69eaf1e92c6e2cd53936e52683054fbddd32", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6_ref.html": [ @@ -130727,7 +130727,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html": [ - "f5469ba799e0845bc59766d76713ee052f3e6966", + "d305b82f0329bbedd5e950287619e8a7dc926536", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7_ref.html": [ @@ -130735,7 +130735,7 @@ "support" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html": [ - "37958b2fb55bd90567c7c0b64b599165b20992b9", + "00a95cb5ad9f256101ea65f296a201d7074ef9f5", "reftest" ], "2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8_ref.html": [ @@ -215651,7 +215651,7 @@ "support" ], "webgl/conformance-1.0.3/resources/js-test-pre.js": [ - "0ea0d3b945ac49d9a98c39788b2bc18c82de762a", + "23bc989f25ee5371a45762bac36c260d230001ca", "support" ], "webgl/conformance-1.0.3/resources/js-test-style.css": [ @@ -215687,7 +215687,7 @@ "support" ], "webgl/tools/js-test-pre.patch": [ - "b903fa3810ba7538a735d4126d20364d285b88cc", + "9d692bf9bf2b37385f1193855e2605573af8249e", "support" ], "webgl/tools/unit.patch": [ diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini index 1435a098642..2aa027d16bf 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini @@ -1,8 +1,5 @@ [basic.html] type: testharness - [] - expected: FAIL - [] expected: FAIL diff --git a/tests/wpt/metadata/old-tests/submission/Opera/script_scheduling/028.html.ini b/tests/wpt/metadata/old-tests/submission/Opera/script_scheduling/028.html.ini index 85e7b6ce91b..52f13d00053 100644 --- a/tests/wpt/metadata/old-tests/submission/Opera/script_scheduling/028.html.ini +++ b/tests/wpt/metadata/old-tests/submission/Opera/script_scheduling/028.html.ini @@ -1,4 +1,5 @@ [028.html] + type: testharness [ scheduler: javascript: URL] expected: FAIL diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/buffers/buffer-data-array-buffer-delete.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/buffers/buffer-data-array-buffer-delete.html.ini index a6a2d5407ce..bc630e5579b 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/buffers/buffer-data-array-buffer-delete.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/buffers/buffer-data-array-buffer-delete.html.ini @@ -7,3 +7,6 @@ [WebGL test #1: gl should be non-null. Was null] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/misc/shader-precision-format.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/misc/shader-precision-format.html.ini index 1de68eb69bb..7ebc47ba3e6 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/misc/shader-precision-format.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/misc/shader-precision-format.html.ini @@ -40,3 +40,6 @@ [WebGL test #12: gl.getShaderPrecisionFormat(gl.HIGH_INT, gl.VERTEX_SHADER) threw exception TypeError: gl.getShaderPrecisionFormat is not a function] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/abs/abs_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/abs/abs_001_to_006.html.ini index b20c90fdcc4..991e156f928 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/abs/abs_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/abs/abs_001_to_006.html.ini @@ -1,5 +1,9 @@ [abs_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: abs_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/acos/acos_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/acos/acos_001_to_006.html.ini index 329ebe92cd7..939910f1c1b 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/acos/acos_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/acos/acos_001_to_006.html.ini @@ -1,5 +1,9 @@ [acos_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: acos_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/all/all_001_to_004.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/all/all_001_to_004.html.ini index ef08d504340..acffbf3016b 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/all/all_001_to_004.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/all/all_001_to_004.html.ini @@ -1,5 +1,9 @@ [all_001_to_004.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: all_001_to_004.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/any/any_001_to_004.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/any/any_001_to_004.html.ini index a39d7edb2d1..d09a1d94e36 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/any/any_001_to_004.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/any/any_001_to_004.html.ini @@ -1,5 +1,9 @@ [any_001_to_004.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: any_001_to_004.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/array/array_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/array/array_001_to_006.html.ini index 1ef57e20b58..25ecb8e139d 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/array/array_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/array/array_001_to_006.html.ini @@ -1,5 +1,9 @@ [array_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: array_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/asin/asin_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/asin/asin_001_to_006.html.ini index 3612a1d8936..0d292576fa3 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/asin/asin_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/asin/asin_001_to_006.html.ini @@ -1,5 +1,9 @@ [asin_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: asin_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_001_to_008.html.ini index 1ee5087e713..c7027a0105e 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_001_to_008.html.ini @@ -1,5 +1,9 @@ [atan_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: atan_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_009_to_012.html.ini index 6c3e3baf8a8..b9ddf6f5296 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_009_to_012.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_009_to_012.html.ini @@ -1,5 +1,9 @@ [atan_009_to_012.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: atan_009_to_012.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_001_to_008.html.ini index e10d0acdb9a..d214b0ca531 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_001_to_008.html.ini @@ -1,5 +1,9 @@ [biConstants_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: biConstants_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_009_to_016.html.ini index bb816c8dfdd..e34d61f3adc 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_009_to_016.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_009_to_016.html.ini @@ -1,5 +1,9 @@ [biConstants_009_to_016.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: biConstants_009_to_016.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html.ini index 48123c753d3..5717ac47d9a 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html.ini @@ -1,5 +1,9 @@ [biuDepthRange_001_to_002.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: biuDepthRange_001_to_002.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/ceil/ceil_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/ceil/ceil_001_to_006.html.ini index 10c41ca64f4..2a5ca589aad 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/ceil/ceil_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/ceil/ceil_001_to_006.html.ini @@ -1,5 +1,9 @@ [ceil_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: ceil_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/clamp/clamp_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/clamp/clamp_001_to_006.html.ini index 0e3547feaa4..dcf4ec23f80 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/clamp/clamp_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/clamp/clamp_001_to_006.html.ini @@ -1,5 +1,9 @@ [clamp_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: clamp_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_001_to_008.html.ini index dfac4fee4fa..6b1750cfd72 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_001_to_008.html.ini @@ -1,5 +1,9 @@ [control_flow_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: control_flow_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_009_to_010.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_009_to_010.html.ini index 192cf2bbd56..0e8e3b3b1ea 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_009_to_010.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_009_to_010.html.ini @@ -1,5 +1,9 @@ [control_flow_009_to_010.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: control_flow_009_to_010.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cos/cos_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cos/cos_001_to_006.html.ini index 04f57367e3b..0d4560efeca 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cos/cos_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cos/cos_001_to_006.html.ini @@ -1,5 +1,9 @@ [cos_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: cos_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cross/cross_001_to_002.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cross/cross_001_to_002.html.ini index 55c939623b4..7f59ec33c9b 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cross/cross_001_to_002.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cross/cross_001_to_002.html.ini @@ -1,5 +1,9 @@ [cross_001_to_002.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: cross_001_to_002.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/default/default_001_to_001.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/default/default_001_to_001.html.ini index 88e2cef91e6..61ff742b902 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/default/default_001_to_001.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/default/default_001_to_001.html.ini @@ -1,5 +1,9 @@ [default_001_to_001.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: default_001_to_001.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/degrees/degrees_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/degrees/degrees_001_to_006.html.ini index cf631ad9f6b..aacef53656e 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/degrees/degrees_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/degrees/degrees_001_to_006.html.ini @@ -1,5 +1,9 @@ [degrees_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: degrees_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/discard/discard_001_to_002.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/discard/discard_001_to_002.html.ini index 4da12ab1e73..e0dbd874347 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/discard/discard_001_to_002.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/discard/discard_001_to_002.html.ini @@ -1,5 +1,9 @@ [discard_001_to_002.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: discard_001_to_002.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/distance/distance_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/distance/distance_001_to_006.html.ini index 4e97077ec26..2ca71664454 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/distance/distance_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/distance/distance_001_to_006.html.ini @@ -1,5 +1,9 @@ [distance_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: distance_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/dot/dot_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/dot/dot_001_to_006.html.ini index 9a72122da3f..57962188759 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/dot/dot_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/dot/dot_001_to_006.html.ini @@ -1,5 +1,9 @@ [dot_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: dot_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_001_to_008.html.ini index 3b482eee638..03bb46b5056 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_001_to_008.html.ini @@ -1,5 +1,9 @@ [equal_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: equal_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_009_to_012.html.ini index 9ccc1eb336d..0c5afbe9477 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_009_to_012.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_009_to_012.html.ini @@ -1,5 +1,9 @@ [equal_009_to_012.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: equal_009_to_012.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_001_to_008.html.ini index 583d6898cb3..6a6c2f47a3d 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_001_to_008.html.ini @@ -1,5 +1,9 @@ [exp_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: exp_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_009_to_012.html.ini index 1ecd37cd78f..0b407e8700d 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_009_to_012.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_009_to_012.html.ini @@ -1,5 +1,9 @@ [exp_009_to_012.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: exp_009_to_012.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_001_to_008.html.ini index 6e41d93c519..3cf484ada35 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_001_to_008.html.ini @@ -1,5 +1,9 @@ [exp2_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: exp2_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_009_to_012.html.ini index ce7d283617b..80aa3ac40ab 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_009_to_012.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_009_to_012.html.ini @@ -1,5 +1,9 @@ [exp2_009_to_012.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: exp2_009_to_012.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/faceforward/faceforward_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/faceforward/faceforward_001_to_006.html.ini index 7e70f85197c..b7665786180 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/faceforward/faceforward_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/faceforward/faceforward_001_to_006.html.ini @@ -1,5 +1,9 @@ [faceforward_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: faceforward_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/floor/floor_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/floor/floor_001_to_006.html.ini index 01bd1290f33..3fe704417b3 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/floor/floor_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/floor/floor_001_to_006.html.ini @@ -1,5 +1,9 @@ [floor_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: floor_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/fract/fract_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/fract/fract_001_to_006.html.ini index c04e0bd1d38..2d89e08f05f 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/fract/fract_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/fract/fract_001_to_006.html.ini @@ -1,5 +1,9 @@ [fract_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: fract_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html.ini index c08348564c1..78ccd712f0d 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html.ini @@ -1,5 +1,9 @@ [gl_FragCoord_001_to_003.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: gl_FragCoord_001_to_003.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html.ini index 363867c8ee4..643f8efc548 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html.ini @@ -1,5 +1,9 @@ [gl_FrontFacing_001_to_001.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: gl_FrontFacing_001_to_001.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html.ini index f41a9ac526b..d4f5b18aaff 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html.ini @@ -1,5 +1,9 @@ [greaterThan_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: greaterThan_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html.ini index 304f3f41296..c0829c9e0ad 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html.ini @@ -1,5 +1,9 @@ [greaterThanEqual_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: greaterThanEqual_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html.ini index 4c328cddc5f..450ca50d5a3 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html.ini @@ -1,5 +1,9 @@ [inversesqrt_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: inversesqrt_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/length/length_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/length/length_001_to_006.html.ini index a6226a4041b..8176f9f8529 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/length/length_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/length/length_001_to_006.html.ini @@ -1,5 +1,9 @@ [length_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: length_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThan/lessThan_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThan/lessThan_001_to_008.html.ini index e78e37cddf1..9289af4daa9 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThan/lessThan_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThan/lessThan_001_to_008.html.ini @@ -1,5 +1,9 @@ [lessThan_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: lessThan_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html.ini index 5d5f334bcbd..c183c8f0b96 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html.ini @@ -1,5 +1,9 @@ [lessThanEqual_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: lessThanEqual_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_001_to_008.html.ini index e7904a59644..b372812e6dd 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_001_to_008.html.ini @@ -1,5 +1,9 @@ [log_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: log_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_009_to_012.html.ini index f8410ce0be6..7c81898b942 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_009_to_012.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_009_to_012.html.ini @@ -1,5 +1,9 @@ [log_009_to_012.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: log_009_to_012.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_001_to_008.html.ini index 0381a266892..f65c1dc80f6 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_001_to_008.html.ini @@ -1,5 +1,9 @@ [log2_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: log2_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_009_to_012.html.ini index 025e65b4175..00de46eef34 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_009_to_012.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_009_to_012.html.ini @@ -1,5 +1,9 @@ [log2_009_to_012.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: log2_009_to_012.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_001_to_008.html.ini index 5c5ffe6c19f..8f8aa834907 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_001_to_008.html.ini @@ -1,5 +1,9 @@ [mat_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: mat_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_009_to_016.html.ini index 18cf0900239..0b0bb59cdea 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_009_to_016.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_009_to_016.html.ini @@ -1,5 +1,9 @@ [mat_009_to_016.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: mat_009_to_016.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_017_to_024.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_017_to_024.html.ini index d6d9496a55f..728a9c84d6e 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_017_to_024.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_017_to_024.html.ini @@ -1,5 +1,9 @@ [mat_017_to_024.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: mat_017_to_024.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_025_to_032.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_025_to_032.html.ini index 0f2c83cf0fd..4aaad2d5851 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_025_to_032.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_025_to_032.html.ini @@ -1,5 +1,9 @@ [mat_025_to_032.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: mat_025_to_032.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_033_to_040.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_033_to_040.html.ini index 2b8d6fb8b1b..e12b8cbd7b2 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_033_to_040.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_033_to_040.html.ini @@ -1,5 +1,9 @@ [mat_033_to_040.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: mat_033_to_040.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_041_to_046.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_041_to_046.html.ini index 368e3acebce..08f72c5b14d 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_041_to_046.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_041_to_046.html.ini @@ -1,5 +1,9 @@ [mat_041_to_046.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: mat_041_to_046.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat3/mat3_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat3/mat3_001_to_006.html.ini index 212454d0d2d..886c8cee8dd 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat3/mat3_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat3/mat3_001_to_006.html.ini @@ -1,5 +1,9 @@ [mat3_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: mat3_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html.ini index 9d131e82782..7fb01b76836 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html.ini @@ -1,5 +1,9 @@ [matrixCompMult_001_to_004.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: matrixCompMult_001_to_004.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/max/max_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/max/max_001_to_006.html.ini index 1d081a0f948..c089f89a0a8 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/max/max_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/max/max_001_to_006.html.ini @@ -1,5 +1,9 @@ [max_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: max_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/min/min_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/min/min_001_to_006.html.ini index 53bf0504f4a..399fc5e9b0f 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/min/min_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/min/min_001_to_006.html.ini @@ -1,5 +1,9 @@ [min_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: min_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mix/mix_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mix/mix_001_to_006.html.ini index ca4ef06c413..7bbae35964c 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mix/mix_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mix/mix_001_to_006.html.ini @@ -1,5 +1,9 @@ [mix_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: mix_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mod/mod_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mod/mod_001_to_008.html.ini index 53894c84fef..6b88e1dd009 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mod/mod_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mod/mod_001_to_008.html.ini @@ -1,5 +1,9 @@ [mod_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: mod_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/normalize/normalize_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/normalize/normalize_001_to_006.html.ini index deb07aedc87..46b02c289e1 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/normalize/normalize_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/normalize/normalize_001_to_006.html.ini @@ -1,5 +1,9 @@ [normalize_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: normalize_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/not/not_001_to_004.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/not/not_001_to_004.html.ini index 39daeaaaaf9..72d68a305a7 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/not/not_001_to_004.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/not/not_001_to_004.html.ini @@ -1,5 +1,9 @@ [not_001_to_004.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: not_001_to_004.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_001_to_008.html.ini index 1e7bbf9b4ca..eee2353635d 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_001_to_008.html.ini @@ -1,5 +1,9 @@ [notEqual_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: notEqual_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_009_to_012.html.ini index ed4d8d18159..1d858e20d6f 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_009_to_012.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_009_to_012.html.ini @@ -1,5 +1,9 @@ [notEqual_009_to_012.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: notEqual_009_to_012.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_001_to_008.html.ini index a7bf41d95f1..2c7e690cac4 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_001_to_008.html.ini @@ -1,5 +1,9 @@ [operators_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: operators_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_009_to_016.html.ini index 55d4d1420a4..86820f04f33 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_009_to_016.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_009_to_016.html.ini @@ -1,5 +1,9 @@ [operators_009_to_016.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: operators_009_to_016.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_017_to_024.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_017_to_024.html.ini index 50e76394ae4..09d3f849088 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_017_to_024.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_017_to_024.html.ini @@ -1,5 +1,9 @@ [operators_017_to_024.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: operators_017_to_024.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_025_to_026.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_025_to_026.html.ini index e92cdbf063f..e9de65f960e 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_025_to_026.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_025_to_026.html.ini @@ -1,5 +1,9 @@ [operators_025_to_026.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: operators_025_to_026.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_001_to_008.html.ini index c9bd6922deb..01dd0158385 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_001_to_008.html.ini @@ -1,5 +1,9 @@ [pow_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: pow_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_009_to_016.html.ini index 3587a2c1dcc..55684a86cff 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_009_to_016.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_009_to_016.html.ini @@ -1,5 +1,9 @@ [pow_009_to_016.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: pow_009_to_016.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_017_to_024.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_017_to_024.html.ini index 6ea71a428ae..e0e26df362d 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_017_to_024.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_017_to_024.html.ini @@ -1,5 +1,9 @@ [pow_017_to_024.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: pow_017_to_024.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/radians/radians_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/radians/radians_001_to_006.html.ini index 6b747a87714..c3811e3eeab 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/radians/radians_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/radians/radians_001_to_006.html.ini @@ -1,5 +1,9 @@ [radians_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: radians_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/reflect/reflect_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/reflect/reflect_001_to_006.html.ini index 733408d14bd..f728177114f 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/reflect/reflect_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/reflect/reflect_001_to_006.html.ini @@ -1,5 +1,9 @@ [reflect_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: reflect_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/refract/refract_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/refract/refract_001_to_006.html.ini index 8e854363f60..0f31e5f06ba 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/refract/refract_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/refract/refract_001_to_006.html.ini @@ -1,5 +1,9 @@ [refract_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: refract_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sign/sign_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sign/sign_001_to_006.html.ini index 5a4081fe508..1bc5d46cabe 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sign/sign_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sign/sign_001_to_006.html.ini @@ -1,5 +1,9 @@ [sign_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: sign_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sin/sin_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sin/sin_001_to_006.html.ini index 1ac344036b9..440663f97be 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sin/sin_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sin/sin_001_to_006.html.ini @@ -1,5 +1,9 @@ [sin_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: sin_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html.ini index 3d62449ab8c..ed56c5f75f4 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html.ini @@ -1,5 +1,9 @@ [smoothstep_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: smoothstep_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sqrt/sqrt_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sqrt/sqrt_001_to_006.html.ini index d6fbd48e995..1b06e03cfdd 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sqrt/sqrt_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sqrt/sqrt_001_to_006.html.ini @@ -1,5 +1,9 @@ [sqrt_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: sqrt_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/step/step_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/step/step_001_to_006.html.ini index 8c6954b29f9..e9a3a5267a4 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/step/step_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/step/step_001_to_006.html.ini @@ -1,5 +1,9 @@ [step_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: step_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_001_to_008.html.ini index 3ab399b47d5..867ebd35e8f 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_001_to_008.html.ini @@ -1,5 +1,9 @@ [struct_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: struct_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_009_to_016.html.ini index d39da1e71d5..7ac9f618c43 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_009_to_016.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_009_to_016.html.ini @@ -1,5 +1,9 @@ [struct_009_to_016.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: struct_009_to_016.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_017_to_024.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_017_to_024.html.ini index 61d8e4ea90a..dcbc45fc798 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_017_to_024.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_017_to_024.html.ini @@ -1,5 +1,9 @@ [struct_017_to_024.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: struct_017_to_024.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_025_to_032.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_025_to_032.html.ini index 9a243156e1d..459fbcb356e 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_025_to_032.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_025_to_032.html.ini @@ -1,5 +1,9 @@ [struct_025_to_032.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: struct_025_to_032.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_033_to_040.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_033_to_040.html.ini index a94238d5616..ab2a830136b 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_033_to_040.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_033_to_040.html.ini @@ -1,5 +1,9 @@ [struct_033_to_040.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: struct_033_to_040.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_041_to_048.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_041_to_048.html.ini index c4612b7879b..36f905582cf 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_041_to_048.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_041_to_048.html.ini @@ -1,5 +1,9 @@ [struct_041_to_048.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: struct_041_to_048.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_049_to_056.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_049_to_056.html.ini index 7be1b66d1ec..568cac3d864 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_049_to_056.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_049_to_056.html.ini @@ -1,5 +1,9 @@ [struct_049_to_056.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: struct_049_to_056.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html.ini index ae075bf497c..26448587654 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html.ini @@ -1,5 +1,9 @@ [swizzlers_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html.ini index b80fe0a03bf..b3cbdda6f25 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html.ini @@ -1,5 +1,9 @@ [swizzlers_009_to_016.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_009_to_016.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html.ini index 0e65da45c2a..f1a17ff0a83 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html.ini @@ -1,5 +1,9 @@ [swizzlers_017_to_024.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_017_to_024.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html.ini index 07b41cced8d..b93a1af2ebc 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html.ini @@ -1,5 +1,9 @@ [swizzlers_025_to_032.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_025_to_032.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html.ini index 2dc0c2dfb0a..158c52433e3 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html.ini @@ -1,5 +1,9 @@ [swizzlers_033_to_040.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_033_to_040.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html.ini index 76d754b7a3e..d9d19cab206 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html.ini @@ -1,5 +1,9 @@ [swizzlers_041_to_048.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_041_to_048.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html.ini index d9fd6f726bf..34c0c72fce0 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html.ini @@ -1,5 +1,9 @@ [swizzlers_049_to_056.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_049_to_056.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html.ini index c981dafbe11..6f76695cbf7 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html.ini @@ -1,5 +1,9 @@ [swizzlers_057_to_064.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_057_to_064.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html.ini index fc8b775c9f1..814126f23b6 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html.ini @@ -1,5 +1,9 @@ [swizzlers_065_to_072.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_065_to_072.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html.ini index 6a13e876e08..eddaa83fb8a 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html.ini @@ -1,5 +1,9 @@ [swizzlers_073_to_080.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_073_to_080.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html.ini index 08a94f1d235..ca0d202c379 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html.ini @@ -1,5 +1,9 @@ [swizzlers_081_to_088.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_081_to_088.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html.ini index ded833c7293..8fda382bd99 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html.ini @@ -1,5 +1,9 @@ [swizzlers_089_to_096.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_089_to_096.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html.ini index 1586a5cbfb6..ed1287b4f40 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html.ini @@ -1,5 +1,9 @@ [swizzlers_097_to_104.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_097_to_104.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html.ini index a2a2f40a675..596c2b6c26c 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html.ini @@ -1,5 +1,9 @@ [swizzlers_105_to_112.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_105_to_112.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html.ini index 7422017f264..0ecc54b5575 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html.ini @@ -1,5 +1,9 @@ [swizzlers_113_to_120.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: swizzlers_113_to_120.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/tan/tan_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/tan/tan_001_to_006.html.ini index a0c902018d7..23bfbc539ef 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/tan/tan_001_to_006.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/tan/tan_001_to_006.html.ini @@ -1,5 +1,9 @@ [tan_001_to_006.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: tan_001_to_006.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_001_to_008.html.ini index f311483f8e2..d969967fe50 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_001_to_008.html.ini @@ -1,5 +1,9 @@ [vec_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: vec_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_009_to_016.html.ini index a2597350327..b22ea568647 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_009_to_016.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_009_to_016.html.ini @@ -1,5 +1,9 @@ [vec_009_to_016.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: vec_009_to_016.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_017_to_018.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_017_to_018.html.ini index 82b59b6365f..f2211b359d7 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_017_to_018.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_017_to_018.html.ini @@ -1,5 +1,9 @@ [vec_017_to_018.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: vec_017_to_018.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec3/vec3_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec3/vec3_001_to_008.html.ini index 6c4611116ea..5779234d80d 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec3/vec3_001_to_008.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec3/vec3_001_to_008.html.ini @@ -1,5 +1,9 @@ [vec3_001_to_008.html] type: testharness + expected: ERROR [WebGL GLSL conformance test: vec3_001_to_008.html] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/renderbuffers/framebuffer-state-restoration.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/renderbuffers/framebuffer-state-restoration.html.ini index c3b2db370fb..5ce1ded25ed 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/renderbuffers/framebuffer-state-restoration.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/renderbuffers/framebuffer-state-restoration.html.ini @@ -4,3 +4,6 @@ [WebGL test #0: Unable to fetch WebGL rendering context for Canvas] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-switch.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-switch.html.ini index 096d0cf2f7b..b0baea6f6b0 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-switch.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-switch.html.ini @@ -1,5 +1,9 @@ [framebuffer-switch.html] type: testharness + expected: ERROR [WebGL framebuffer switching conformance test.] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-texture-switch.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-texture-switch.html.ini index bdc94b78aae..af5245bcb8e 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-texture-switch.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-texture-switch.html.ini @@ -1,5 +1,9 @@ [framebuffer-texture-switch.html] type: testharness + expected: ERROR [WebGL framebuffer texture attachment switching conformance test.] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/many-draw-calls.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/many-draw-calls.html.ini new file mode 100644 index 00000000000..a37a8723e08 --- /dev/null +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/many-draw-calls.html.ini @@ -0,0 +1,6 @@ +[many-draw-calls.html] + type: testharness + expected: TIMEOUT + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/multisample-corruption.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/multisample-corruption.html.ini index 0992122040d..a4802bc416d 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/multisample-corruption.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/multisample-corruption.html.ini @@ -4,3 +4,6 @@ [WebGL test #0: Unable to fetch WebGL rendering context for Canvas] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/point-with-gl-pointcoord-in-fragment-shader.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/point-with-gl-pointcoord-in-fragment-shader.html.ini index 0c1f91ec0a2..637b0ecffe1 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/point-with-gl-pointcoord-in-fragment-shader.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/point-with-gl-pointcoord-in-fragment-shader.html.ini @@ -1,5 +1,6 @@ [point-with-gl-pointcoord-in-fragment-shader.html] type: testharness + expected: ERROR [WebGL test #0: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-object-get-calls.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-object-get-calls.html.ini index 1fbcfd20375..fa37c3d4ea7 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-object-get-calls.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-object-get-calls.html.ini @@ -1,5 +1,6 @@ [gl-object-get-calls.html] type: testharness + expected: ERROR [WebGL test #0: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/copy-tex-image-and-sub-image-2d.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/copy-tex-image-and-sub-image-2d.html.ini index 5c34865d346..95ccc65d990 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/copy-tex-image-and-sub-image-2d.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/copy-tex-image-and-sub-image-2d.html.ini @@ -1,5 +1,9 @@ [copy-tex-image-and-sub-image-2d.html] type: testharness + expected: ERROR [WebGL test #0: Unable to fetch WebGL rendering context for Canvas] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-pixelstorei.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-pixelstorei.html.ini index c74db002eec..efae6fb14de 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-pixelstorei.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-pixelstorei.html.ini @@ -1,5 +1,6 @@ [gl-pixelstorei.html] type: testharness + expected: ERROR [WebGL test #0: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-teximage.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-teximage.html.ini new file mode 100644 index 00000000000..24192a4c379 --- /dev/null +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-teximage.html.ini @@ -0,0 +1,71 @@ +[gl-teximage.html] + type: testharness + [WebGL test #2: at (0, 15) expected: 0,0,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #3: at (128, 15) expected: 255,0,255,255 was 255,255,0,255] + expected: FAIL + + [WebGL test #4: at (255, 15) expected: 0,0,255,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #5: at (0, 8) expected: 128,128,128,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #6: at (128, 8) expected: 255,255,255,255 was 128,128,128,255] + expected: FAIL + + [WebGL test #9: at (128, 0) expected: 255,255,0,255 was 0,255,255,255] + expected: FAIL + + [WebGL test #10: at (255, 0) expected: 0,255,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #38: Half the pixels in channel 0 should be >= 128,128,128. found 25%] + expected: FAIL + + [WebGL test #40: Half the pixels in channel 1 should be >= 128,128,128. found 25%] + expected: FAIL + + [WebGL test #42: Half the pixels in channel 2 should be >= 128,128,128. found 25%] + expected: FAIL + + [WebGL test #52: at (0, 0) expected: 255,255,255,127 was 128,128,128,128] + expected: FAIL + + [WebGL test #54: at (0, 0) expected: 127,127,127,127 was 64,64,64,128] + expected: FAIL + + [WebGL test #59: at (128, 15) expected: 255,255,0,255 was 255,255,255,255] + expected: FAIL + + [WebGL test #60: at (255, 15) expected: 255,0,0,255 was 0,255,255,255] + expected: FAIL + + [WebGL test #61: at (0, 8) expected: 255,0,255,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #62: at (128, 8) expected: 255,0,0,255 was 255,0,255,255] + expected: FAIL + + [WebGL test #63: at (255, 8) expected: 0,255,0,255 was 255,255,0,255] + expected: FAIL + + [WebGL test #64: at (0, 0) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #65: at (128, 0) expected: 0,0,255,255 was 255,0,255,255] + expected: FAIL + + [WebGL test #66: at (255, 0) expected: 255,0,0,255 was 0,0,0,255] + expected: FAIL + + [WebGL test #71: at (128, 8) expected: 15,121,0,255 was 133,0,255,255] + expected: FAIL + + [WebGL test #74: at (128, 8) expected: 0,0,255,255 was 1,255,255,255] + expected: FAIL + + [WebGL test #76: at (128, 8) expected: 0,0,255,255 was 1,255,255,255] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgb565.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgb565.html.ini new file mode 100644 index 00000000000..1d20e0565e2 --- /dev/null +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgb565.html.ini @@ -0,0 +1,6 @@ +[tex-image-and-sub-image-2d-with-canvas-rgb565.html] + type: testharness + expected: ERROR + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba4444.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba4444.html.ini new file mode 100644 index 00000000000..00ae17a1715 --- /dev/null +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba4444.html.ini @@ -0,0 +1,6 @@ +[tex-image-and-sub-image-2d-with-canvas-rgba4444.html] + type: testharness + expected: ERROR + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba5551.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba5551.html.ini new file mode 100644 index 00000000000..5adc2092e21 --- /dev/null +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba5551.html.ini @@ -0,0 +1,6 @@ +[tex-image-and-sub-image-2d-with-canvas-rgba5551.html] + type: testharness + expected: ERROR + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas.html.ini new file mode 100644 index 00000000000..468299a537d --- /dev/null +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas.html.ini @@ -0,0 +1,6 @@ +[tex-image-and-sub-image-2d-with-canvas.html] + type: testharness + expected: ERROR + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgb565.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgb565.html.ini new file mode 100644 index 00000000000..479a6654f1f --- /dev/null +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgb565.html.ini @@ -0,0 +1,14 @@ +[tex-image-and-sub-image-2d-with-image-data-rgb565.html] + type: testharness + [WebGL test #4: at (0, 0) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #7: at (0, 1) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #12: at (0, 0) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #15: at (0, 1) expected: 0,0,0,255 was 0,255,0,255] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-svg-image.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-svg-image.html.ini index c91eba5318b..e28d29a1447 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-svg-image.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-svg-image.html.ini @@ -4,3 +4,6 @@ [WebGL test #0: at (4, 4) expected: 0,255,0 was 0,0,0] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgb565.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgb565.html.ini index 2a874e9abc7..c1aaae7a577 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgb565.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgb565.html.ini @@ -1,3 +1,6 @@ [tex-image-and-sub-image-2d-with-video-rgb565.html] type: testharness expected: TIMEOUT + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba4444.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba4444.html.ini index 9be75537245..d64b5a2230b 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba4444.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba4444.html.ini @@ -1,3 +1,6 @@ [tex-image-and-sub-image-2d-with-video-rgba4444.html] type: testharness expected: TIMEOUT + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba5551.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba5551.html.ini index 757c5f89f21..70695a2543f 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba5551.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba5551.html.ini @@ -4,3 +4,6 @@ [WebGL test #0: Unable to fetch WebGL rendering context for Canvas] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video.html.ini index 2f052c68478..f74c0b51cf2 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video.html.ini @@ -4,3 +4,6 @@ [WebGL test #0: Unable to fetch WebGL rendering context for Canvas] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgb565.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgb565.html.ini index 8baa4869dcf..8c0e1708eb5 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgb565.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgb565.html.ini @@ -6,3 +6,192 @@ [WebGL test #0: at (0, 0) expected: 255,0,0 was 0,0,0] expected: FAIL + [WebGL test #1: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #2: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #3: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #4: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #5: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #6: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #7: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #8: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #9: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #10: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #11: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #12: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #13: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #14: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #15: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #16: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #17: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #18: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #19: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #20: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #21: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #22: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #23: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #24: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #25: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #26: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #27: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #28: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #29: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #30: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #31: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #32: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #33: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #34: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #35: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #36: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #37: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #38: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #39: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #40: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #41: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #42: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #43: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #44: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #45: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #46: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #47: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #48: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #49: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #50: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #51: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #52: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #53: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #54: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #55: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #56: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #57: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #58: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #59: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #60: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #61: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #62: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #63: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba4444.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba4444.html.ini index 18a20f6fb7f..037794850f3 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba4444.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba4444.html.ini @@ -6,3 +6,192 @@ [WebGL test #0: at (0, 0) expected: 255,0,0 was 0,0,0] expected: FAIL + [WebGL test #1: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #2: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #3: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #4: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #5: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #6: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #7: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #8: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #9: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #10: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #11: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #12: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #13: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #14: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #15: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #16: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #17: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #18: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #19: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #20: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #21: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #22: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #23: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #24: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #25: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #26: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #27: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #28: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #29: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #30: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #31: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #32: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #33: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #34: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #35: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #36: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #37: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #38: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #39: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #40: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #41: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #42: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #43: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #44: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #45: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #46: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #47: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #48: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #49: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #50: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #51: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #52: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #53: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #54: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #55: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #56: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #57: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #58: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #59: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #60: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #61: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #62: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #63: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba5551.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba5551.html.ini index 11a836cd9e4..7d1b616ec7e 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba5551.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba5551.html.ini @@ -9,3 +9,192 @@ [WebGL test #0: at (0, 0) expected: 255,0,0 was 0,0,0] expected: FAIL + [WebGL test #1: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #2: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #3: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #4: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #5: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #6: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #7: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #8: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #9: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #10: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #11: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #12: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #13: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #14: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #15: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #16: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #17: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #18: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #19: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #20: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #21: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #22: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #23: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #24: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #25: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #26: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #27: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #28: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #29: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #30: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #31: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #32: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #33: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #34: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #35: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #36: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #37: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #38: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #39: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #40: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #41: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #42: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #43: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #44: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #45: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #46: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #47: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #48: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #49: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #50: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #51: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #52: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #53: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #54: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #55: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #56: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #57: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #58: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #59: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #60: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #61: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #62: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #63: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas.html.ini index 7909dba022d..6db32f7c194 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas.html.ini @@ -6,3 +6,192 @@ [WebGL test #0: at (0, 0) expected: 255,0,0 was 0,0,0] expected: FAIL + [WebGL test #1: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #2: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #3: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #4: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #5: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #6: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #7: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #8: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #9: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #10: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #11: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #12: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #13: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #14: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #15: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #16: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #17: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #18: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #19: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #20: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #21: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #22: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #23: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #24: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #25: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #26: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #27: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #28: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #29: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #30: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #31: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #32: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #33: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #34: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #35: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #36: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #37: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #38: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #39: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #40: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #41: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #42: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #43: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #44: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #45: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #46: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #47: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #48: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #49: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #50: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #51: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #52: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #53: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #54: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #55: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #56: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #57: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #58: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #59: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #60: at (0, 0) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #61: at (0, 16) expected: 0,255,0 was 0,0,0] + expected: FAIL + + [WebGL test #62: at (0, 16) expected: 255,0,0 was 0,0,0] + expected: FAIL + + [WebGL test #63: at (0, 0) expected: 0,255,0 was 0,0,0] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-with-format-and-type.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-with-format-and-type.html.ini new file mode 100644 index 00000000000..6de5d1c40f0 --- /dev/null +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-with-format-and-type.html.ini @@ -0,0 +1,3 @@ +[tex-image-with-format-and-type.html] + type: testharness + expected: CRASH diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot-video.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot-video.html.ini index f3b2d494241..2bfaf29fe82 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot-video.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot-video.html.ini @@ -1,3 +1,6 @@ [texture-npot-video.html] type: testharness expected: TIMEOUT + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-cube-maps.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-cube-maps.html.ini index 75fa9423abe..9466a6ef229 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-cube-maps.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-cube-maps.html.ini @@ -36,3 +36,111 @@ [WebGL test #35: at (0, 1) expected: 255,255,0,255 was 0,255,0,255] expected: FAIL + [WebGL test #44: at (0, 1) expected: 255,0,0,255 was 255,0,255,255] + expected: FAIL + + [WebGL test #45: at (0, 0) expected: 255,0,0,255 was 0,255,255,255] + expected: FAIL + + [WebGL test #47: at (0, 0) expected: 0,255,0,255 was 255,0,255,255] + expected: FAIL + + [WebGL test #50: at (0, 1) expected: 0,255,0,255 was 0,255,255,255] + expected: FAIL + + [WebGL test #51: at (0, 0) expected: 255,0,255,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #54: at (0, 1) expected: 0,255,255,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #62: at (0, 1) expected: 0,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #63: at (0, 0) expected: 0,255,0,255 was 255,0,255,255] + expected: FAIL + + [WebGL test #65: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #68: at (0, 1) expected: 0,0,255,255 was 255,0,255,255] + expected: FAIL + + [WebGL test #69: at (0, 0) expected: 255,0,0,255 was 255,255,0,255] + expected: FAIL + + [WebGL test #72: at (0, 1) expected: 255,0,255,255 was 255,255,0,255] + expected: FAIL + + [WebGL test #80: at (0, 1) expected: 0,0,255,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #81: at (0, 0) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #83: at (0, 0) expected: 255,255,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #86: at (0, 1) expected: 255,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #87: at (0, 0) expected: 0,255,0,255 was 0,255,255,255] + expected: FAIL + + [WebGL test #90: at (0, 1) expected: 255,0,0,255 was 0,255,255,255] + expected: FAIL + + [WebGL test #98: at (0, 1) expected: 255,255,0,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #99: at (0, 0) expected: 255,255,0,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #101: at (0, 0) expected: 0,255,255,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #104: at (0, 1) expected: 0,255,255,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #105: at (0, 0) expected: 0,0,255,255 was 255,0,255,255] + expected: FAIL + + [WebGL test #108: at (0, 1) expected: 0,255,0,255 was 255,0,255,255] + expected: FAIL + + [WebGL test #116: at (0, 1) expected: 0,255,255,255 was 255,255,0,255] + expected: FAIL + + [WebGL test #117: at (0, 0) expected: 0,255,255,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #119: at (0, 0) expected: 255,0,255,255 was 255,255,0,255] + expected: FAIL + + [WebGL test #122: at (0, 1) expected: 255,0,255,255 was 0,0,255,255] + expected: FAIL + + [WebGL test #123: at (0, 0) expected: 255,255,0,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #126: at (0, 1) expected: 0,0,255,255 was 255,0,0,255] + expected: FAIL + + [WebGL test #134: at (0, 1) expected: 255,0,255,255 was 0,255,255,255] + expected: FAIL + + [WebGL test #135: at (0, 0) expected: 255,0,255,255 was 255,255,0,255] + expected: FAIL + + [WebGL test #137: at (0, 0) expected: 255,0,0,255 was 0,255,255,255] + expected: FAIL + + [WebGL test #140: at (0, 1) expected: 255,0,0,255 was 255,255,0,255] + expected: FAIL + + [WebGL test #141: at (0, 0) expected: 0,255,255,255 was 0,255,0,255] + expected: FAIL + + [WebGL test #144: at (0, 1) expected: 255,255,0,255 was 0,255,0,255] + expected: FAIL + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size.html.ini new file mode 100644 index 00000000000..0363f3ad91d --- /dev/null +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size.html.ini @@ -0,0 +1,8 @@ +[texture-size.html] + type: testharness + expected: + if os == "linux": TIMEOUT + [Overall test] + expected: + if os == "linux": NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-upload-size.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-upload-size.html.ini new file mode 100644 index 00000000000..8e1092d6c32 --- /dev/null +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-upload-size.html.ini @@ -0,0 +1,6 @@ +[texture-upload-size.html] + type: testharness + expected: TIMEOUT + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/gl-uniformmatrix4fv.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/gl-uniformmatrix4fv.html.ini index 8043c629976..e30e0715bd8 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/gl-uniformmatrix4fv.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/gl-uniformmatrix4fv.html.ini @@ -1,5 +1,6 @@ [gl-uniformmatrix4fv.html] type: testharness + expected: ERROR [WebGL test #0: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).] expected: FAIL diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/out-of-bounds-uniform-array-access.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/out-of-bounds-uniform-array-access.html.ini new file mode 100644 index 00000000000..3461ba85016 --- /dev/null +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/out-of-bounds-uniform-array-access.html.ini @@ -0,0 +1,6 @@ +[out-of-bounds-uniform-array-access.html] + type: testharness + expected: TIMEOUT + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html.ini index 37bd7d3324e..bbd7c84970e 100644 --- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html.ini +++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html.ini @@ -1,5 +1,9 @@ [uniform-default-values.html] type: testharness + expected: ERROR [WebGL uniform default values] expected: FAIL + [Overall test] + expected: NOTRUN + diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 62275196fbf..7279d1f9440 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -6317,162 +6317,6 @@ {} ] ], - "mozilla/canvas/drawimage_html_image_1.html": [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_1.html", - [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_1_ref.html", - "==" - ] - ], - {} - ] - ], - "mozilla/canvas/drawimage_html_image_10.html": [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_10.html", - [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_10_ref.html", - "==" - ] - ], - {} - ] - ], - "mozilla/canvas/drawimage_html_image_11.html": [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_11.html", - [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_11_ref.html", - "==" - ] - ], - {} - ] - ], - "mozilla/canvas/drawimage_html_image_12.html": [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_12.html", - [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_12_ref.html", - "==" - ] - ], - {} - ] - ], - "mozilla/canvas/drawimage_html_image_13.html": [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_13.html", - [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_13_ref.html", - "==" - ] - ], - {} - ] - ], - "mozilla/canvas/drawimage_html_image_2.html": [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_2.html", - [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_2_ref.html", - "==" - ] - ], - {} - ] - ], - "mozilla/canvas/drawimage_html_image_3.html": [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_3.html", - [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_3_ref.html", - "==" - ] - ], - {} - ] - ], - "mozilla/canvas/drawimage_html_image_4.html": [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_4.html", - [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_4_ref.html", - "==" - ] - ], - {} - ] - ], - "mozilla/canvas/drawimage_html_image_5.html": [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_5.html", - [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_5_ref.html", - "==" - ] - ], - {} - ] - ], - "mozilla/canvas/drawimage_html_image_6.html": [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_6.html", - [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_6_ref.html", - "==" - ] - ], - {} - ] - ], - "mozilla/canvas/drawimage_html_image_7.html": [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_7.html", - [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_7_ref.html", - "==" - ] - ], - {} - ] - ], - "mozilla/canvas/drawimage_html_image_8.html": [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_8.html", - [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_8_ref.html", - "==" - ] - ], - {} - ] - ], - "mozilla/canvas/drawimage_html_image_9.html": [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_9.html", - [ - [ - "/_mozilla/mozilla/canvas/drawimage_html_image_9_ref.html", - "==" - ] - ], - {} - ] - ], "mozilla/details_ui_closed.html": [ [ "/_mozilla/mozilla/details_ui_closed.html", @@ -9529,71 +9373,6 @@ {} ] ], - "mozilla/canvas/drawimage_html_image_10_ref.html": [ - [ - {} - ] - ], - "mozilla/canvas/drawimage_html_image_11_ref.html": [ - [ - {} - ] - ], - "mozilla/canvas/drawimage_html_image_12_ref.html": [ - [ - {} - ] - ], - "mozilla/canvas/drawimage_html_image_13_ref.html": [ - [ - {} - ] - ], - "mozilla/canvas/drawimage_html_image_1_ref.html": [ - [ - {} - ] - ], - "mozilla/canvas/drawimage_html_image_2_ref.html": [ - [ - {} - ] - ], - "mozilla/canvas/drawimage_html_image_3_ref.html": [ - [ - {} - ] - ], - "mozilla/canvas/drawimage_html_image_4_ref.html": [ - [ - {} - ] - ], - "mozilla/canvas/drawimage_html_image_5_ref.html": [ - [ - {} - ] - ], - "mozilla/canvas/drawimage_html_image_6_ref.html": [ - [ - {} - ] - ], - "mozilla/canvas/drawimage_html_image_7_ref.html": [ - [ - {} - ] - ], - "mozilla/canvas/drawimage_html_image_8_ref.html": [ - [ - {} - ] - ], - "mozilla/canvas/drawimage_html_image_9_ref.html": [ - [ - {} - ] - ], "mozilla/click_prevent.html": [ [ {} @@ -25242,112 +25021,8 @@ "9fb338806987e20f1bac3c09231e1e5718ac4b23", "testharness" ], - "mozilla/canvas/drawimage_html_image_1.html": [ - "90ea4e0cfef9731726582e1867d1ced66b6bcc2b", - "reftest" - ], - "mozilla/canvas/drawimage_html_image_10.html": [ - "51a931987a4e22674014d9e9a3f298029f546bbe", - "reftest" - ], - "mozilla/canvas/drawimage_html_image_10_ref.html": [ - "9a70c803aaf5bd8a843b18d6d16779575d4dc6f8", - "support" - ], - "mozilla/canvas/drawimage_html_image_11.html": [ - "9b4da400d9486407b834f8f60416a11cfe68f6cf", - "reftest" - ], - "mozilla/canvas/drawimage_html_image_11_ref.html": [ - "b51c787c97490eed29787cadf62b0c5e5cbd9180", - "support" - ], - "mozilla/canvas/drawimage_html_image_12.html": [ - "a8b04a034bd5fecab74cef610b8320b8d41d5131", - "reftest" - ], - "mozilla/canvas/drawimage_html_image_12_ref.html": [ - "5529c622869289c1a64987216b525766003d5f8c", - "support" - ], - "mozilla/canvas/drawimage_html_image_13.html": [ - "9a47d53761733409f2582e13d5f1b1f9d9e9046e", - "reftest" - ], - "mozilla/canvas/drawimage_html_image_13_ref.html": [ - "30150e3530438d42704fda8b3623286658f6c724", - "support" - ], - "mozilla/canvas/drawimage_html_image_1_ref.html": [ - "9a70c803aaf5bd8a843b18d6d16779575d4dc6f8", - "support" - ], - "mozilla/canvas/drawimage_html_image_2.html": [ - "ed1d7f348d2966af1a95c75e49837a72c032b2c6", - "reftest" - ], - "mozilla/canvas/drawimage_html_image_2_ref.html": [ - "a95c84aace62371b4a58c381acaab51499cdeedb", - "support" - ], - "mozilla/canvas/drawimage_html_image_3.html": [ - "cc8ce7169bdf21905d73597931878422a1cf780c", - "reftest" - ], - "mozilla/canvas/drawimage_html_image_3_ref.html": [ - "59d699ac4347a4af4246c0333e14a91a201da15c", - "support" - ], - "mozilla/canvas/drawimage_html_image_4.html": [ - "45f850d0062a0cfe3c448420fa9e5fea88b2a90a", - "reftest" - ], - "mozilla/canvas/drawimage_html_image_4_ref.html": [ - "6204815172949961351ea34906f99d05063bc78f", - "support" - ], - "mozilla/canvas/drawimage_html_image_5.html": [ - "a023a6543b9207f86b3928859f903ca90f57e824", - "reftest" - ], - "mozilla/canvas/drawimage_html_image_5_ref.html": [ - "839c4941a71523e7b543080aae8722972b20ebbb", - "support" - ], - "mozilla/canvas/drawimage_html_image_6.html": [ - "f9509bb99560ce023f40a0b700b5950bf0a44dda", - "reftest" - ], - "mozilla/canvas/drawimage_html_image_6_ref.html": [ - "359acc11d83341062450e86162d831a9fc1ae158", - "support" - ], - "mozilla/canvas/drawimage_html_image_7.html": [ - "402c02c6aad4732f4fe31405c00a7acf24c71e10", - "reftest" - ], - "mozilla/canvas/drawimage_html_image_7_ref.html": [ - "53efd12eca32f7898ddeabdca9b2e61f952b296d", - "support" - ], - "mozilla/canvas/drawimage_html_image_8.html": [ - "17ffa3edbdb9bbf572710e1981732d299062c5ba", - "reftest" - ], - "mozilla/canvas/drawimage_html_image_8_ref.html": [ - "89f6e5589e3619835d67e8d919ab6a507fb3bbb5", - "support" - ], - "mozilla/canvas/drawimage_html_image_9.html": [ - "5f89f092758cac8462399555528d8135c6c46692", - "reftest" - ], - "mozilla/canvas/drawimage_html_image_9_ref.html": [ - "5e4587978bcf32905a2676da269a5a09d7938718", - "support" - ], "mozilla/canvas/fill_and_stroke_getters_setters.html": [ - "4ae37c115dff4361db2be1849fa5143be19df438", + "794dd75566d0e2086deb0dcfc727dfe1834ca17e", "testharness" ], "mozilla/caption.html": [ diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1.html deleted file mode 100644 index ea5be1227cf..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10.html deleted file mode 100644 index 68363633382..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10_ref.html deleted file mode 100644 index 60545df17ff..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10_ref.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - -
- - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11.html deleted file mode 100644 index d21d3d925b1..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11_ref.html deleted file mode 100644 index 10d8885f2b0..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11_ref.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - -
- - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12.html deleted file mode 100644 index dc9c8d6bb7d..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12_ref.html deleted file mode 100644 index 5f6f22111da..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12_ref.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - -
-
-
- - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13.html deleted file mode 100644 index 5e663d197b2..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13_ref.html deleted file mode 100644 index 9ac306a5cc6..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13_ref.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - -
- - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1_ref.html deleted file mode 100644 index 60545df17ff..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1_ref.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - -
- - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2.html deleted file mode 100644 index 9eeaae95ebb..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2_ref.html deleted file mode 100644 index c4535283500..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2_ref.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - -
- - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3.html deleted file mode 100644 index 63b303944ba..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3_ref.html deleted file mode 100644 index b72687a8ace..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3_ref.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - -
- - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4.html deleted file mode 100644 index dfaf4018d69..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4_ref.html deleted file mode 100644 index baa6591a220..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4_ref.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - -
- -
- - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5.html deleted file mode 100644 index a359fdf35b5..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5_ref.html deleted file mode 100644 index d8ec95525de..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5_ref.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - -
-
- -
-
- - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6.html deleted file mode 100644 index 4482ca3c319..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6_ref.html deleted file mode 100644 index d7343375508..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6_ref.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - -
- - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7.html deleted file mode 100644 index cf6daa0d4c3..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7_ref.html deleted file mode 100644 index e823ffbb75a..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7_ref.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - -
-
-
- - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8.html deleted file mode 100644 index c1ebfa81648..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8_ref.html deleted file mode 100644 index 1a025d26d99..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8_ref.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - -
-
-
- - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9.html deleted file mode 100644 index f0fc85d384a..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9_ref.html deleted file mode 100644 index 5341e05c1e1..00000000000 --- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9_ref.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - -
- - diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/fill_and_stroke_getters_setters.html b/tests/wpt/mozilla/tests/mozilla/canvas/fill_and_stroke_getters_setters.html index 7ddaa5bfbf0..aec8c864348 100644 --- a/tests/wpt/mozilla/tests/mozilla/canvas/fill_and_stroke_getters_setters.html +++ b/tests/wpt/mozilla/tests/mozilla/canvas/fill_and_stroke_getters_setters.html @@ -16,12 +16,16 @@ function roundtrip(property, vals) { } } -var img = document.createElement('img'); -img.src = '../2x2.png'; -var pattern = ctx.createPattern(img, 'repeat'); +async_test(function(t) { + var img = document.createElement('img'); + img.src = '../2x2.png'; + img.onload = t.step_func_done(function() { + var pattern = ctx.createPattern(img, 'repeat'); -var gradient = ctx.createLinearGradient(0.0, 0.0, 1.0, 1.0); + var gradient = ctx.createLinearGradient(0.0, 0.0, 1.0, 1.0); -roundtrip('strokeStyle', ['#ff0000', gradient, pattern]); -roundtrip('fillStyle', ['#ff0000', gradient, pattern]); + roundtrip('strokeStyle', ['#ff0000', gradient, pattern]); + roundtrip('fillStyle', ['#ff0000', gradient, pattern]); + }); +}); diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html index b9de85a9774..95b25b5adca 100644 --- a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html +++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html @@ -1,4 +1,5 @@ +